mirror of
https://github.com/Kunsi/pretalx-plugin-broadcast-tools
synced 2024-11-22 01:21:01 +00:00
move views into dedicated files
This commit is contained in:
parent
8f8f8a90e2
commit
3063adcc73
6 changed files with 119 additions and 107 deletions
|
@ -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",
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
28
pretalx_broadcast_tools/views/event_info.py
Normal file
28
pretalx_broadcast_tools/views/event_info.py
Normal 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,
|
||||||
|
},
|
||||||
|
)
|
37
pretalx_broadcast_tools/views/orga.py
Normal file
37
pretalx_broadcast_tools/views/orga.py
Normal 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,
|
||||||
|
}
|
30
pretalx_broadcast_tools/views/qr.py
Normal file
30
pretalx_broadcast_tools/views/qr.py
Normal 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")
|
|
@ -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):
|
9
pretalx_broadcast_tools/views/static_html.py
Normal file
9
pretalx_broadcast_tools/views/static_html.py
Normal 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"
|
Loading…
Reference in a new issue