diff --git a/pretalx_broadcast_tools/forms.py b/pretalx_broadcast_tools/forms.py index 23615db..df65d81 100644 --- a/pretalx_broadcast_tools/forms.py +++ b/pretalx_broadcast_tools/forms.py @@ -41,6 +41,14 @@ class BroadcastToolsSettingsForm(I18nFormMixin, HierarkeyForm): label=_("lower content"), required=True, ) + broadcast_tools_room_info_show_next_talk = BooleanField( + help_text=_( + "If no talk is running in the room, show the time and title " + "of the next talk in the room." + ), + label=_("Show next talk"), + required=False, + ) broadcast_tools_pdf_show_internal_notes = BooleanField( help_text=_( diff --git a/pretalx_broadcast_tools/static/pretalx_broadcast_tools/generic.js b/pretalx_broadcast_tools/static/pretalx_broadcast_tools/generic.js index 8323a73..856bd6c 100644 --- a/pretalx_broadcast_tools/static/pretalx_broadcast_tools/generic.js +++ b/pretalx_broadcast_tools/static/pretalx_broadcast_tools/generic.js @@ -8,8 +8,6 @@ function get_current_talk(max_offset) { return null; } - current_talk = null; - for (let offset = 0; offset <= max_offset; offset++) { time_start = new Date(Date.now() + offset*60000).getTime(); time_end = new Date(Date.now() - offset*60000).getTime(); @@ -26,17 +24,39 @@ function get_current_talk(max_offset) { talk_end = new Date(talk['end']).getTime(); if (talk_start < time_start && talk_end > time_end) { - current_talk = talk; - break; + return talk; } } - - if (current_talk) { - break; - } } - return current_talk; + return null; +} + +function get_next_talk() { + room_name = get_room_name(); + + if (!room_name) { + return null; + } + + time_start = new Date(Date.now()).getTime(); + + for (talk_i in schedule['talks']) { + talk = schedule['talks'][talk_i] + + if (schedule['rooms'].length > 1 && talk['room'] != room_name) { + // not in this room + continue; + } + + talk_start = new Date(talk['start']).getTime(); + + if (talk_start > time_start) { + return talk; + } + } + + return null; } function get_room_name() { diff --git a/pretalx_broadcast_tools/static/pretalx_broadcast_tools/room_info.js b/pretalx_broadcast_tools/static/pretalx_broadcast_tools/room_info.js index ab4ab84..8d873f2 100644 --- a/pretalx_broadcast_tools/static/pretalx_broadcast_tools/room_info.js +++ b/pretalx_broadcast_tools/static/pretalx_broadcast_tools/room_info.js @@ -41,6 +41,8 @@ function update_room_info() { } current_talk = get_current_talk(15); + next_talk = get_next_talk(); + if (current_talk) { if (event_info['room-info']['lower_info'] == 'feedback_qr') { qr_info = 'Feedback QR Code

Leave Feedback by scanning the code or visiting ' + current_talk['urls']['feedback'] + '

'; @@ -59,8 +61,14 @@ function update_room_info() { } else { $('#broadcast_tools_room_info_roomname').text(event_info['name']); $('#broadcast_tools_room_info_title').text(room_name); - $('#broadcast_tools_room_info_speaker').text(''); $('#broadcast_tools_room_info_qr').text(''); + + if (next_talk && event_info['room-info']['show_next_talk']) { + next_time = new Date(next_talk['start']); + $('#broadcast_tools_room_info_speaker').text(next_time.getHours() + ':' + next_time.getMinutes() + ' ' + next_talk['title']); + } else { + $('#broadcast_tools_room_info_speaker').text(''); + } } if (current_talk && current_talk['track']) { diff --git a/pretalx_broadcast_tools/templates/pretalx_broadcast_tools/orga.html b/pretalx_broadcast_tools/templates/pretalx_broadcast_tools/orga.html index 64f3060..93c5a32 100644 --- a/pretalx_broadcast_tools/templates/pretalx_broadcast_tools/orga.html +++ b/pretalx_broadcast_tools/templates/pretalx_broadcast_tools/orga.html @@ -64,6 +64,7 @@ {% translate "Room info" %} {% bootstrap_field form.broadcast_tools_room_info_lower_content layout='event' %} + {% bootstrap_field form.broadcast_tools_room_info_show_next_talk layout='event' %}
diff --git a/pretalx_broadcast_tools/views.py b/pretalx_broadcast_tools/views.py index 9f6dfb2..15b8fa3 100644 --- a/pretalx_broadcast_tools/views.py +++ b/pretalx_broadcast_tools/views.py @@ -77,6 +77,9 @@ class BroadcastToolsEventInfoView(View): "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, },