2021-11-20 08:05:08 +00:00
|
|
|
import datetime as dt
|
|
|
|
|
2023-02-28 07:27:01 +00:00
|
|
|
from django.conf import settings
|
2023-09-30 10:39:30 +00:00
|
|
|
from django.http import JsonResponse
|
2023-02-28 08:51:07 +00:00
|
|
|
from django.urls import reverse
|
2022-11-22 18:19:33 +00:00
|
|
|
from django.views import View
|
2021-11-20 08:05:08 +00:00
|
|
|
from pretalx.agenda.views.schedule import ScheduleMixin
|
2023-09-30 10:39:30 +00:00
|
|
|
from pretalx.common.mixins.views import EventPermissionRequired
|
2021-11-20 08:05:08 +00:00
|
|
|
from pretalx.schedule.exporters import ScheduleData
|
|
|
|
|
2023-09-30 10:39:30 +00:00
|
|
|
from ..utils.placeholders import placeholders
|
2023-02-28 17:49:29 +00:00
|
|
|
|
|
|
|
|
2022-11-22 18:19:33 +00:00
|
|
|
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,
|
|
|
|
)
|
2022-11-07 03:27:00 +00:00
|
|
|
infoline = str(
|
|
|
|
schedule.event.settings.broadcast_tools_lower_thirds_info_string or ""
|
|
|
|
)
|
2022-11-08 18:43:17 +00:00
|
|
|
try:
|
|
|
|
return JsonResponse(
|
|
|
|
{
|
|
|
|
"rooms": sorted(
|
|
|
|
{
|
2022-11-22 18:19:11 +00:00
|
|
|
room["name"].localize(schedule.event.locale)
|
2022-11-08 18:43:17 +00:00
|
|
|
for day in schedule.data
|
|
|
|
for room in day["rooms"]
|
|
|
|
}
|
|
|
|
),
|
|
|
|
"talks": [
|
|
|
|
{
|
|
|
|
"id": talk.submission.id,
|
2023-08-23 06:11:19 +00:00
|
|
|
"start": talk.start.astimezone(
|
|
|
|
schedule.event.tz
|
|
|
|
).isoformat(),
|
2023-09-29 10:09:41 +00:00
|
|
|
"start_ts": int(talk.start.timestamp()),
|
2022-11-08 18:43:17 +00:00
|
|
|
"end": (talk.start + dt.timedelta(minutes=talk.duration))
|
2023-06-03 20:07:13 +00:00
|
|
|
.astimezone(schedule.event.tz)
|
2022-11-08 18:43:17 +00:00
|
|
|
.isoformat(),
|
2023-09-29 10:09:41 +00:00
|
|
|
"end_ts": int(
|
|
|
|
(
|
|
|
|
talk.start + dt.timedelta(minutes=talk.duration)
|
|
|
|
).timestamp()
|
|
|
|
),
|
2022-11-08 18:43:17 +00:00
|
|
|
"slug": talk.frab_slug,
|
|
|
|
"title": talk.submission.title,
|
2023-02-28 07:30:58 +00:00
|
|
|
"persons": [
|
|
|
|
person.get_display_name()
|
|
|
|
for person in talk.submission.speakers.all()
|
|
|
|
],
|
2022-11-08 18:43:17 +00:00
|
|
|
"track": {
|
|
|
|
"color": talk.submission.track.color,
|
|
|
|
"name": str(talk.submission.track.name),
|
2021-11-21 07:06:35 +00:00
|
|
|
}
|
2022-11-08 18:43:17 +00:00
|
|
|
if talk.submission.track
|
|
|
|
else None,
|
2022-11-22 18:19:11 +00:00
|
|
|
"room": room["name"].localize(schedule.event.locale),
|
2022-11-15 12:43:17 +00:00
|
|
|
"infoline": infoline.format(**placeholders(schedule, talk)),
|
2023-03-01 10:29:56 +00:00
|
|
|
"image_url": talk.submission.image_url,
|
2023-09-29 10:09:41 +00:00
|
|
|
"locale": talk.submission.content_locale,
|
|
|
|
"do_not_record": talk.submission.do_not_record,
|
|
|
|
"abstract": talk.submission.abstract,
|
2023-02-28 09:14:26 +00:00
|
|
|
"urls": {
|
|
|
|
"feedback": "{}{}".format(
|
|
|
|
schedule.event.custom_domain or settings.SITE_URL,
|
|
|
|
talk.submission.urls.feedback,
|
|
|
|
),
|
|
|
|
"feedback_qr": reverse(
|
|
|
|
"plugins:pretalx_broadcast_tools:feedback_qr_id",
|
|
|
|
kwargs={
|
2023-02-28 12:14:46 +00:00
|
|
|
"event": schedule.event.slug,
|
2023-02-28 18:10:18 +00:00
|
|
|
"talk": talk.submission.id,
|
|
|
|
},
|
|
|
|
),
|
|
|
|
"public": "{}{}".format(
|
|
|
|
schedule.event.custom_domain or settings.SITE_URL,
|
|
|
|
talk.submission.urls.public,
|
|
|
|
),
|
|
|
|
"public_qr": reverse(
|
|
|
|
"plugins:pretalx_broadcast_tools:public_qr_id",
|
|
|
|
kwargs={
|
|
|
|
"event": schedule.event.slug,
|
2023-02-28 09:14:26 +00:00
|
|
|
"talk": talk.submission.id,
|
|
|
|
},
|
|
|
|
),
|
|
|
|
},
|
2021-11-21 07:06:35 +00:00
|
|
|
}
|
2022-11-08 18:43:17 +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}}}}}",
|
|
|
|
],
|
|
|
|
}
|
|
|
|
)
|
2022-11-08 18:43:17 +00:00
|
|
|
except Exception as e:
|
2022-11-08 19:04:28 +00:00
|
|
|
return JsonResponse(
|
|
|
|
{
|
|
|
|
"error": [
|
|
|
|
repr(e),
|
|
|
|
],
|
|
|
|
}
|
|
|
|
)
|