2021-10-27 15:19:55 +00:00
|
|
|
import logging
|
2021-11-21 09:09:26 +00:00
|
|
|
import json
|
2021-10-27 15:19:55 +00:00
|
|
|
|
2021-09-28 13:10:22 +00:00
|
|
|
from django.shortcuts import render, redirect, get_object_or_404
|
2021-09-30 17:09:42 +00:00
|
|
|
from django.views.decorators.csrf import csrf_exempt
|
2021-09-30 18:33:47 +00:00
|
|
|
from django.conf import settings
|
2021-10-27 15:19:55 +00:00
|
|
|
from django.contrib.gis.geoip2 import GeoIP2, GeoIP2Exception
|
|
|
|
import ox.geo
|
2021-09-28 13:10:22 +00:00
|
|
|
|
|
|
|
from . import models
|
|
|
|
|
2021-10-27 15:19:55 +00:00
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
def get_ip(request):
|
|
|
|
if 'HTTP_X_FORWARDED_FOR' in request.META:
|
|
|
|
ip = request.META['HTTP_X_FORWARDED_FOR'].split(',')[0]
|
|
|
|
else:
|
|
|
|
ip = request.META['REMOTE_ADDR']
|
|
|
|
if ip.startswith('::ffff:'):
|
|
|
|
ip = ip[len('::ffff:'):]
|
|
|
|
return ip
|
|
|
|
|
|
|
|
def get_stream_prefix(request):
|
2021-11-21 09:09:26 +00:00
|
|
|
return settings.DEFAULT_PANDORA_API.replace('/api/', '/')
|
|
|
|
'''
|
|
|
|
domain = settings.DEFAULT_PANDORA_API.split('/')[3]
|
|
|
|
prefix = "https://v2.%s/" % domain
|
2021-10-27 15:19:55 +00:00
|
|
|
cdn = {
|
2021-11-21 09:09:26 +00:00
|
|
|
'Eastern Asia': "https://v1.%s/" % domain,
|
|
|
|
'Southern Asia': "https://v1.%s/" % domain,
|
|
|
|
'Asia': "https://v1.%s/" % domain,
|
2021-10-27 15:19:55 +00:00
|
|
|
}
|
2021-11-21 09:09:26 +00:00
|
|
|
'''
|
2021-10-27 15:19:55 +00:00
|
|
|
ip = get_ip(request)
|
|
|
|
try:
|
|
|
|
g = GeoIP2()
|
|
|
|
country = g.country(ip)
|
|
|
|
if country:
|
|
|
|
country = ox.get_country_name(country['country_code'])
|
|
|
|
info = ox.geo.get_country(country)
|
|
|
|
for key in ('name', 'region', 'continent'):
|
|
|
|
location = info.get(key)
|
|
|
|
#print(location)
|
|
|
|
if location in cdn:
|
|
|
|
return cdn[location]
|
|
|
|
except:
|
|
|
|
logger.error('using default prefix, no geoip data found, run ./mange.py update_geoio', exc_info=True)
|
|
|
|
return prefix
|
|
|
|
return prefix
|
|
|
|
|
2021-09-28 13:10:22 +00:00
|
|
|
def films(request):
|
|
|
|
context = {}
|
2021-10-11 12:55:45 +00:00
|
|
|
context['films'] = models.Film.objects.filter(public=True).order_by('position', 'data__title')
|
2021-09-30 18:33:47 +00:00
|
|
|
context['settings'] = settings
|
2021-09-28 13:10:22 +00:00
|
|
|
return render(request, 'films.html', context)
|
|
|
|
|
|
|
|
def film(request, slug):
|
|
|
|
context = {}
|
|
|
|
context['film'] = get_object_or_404(models.Film, slug=slug)
|
2021-09-30 18:33:47 +00:00
|
|
|
context['settings'] = settings
|
2021-10-27 15:19:55 +00:00
|
|
|
context['stream_prefix'] = get_stream_prefix(request)
|
2021-11-21 09:09:26 +00:00
|
|
|
context['pandora_url'] = settings.DEFAULT_PANDORA_API.replace('/api/', '')
|
2021-09-28 13:10:22 +00:00
|
|
|
return render(request, 'film.html', context)
|
|
|
|
|
2021-11-21 09:09:26 +00:00
|
|
|
def film_play(request, slug, id):
|
2021-09-28 13:10:22 +00:00
|
|
|
context = {}
|
2021-09-30 18:33:47 +00:00
|
|
|
context['settings'] = settings
|
2021-11-21 09:09:26 +00:00
|
|
|
context['config'] = json.dumps({
|
|
|
|
'stream_prefix': get_stream_prefix(request),
|
2021-11-21 09:13:02 +00:00
|
|
|
'layer': 'transcripts',
|
2021-11-21 09:09:26 +00:00
|
|
|
'item': id
|
|
|
|
})
|
|
|
|
context['pandora_url'] = settings.DEFAULT_PANDORA_API.replace('/api/', '')
|
2021-09-28 13:10:22 +00:00
|
|
|
return render(request, 'film_play.html', context)
|
|
|
|
|
|
|
|
def edits(request):
|
|
|
|
context = {}
|
|
|
|
context['edits'] = models.Edit.objects.filter(public=True).order_by('created')
|
|
|
|
return render(request, 'edits.html', context)
|
|
|
|
|
|
|
|
def edit(request, slug):
|
|
|
|
context = {}
|
|
|
|
context['edit'] = get_object_or_404(models.Edit, slug=slug)
|
2021-09-30 18:33:47 +00:00
|
|
|
context['settings'] = settings
|
2021-09-28 13:10:22 +00:00
|
|
|
return render(request, 'edit.html', context)
|
|
|
|
|
2021-09-30 17:09:42 +00:00
|
|
|
def edit_play(request, slug, lang):
|
2021-09-28 13:10:22 +00:00
|
|
|
context = {}
|
|
|
|
context['edit'] = get_object_or_404(models.Edit, slug=slug)
|
2021-09-30 17:09:42 +00:00
|
|
|
context['lang'] = lang
|
2021-09-30 18:33:47 +00:00
|
|
|
context['settings'] = settings
|
2021-09-28 13:10:22 +00:00
|
|
|
return render(request, 'edit_play.html', context)
|
|
|
|
|
|
|
|
def tv(request):
|
|
|
|
context = {}
|
2021-09-30 18:33:47 +00:00
|
|
|
context['settings'] = settings
|
2021-09-28 13:10:22 +00:00
|
|
|
return render(request, 'tv.html', context)
|
2021-09-30 17:09:42 +00:00
|
|
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
|
|
def pandoraAPI(request):
|
|
|
|
import ox
|
|
|
|
from .utils import render_to_json_response
|
|
|
|
import json
|
|
|
|
data = json.loads(request.body.decode())
|
|
|
|
print('pandora request', data)
|
|
|
|
api = ox.api.signin('https://pad.ma/api/')
|
|
|
|
data = getattr(api, data['action'])(**data['data'])
|
|
|
|
print('response', data)
|
|
|
|
return render_to_json_response(data)
|
|
|
|
|