from django.shortcuts import render from django.http import HttpResponse, HttpResponseRedirect from django.template import loader from json import loads, dumps from math import floor import requests from .forms import ServerAddressForm import logging # Create your views here. default_address = 'http://localhost:8000/spoiler' # logging.basicConfig(encoding='utf-8', level=logging.DEBUG) def index(request): request_data = None # with open('tracker/static/tracker/data/listen_address.json', 'r') as address: # read_address = loads(address.read()) # if (read_address['address']['user'] != ''): # server_address = read_address['address']['user'] # else: # server_address = read_address['address']['default'] if 'listen_address' in request.session.keys(): server_address = request.session['listen_address'] # TODO: consider serializing user sessions for debugging in the future. logging.info( f'Session listen address changed to: {server_address}') else: request.session['listen_address'] = default_address server_address = default_address logging.info( f'Session listen address for {request.session} set to: {server_address}') is_hidden = True try: request_data = requests.get( server_address, timeout=5, verify=True).text except: with open('empty_spoiler.json', 'r') as t: try: tracker_output = loads(t.read()) is_hidden = False except: return try: tracker_output = loads(request_data) except: with open('empty_spoiler.json', 'r') as t: try: tracker_output = loads(t.read()) is_hidden = False except: return with open('tracker/static/tracker/data/holy_cross_codes.json', 'r') as t: try: cross_codes = loads(t.read()) except: return tracker_debug = tracker_output['Debug'] tracker_totals = tracker_output['Totals'] tracker_current_scene = tracker_output['Current']['Scene'] tracker_current_scene_data = tracker_output['Scenes'][tracker_current_scene] tracker_scenes = tracker_output['Scenes'] entered_codes = tracker_output['Codes'] try: tracker_codes = cross_codes for scene in entered_codes: for k, v in cross_codes[scene].items(): tracker_codes[scene][k] = ( v, entered_codes[scene][k]) except Exception as e: current_cross_codes = {} # print(e) template = loader.get_template('tracker/index.html') form = ServerAddressForm() form.fields['server_address_form'].initial = server_address context = { 'server_address': server_address, 'is_hidden': is_hidden, 'debug': tracker_debug, 'default_codes': cross_codes['Default'], 'tracked_codes': tracker_codes, 'totals': tracker_totals, 'scenes': tracker_scenes, 'current_scene': { 'title': tracker_current_scene, 'data': tracker_current_scene_data }, 'form': form } return HttpResponse(template.render(context, request)) def get_address(request): if request.method == 'GET': return HttpResponse(dumps(request.session['listen_address']), content_type="application/json") else: return render(request, 'tracker/index.html') def set_address(request): if request.method == 'POST': form = ServerAddressForm(request.POST) form.label_classes = ('p-2') if form.is_valid(): # with open('tracker/static/tracker/data/listen_address.json', 'r') as la: # listen_address = loads(la.read()) # listen_address['address']['user'] = form.cleaned_data['server_address_form'] # with open('tracker/static/tracker/data/listen_address.json', 'w') as la: # la.write(dumps(listen_address)) server_address = form.cleaned_data['server_address_form'] request.session['listen_address'] = form.cleaned_data['server_address_form'] return HttpResponseRedirect('/') else: form = ServerAddressForm() return render(request, 'tracker/index.html', {'form': form})