diff --git a/pretalx_broadcast_tools/urls.py b/pretalx_broadcast_tools/urls.py index 1ca3ee1..cacb47e 100644 --- a/pretalx_broadcast_tools/urls.py +++ b/pretalx_broadcast_tools/urls.py @@ -24,6 +24,11 @@ urlpatterns = [ views.BroadcastToolsRoomInfoView.as_view(), name="room_info", ), + re_path( + f"^(?P[{SLUG_CHARS}]+)/p/broadcast-tools/public-qr/(?P[0-9]+).svg$", + views.BroadcastToolsPublicQrCodeSvg.as_view(), + name="public_qr_id", + ), re_path( f"^(?P[{SLUG_CHARS}]+)/p/broadcast-tools/schedule.json$", views.BroadcastToolsScheduleView.as_view(), diff --git a/pretalx_broadcast_tools/views.py b/pretalx_broadcast_tools/views.py index d637e94..f39fd54 100644 --- a/pretalx_broadcast_tools/views.py +++ b/pretalx_broadcast_tools/views.py @@ -90,6 +90,17 @@ class BroadcastToolsFeedbackQrCodeSvg(View): 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): permission_required = "agenda.view_schedule"