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

138 lines
4.7 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, BackendFilepathForm
import logging
# Create your views here.
# Debug and defaults.
defaults = {
'listen_address': 'http://localhost:8000/',
'backend_filepath': ''
}
# default_address = 'http://localhost:8000/'
# logging.basicConfig(encoding='utf-8', level=logging.DEBUG)
def session_key(session, key):
if key not in session.keys():
session[key] = defaults[key]
# TODO: consider serializing user sessions for debugging in the future.
logging.info(
f'Session {key} set to: {session[key]}')
return session[key]
is_hidden = True
def index(request):
request_data = None
listen_address = session_key(request.session, 'listen_address')
backend_filepath = session_key(request.session, 'backend_filepath')
try:
request_data = requests.get(
f'{server_address}spoiler', 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:
temp_codes = loads(t.read())
cross_codes = { x: { k: l.replace('U', '⬆️').replace('D', '⬇️').replace('L', '⬅️').replace('R', '➡️').strip() for k,l in temp_codes[x].items() } for x in temp_codes.keys() }
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')
server_address_form = ServerAddressForm()
server_address_form.fields['server_address_form'].initial = listen_address
backend_filepath_form = BackendFilepathForm()
backend_filepath_form.fields['backend_filepath_form'].initial = backend_filepath
context = {
'backend_filepath': backend_filepath,
'server_address': listen_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
},
'server_address_form': server_address_form,
'backend_filepath_form': backend_filepath_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)
if form.is_valid():
request.session['listen_address'] = form.cleaned_data['server_address_form']
return HttpResponseRedirect('/')
else:
form = ServerAddressForm()
return render(request, 'tracker/index.html', {'server_address_form': form})
def set_settings(request):
if request.method == 'POST':
form = BackendFilepathForm(request.POST)
if form.is_valid():
request.session['backend_filepath'] = form.cleaned_data['backend_filepath_form']
return HttpResponseRedirect('/')
else:
form = BackendFilepathForm()
return render(request, 'tracker/index.html', {'backend_filepath_form': form})
def get_settings(request):
if request.method == 'GET':
return HttpResponse(dumps(request.session['backend_filepath']), content_type="application/json")
else:
return render(request, 'tracker/index.html')