1
0
Fork 0
mirror of https://github.com/Kunsi/pretalx-plugin-broadcast-tools synced 2024-11-22 01:01:02 +00:00

move views into dedicated files

This commit is contained in:
Franzi 2023-09-30 12:39:30 +02:00
parent 8f8f8a90e2
commit 3063adcc73
Signed by: kunsi
GPG key ID: 12E3D2136B818350
6 changed files with 119 additions and 107 deletions

View file

@ -1,42 +1,46 @@
from django.urls import re_path from django.urls import re_path
from pretalx.event.models.event import SLUG_CHARS from pretalx.event.models.event import SLUG_CHARS
from . import views from .views.event_info import BroadcastToolsEventInfoView
from .views.orga import BroadcastToolsOrgaView
from .views.qr import BroadcastToolsFeedbackQrCodeSvg, BroadcastToolsPublicQrCodeSvg
from .views.schedule import BroadcastToolsScheduleView
from .views.static_html import BroadcastToolsLowerThirdsView, BroadcastToolsRoomInfoView
urlpatterns = [ urlpatterns = [
re_path( re_path(
f"^(?P<event>[{SLUG_CHARS}]+)/p/broadcast-tools/event.json$", f"^(?P<event>[{SLUG_CHARS}]+)/p/broadcast-tools/event.json$",
views.BroadcastToolsEventInfoView.as_view(), BroadcastToolsEventInfoView.as_view(),
name="event_info", name="event_info",
), ),
re_path( re_path(
f"^(?P<event>[{SLUG_CHARS}]+)/p/broadcast-tools/schedule.json$", f"^(?P<event>[{SLUG_CHARS}]+)/p/broadcast-tools/schedule.json$",
views.BroadcastToolsScheduleView.as_view(), BroadcastToolsScheduleView.as_view(),
name="schedule", name="schedule",
), ),
re_path( re_path(
f"^(?P<event>[{SLUG_CHARS}]+)/p/broadcast-tools/lower-thirds/$", f"^(?P<event>[{SLUG_CHARS}]+)/p/broadcast-tools/lower-thirds/$",
views.BroadcastToolsLowerThirdsView.as_view(), BroadcastToolsLowerThirdsView.as_view(),
name="lowerthirds", name="lowerthirds",
), ),
re_path( re_path(
f"^(?P<event>[{SLUG_CHARS}]+)/p/broadcast-tools/feedback-qr/(?P<talk>[0-9]+).svg$", f"^(?P<event>[{SLUG_CHARS}]+)/p/broadcast-tools/feedback-qr/(?P<talk>[0-9]+).svg$",
views.BroadcastToolsFeedbackQrCodeSvg.as_view(), BroadcastToolsFeedbackQrCodeSvg.as_view(),
name="feedback_qr_id", name="feedback_qr_id",
), ),
re_path( re_path(
f"^(?P<event>[{SLUG_CHARS}]+)/p/broadcast-tools/public-qr/(?P<talk>[0-9]+).svg$", f"^(?P<event>[{SLUG_CHARS}]+)/p/broadcast-tools/public-qr/(?P<talk>[0-9]+).svg$",
views.BroadcastToolsPublicQrCodeSvg.as_view(), BroadcastToolsPublicQrCodeSvg.as_view(),
name="public_qr_id", name="public_qr_id",
), ),
re_path( re_path(
f"^(?P<event>[{SLUG_CHARS}]+)/p/broadcast-tools/room-info/$", f"^(?P<event>[{SLUG_CHARS}]+)/p/broadcast-tools/room-info/$",
views.BroadcastToolsRoomInfoView.as_view(), BroadcastToolsRoomInfoView.as_view(),
name="room_info", name="room_info",
), ),
re_path( re_path(
f"^orga/event/(?P<event>[{SLUG_CHARS}]+)/settings/p/broadcast-tools/$", f"^orga/event/(?P<event>[{SLUG_CHARS}]+)/settings/p/broadcast-tools/$",
views.BroadcastToolsOrgaView.as_view(), BroadcastToolsOrgaView.as_view(),
name="orga", name="orga",
), ),
] ]

View file

@ -0,0 +1,28 @@
from django.http import JsonResponse
from django.views import View
class BroadcastToolsEventInfoView(View):
def get(self, request, *args, **kwargs):
color = self.request.event.primary_color or "#3aa57c"
return JsonResponse(
{
"color": color,
"name": self.request.event.name.localize(self.request.event.locale),
"no_talk": str(
self.request.event.settings.broadcast_tools_lower_thirds_no_talk_info
),
"room-info": {
"lower_info": self.request.event.settings.broadcast_tools_room_info_lower_content
or "",
"show_next_talk": True
if self.request.event.settings.broadcast_tools_room_info_show_next_talk
else False,
},
"slug": self.request.event.slug,
"start": self.request.event.date_from.isoformat(),
"end": self.request.event.date_to.isoformat(),
"timezone": str(self.request.event.tz),
"locale": self.request.event.locale,
},
)

View file

@ -0,0 +1,37 @@
from django.views.generic import FormView
from pretalx.common.mixins.views import PermissionRequired
from ..forms import BroadcastToolsSettingsForm
class BroadcastToolsOrgaView(PermissionRequired, FormView):
form_class = BroadcastToolsSettingsForm
permission_required = "orga.change_settings"
template_name = "pretalx_broadcast_tools/orga.html"
def get_success_url(self):
return self.request.path
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["localized_rooms"] = [
room.name.localize(self.request.event.locale)
for room in self.request.event.rooms.all()
]
return context
def form_valid(self, form):
form.save()
return super().form_valid(form)
def get_object(self):
return self.request.event
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
return {
"obj": self.request.event,
"attribute_name": "settings",
"locales": self.request.event.locales,
**kwargs,
}

