tunic-tracker-redux/tunictracker/tracker/views.py

121 lines
4.3 KiB
Python

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})