1
0
Fork 0
mirror of https://github.com/Kunsi/pretalx-plugin-broadcast-tools synced 2024-06-03 01:16:21 +00:00
pretalx-plugin-broadcast-tools/pretalx_broadcast_tools/views.py

138 lines
4.8 KiB
Python
Raw Normal View History

2021-11-20 08:05:08 +00:00
import datetime as dt
2021-11-21 07:06:35 +00:00
import pytz
from django.http import JsonResponse
from django.views import View
from django.views.generic import FormView
2021-11-20 08:05:08 +00:00
from django.views.generic.base import TemplateView
from pretalx.agenda.views.schedule import ScheduleMixin
2021-11-21 12:30:31 +00:00
from pretalx.common.mixins.views import EventPermissionRequired, PermissionRequired
2021-11-20 08:05:08 +00:00
from pretalx.schedule.exporters import ScheduleData
from .forms import BroadcastToolsSettingsForm
from .utils.placeholders import placeholders
2021-11-20 08:05:08 +00:00
class BroadcastToolsLowerThirdsView(TemplateView):
template_name = "pretalx_broadcast_tools/lower_thirds.html"
2021-11-20 08:05:08 +00:00
class BroadcastToolsOrgaView(PermissionRequired, FormView):
form_class = BroadcastToolsSettingsForm
2021-11-21 07:06:35 +00:00
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)
2022-11-22 18:21:52 +00:00
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()
2021-11-21 07:06:35 +00:00
return {
"obj": self.request.event,
"attribute_name": "settings",
2021-11-21 12:07:19 +00:00
"locales": self.request.event.locales,
2021-11-21 07:06:35 +00:00
**kwargs,
}
class BroadcastToolsEventInfoView(View):
def get(self, request, *args, **kwargs):
2021-11-22 09:26:49 +00:00
color = self.request.event.primary_color or "#3aa57c"
return JsonResponse(
{
"slug": self.request.event.slug,
"name": str(self.request.event.name),
2022-11-07 03:27:00 +00:00
"no_talk": str(
self.request.event.settings.broadcast_tools_lower_thirds_no_talk_info
),
"color": color,
},
)
class BroadcastToolsScheduleView(EventPermissionRequired, ScheduleMixin, View):
2021-11-20 08:05:08 +00:00
permission_required = "agenda.view_schedule"
def get(self, request, *args, **kwargs):
schedule = ScheduleData(
event=self.request.event,
schedule=self.schedule,
)
tz = pytz.timezone(schedule.event.timezone)
2022-11-07 03:27:00 +00:00
infoline = str(
schedule.event.settings.broadcast_tools_lower_thirds_info_string or ""
)
try:
return JsonResponse(
{
"rooms": sorted(
{
room["name"].localize(schedule.event.locale)
for day in schedule.data
for room in day["rooms"]
}
),
"talks": [
{
"id": talk.submission.id,
"start": talk.start.astimezone(tz).isoformat(),
"end": (talk.start + dt.timedelta(minutes=talk.duration))
.astimezone(tz)
.isoformat(),
"slug": talk.frab_slug,
"title": talk.submission.title,
"persons": sorted(
{
person.get_display_name()
for person in talk.submission.speakers.all()
}
),
"track": {
"color": talk.submission.track.color,
"name": str(talk.submission.track.name),
2021-11-21 07:06:35 +00:00
}
if talk.submission.track
else None,
"room": room["name"].localize(schedule.event.locale),
"infoline": infoline.format(**placeholders(schedule, talk)),
2021-11-21 07:06:35 +00:00
}
for day in schedule.data
for room in day["rooms"]
for talk in room["talks"]
],
},
)
except KeyError as e:
key = str(e)[1:-1]
2022-11-08 19:04:28 +00:00
return JsonResponse(
{
"error": [
f"Could not find value for placeholder {{{key}}} in info line.",
f"If you want to use {{{key}}} without evaluating it, please use as follows: {{{{{key}}}}}",
],
}
)
except Exception as e:
2022-11-08 19:04:28 +00:00
return JsonResponse(
{
"error": [
repr(e),
],
}
)