View file

@ -0,0 +1,30 @@
from xml.etree import ElementTree as ET
import qrcode
import qrcode.image.svg
from django.conf import settings
from django.http import HttpResponse
from django.utils.safestring import mark_safe
from django.views import View
class BroadcastToolsFeedbackQrCodeSvg(View):
def get(self, request, *args, **kwargs):
talk = self.request.event.submissions.filter(id=kwargs["talk"]).first()
domain = request.event.custom_domain or settings.SITE_URL
image = qrcode.make(
f"{domain}{talk.urls.feedback}", image_factory=qrcode.image.svg.SvgImage
)
svg_data = mark_safe(ET.tostring(image.get_image()).decode())
return HttpResponse(svg_data, content_type="image/svg+xml")
class BroadcastToolsPublicQrCodeSvg(View):
def get(self, request, *args, **kwargs):
talk = self.request.event.submissions.filter(id=kwargs["talk"]).first()
domain = request.event.custom_domain or settings.SITE_URL
image = qrcode.make(
f"{domain}{talk.urls.public}", image_factory=qrcode.image.svg.SvgImage
)
svg_data = mark_safe(ET.tostring(image.get_image()).decode())
return HttpResponse(svg_data, content_type="image/svg+xml")

View file

@ -1,110 +1,14 @@
import datetime as dt import datetime as dt
from xml.etree import ElementTree as ET
import qrcode
import qrcode.image.svg
from django.conf import settings from django.conf import settings
from django.http import HttpResponse, JsonResponse from django.http import JsonResponse
from django.urls import reverse from django.urls import reverse
from django.utils.safestring import mark_safe
from django.views import View from django.views import View
from django.views.generic import FormView
from django.views.generic.base import TemplateView
from pretalx.agenda.views.schedule import ScheduleMixin from pretalx.agenda.views.schedule import ScheduleMixin
from pretalx.common.mixins.views import EventPermissionRequired, PermissionRequired from pretalx.common.mixins.views import EventPermissionRequired
from pretalx.schedule.exporters import ScheduleData from pretalx.schedule.exporters import ScheduleData
from .forms import BroadcastToolsSettingsForm from ..utils.placeholders import placeholders
from .utils.placeholders import placeholders
class BroadcastToolsLowerThirdsView(TemplateView):
template_name = "pretalx_broadcast_tools/lower_thirds.html"
class BroadcastToolsRoomInfoView(TemplateView):
template_name = "pretalx_broadcast_tools/room_info.html"
class BroadcastToolsOrgaView(PermissionRequired, FormView):
form_class = BroadcastToolsSettingsForm
permission_required = "orga.change_settings"
template_name = "pretalx_broadcast_tools/orga.html"
def get_success_url(self):
return self.request.path
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["localized_rooms"] = [
room.name.localize(self.request.event.locale)
for room in self.request.event.rooms.all()
]
return context
def form_valid(self, form):
form.save()
return super().form_valid(form)
def get_object(self):
return self.request.event
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
return {
"obj": self.request.event,
"attribute_name": "settings",
"locales": self.request.event.locales,
**kwargs,
}
class BroadcastToolsEventInfoView(View):
def get(self, request, *args, **kwargs):
color = self.request.event.primary_color or "#3aa57c"
return JsonResponse(
{
"color": color,
"name": self.request.event.name.localize(self.request.event.locale),
"no_talk": str(
self.request.event.settings.broadcast_tools_lower_thirds_no_talk_info
),
"room-info": {
"lower_info": self.request.event.settings.broadcast_tools_room_info_lower_content
or "",
"show_next_talk": True
if self.request.event.settings.broadcast_tools_room_info_show_next_talk
else False,
},
"slug": self.request.event.slug,
"start": self.request.event.date_from.isoformat(),
"end": self.request.event.date_to.isoformat(),
"timezone": str(self.request.event.tz),
"locale": self.request.event.locale,
},
)
class BroadcastToolsFeedbackQrCodeSvg(View):
def get(self, request, *args, **kwargs):
talk = self.request.event.submissions.filter(id=kwargs["talk"]).first()
domain = request.event.custom_domain or settings.SITE_URL
image = qrcode.make(
f"{domain}{talk.urls.feedback}", image_factory=qrcode.image.svg.SvgImage
)
svg_data = mark_safe(ET.tostring(image.get_image()).decode())
return HttpResponse(svg_data, content_type="image/svg+xml")
class BroadcastToolsPublicQrCodeSvg(View):
def get(self, request, *args, **kwargs):
talk = self.request.event.submissions.filter(id=kwargs["talk"]).first()
domain = request.event.custom_domain or settings.SITE_URL
image = qrcode.make(
f"{domain}{talk.urls.public}", image_factory=qrcode.image.svg.SvgImage
)
svg_data = mark_safe(ET.tostring(image.get_image()).decode())
return HttpResponse(svg_data, content_type="image/svg+xml")
class BroadcastToolsScheduleView(EventPermissionRequired, ScheduleMixin, View): class BroadcastToolsScheduleView(EventPermissionRequired, ScheduleMixin, View):

View file

@ -0,0 +1,9 @@
from django.views.generic.base import TemplateView
class BroadcastToolsLowerThirdsView(TemplateView):
template_name = "pretalx_broadcast_tools/lower_thirds.html"
class BroadcastToolsRoomInfoView(TemplateView):
template_name = "pretalx_broadcast_tools/room_info.html"