85 lines
2.3 KiB
Python
85 lines
2.3 KiB
Python
import json
|
|
|
|
from django.shortcuts import render
|
|
from django.http import HttpResponse, HttpResponseRedirect
|
|
from django.urls import reverse
|
|
|
|
from .models import GURPSCharacter, Campaign
|
|
from .forms import UploadFileForm
|
|
|
|
|
|
def index(request):
|
|
characters = GURPSCharacter.objects.all()
|
|
context = {"characters": characters}
|
|
|
|
if request.method == "POST":
|
|
form = UploadFileForm(request.POST, request.FILES)
|
|
if form.is_valid():
|
|
handle_uploaded_file(request.FILES["file"])
|
|
return HttpResponseRedirect(reverse("index"))
|
|
else:
|
|
form = UploadFileForm()
|
|
|
|
context["form"] = form
|
|
return render(request, "characters/list.html", context)
|
|
|
|
|
|
def details(request, uuid):
|
|
character = GURPSCharacter.objects.get(uuid=uuid)
|
|
|
|
context = {"character": character}
|
|
|
|
return render(request, "characters/embedded.html", context)
|
|
|
|
|
|
def upload_file(request):
|
|
if request.method == "POST":
|
|
form = UploadFileForm(request.POST, request.FILES)
|
|
if form.is_valid():
|
|
handle_uploaded_file(request.FILES["file"])
|
|
return HttpResponseRedirect("/success/url/")
|
|
else:
|
|
form = UploadFileForm()
|
|
return render(request, "characters/upload.html", {"form": form})
|
|
|
|
|
|
def handle_uploaded_file(f):
|
|
f.seek(0) # We read the file in the validator
|
|
data = json.loads(f.read())
|
|
|
|
uuid = data["id"]
|
|
name = data["profile"]["name"]
|
|
|
|
try:
|
|
character = GURPSCharacter.objects.get(uuid=uuid)
|
|
character.details = data
|
|
character.name = name
|
|
character.save()
|
|
except GURPSCharacter.DoesNotExist:
|
|
character = GURPSCharacter(uuid=uuid, name=name, details=data)
|
|
character.save()
|
|
|
|
|
|
def download(_, uuid):
|
|
mime_type = "application/x-gcs-gcs"
|
|
character = GURPSCharacter.objects.get(uuid=uuid)
|
|
response = HttpResponse(
|
|
json.dumps(character.details), content_type=mime_type
|
|
)
|
|
response["Content-Disposition"] = (
|
|
"attachment; filename=%s.gcs" % character.name
|
|
)
|
|
return response
|
|
|
|
|
|
def character(request, uuid):
|
|
response = HttpResponse("Character")
|
|
return response
|
|
|
|
|
|
def campaign(request, uuid):
|
|
campaign = Campaign.objects.get(id=uuid)
|
|
|
|
context = {"campaign": campaign}
|
|
|
|
return render(request, "campaigns/details.html", context)
|