2012-03-16 12:28:42 +01:00
|
|
|
|
#!/usr/bin/env python
|
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
"""
|
|
|
|
|
openslides.projector.signals
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
2013-03-01 17:13:12 +01:00
|
|
|
|
Signals for the projector app.
|
2012-03-16 12:28:42 +01:00
|
|
|
|
|
2013-03-01 17:13:12 +01:00
|
|
|
|
:copyright: 2011–2013 by OpenSlides team, see AUTHORS.
|
2012-03-16 12:28:42 +01:00
|
|
|
|
:license: GNU GPL, see LICENSE for more details.
|
|
|
|
|
"""
|
2013-04-15 10:40:47 +02:00
|
|
|
|
from time import time
|
2012-03-16 12:28:42 +01:00
|
|
|
|
|
2013-03-01 17:13:12 +01:00
|
|
|
|
from django.dispatch import Signal, receiver
|
|
|
|
|
from django import forms
|
2013-04-15 10:40:47 +02:00
|
|
|
|
from django.template.loader import render_to_string
|
|
|
|
|
from django.core.context_processors import csrf
|
2013-03-01 17:13:12 +01:00
|
|
|
|
|
2013-04-15 10:40:47 +02:00
|
|
|
|
from openslides.config.api import config
|
2013-03-01 17:13:12 +01:00
|
|
|
|
from openslides.config.signals import config_signal
|
|
|
|
|
from openslides.config.api import ConfigVariable, ConfigPage
|
|
|
|
|
|
2013-04-15 10:40:47 +02:00
|
|
|
|
from .projector import Overlay
|
2013-04-22 22:09:09 +02:00
|
|
|
|
from .api import clear_projector_cache
|
2012-03-16 12:28:42 +01:00
|
|
|
|
|
2013-04-15 10:40:47 +02:00
|
|
|
|
|
|
|
|
|
projector_overlays = Signal(providing_args=['request'])
|
2013-03-01 17:13:12 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@receiver(config_signal, dispatch_uid='setup_projector_config_variables')
|
|
|
|
|
def setup_projector_config_variables(sender, **kwargs):
|
|
|
|
|
"""
|
|
|
|
|
Projector config variables for OpenSlides. They are not shown on a
|
|
|
|
|
config page.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
presentation = ConfigVariable(
|
|
|
|
|
name='presentation',
|
|
|
|
|
default_value='')
|
|
|
|
|
|
|
|
|
|
presentation_argument = ConfigVariable(
|
|
|
|
|
name='presentation_argument',
|
|
|
|
|
default_value=None)
|
|
|
|
|
|
|
|
|
|
projector_message = ConfigVariable(
|
|
|
|
|
name='projector_message',
|
|
|
|
|
default_value='')
|
|
|
|
|
|
|
|
|
|
countdown_time = ConfigVariable(
|
|
|
|
|
name='countdown_time',
|
|
|
|
|
default_value=60)
|
|
|
|
|
|
|
|
|
|
countdown_start_stamp = ConfigVariable(
|
|
|
|
|
name='countdown_start_stamp',
|
|
|
|
|
default_value=0)
|
|
|
|
|
|
|
|
|
|
countdown_pause_stamp = ConfigVariable(
|
|
|
|
|
name='countdown_pause_stamp',
|
|
|
|
|
default_value=0)
|
|
|
|
|
|
|
|
|
|
countdown_state = ConfigVariable(
|
|
|
|
|
name='countdown_state',
|
|
|
|
|
default_value='inactive')
|
|
|
|
|
|
|
|
|
|
bigger = ConfigVariable(
|
|
|
|
|
name='bigger',
|
|
|
|
|
default_value=100)
|
|
|
|
|
|
|
|
|
|
up = ConfigVariable(
|
|
|
|
|
name='up',
|
|
|
|
|
default_value=0)
|
|
|
|
|
|
2013-04-15 10:40:47 +02:00
|
|
|
|
projector_active_overlays = ConfigVariable(
|
|
|
|
|
name='projector_active_overlays',
|
|
|
|
|
default_value=[])
|
|
|
|
|
|
|
|
|
|
return ConfigPage(
|
|
|
|
|
title='No title here', url='bar', required_permission=None, variables=(
|
|
|
|
|
presentation, presentation_argument, projector_message,
|
|
|
|
|
countdown_time, countdown_start_stamp, countdown_pause_stamp,
|
|
|
|
|
countdown_state, bigger, up, projector_active_overlays))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@receiver(projector_overlays, dispatch_uid="projector_countdown")
|
|
|
|
|
def countdown(sender, **kwargs):
|
|
|
|
|
"""
|
2013-03-18 12:34:47 +01:00
|
|
|
|
Receiver for the countdown.
|
2013-04-15 10:40:47 +02:00
|
|
|
|
"""
|
|
|
|
|
name = 'projector_countdown'
|
|
|
|
|
request = kwargs.get('request', None)
|
|
|
|
|
|
|
|
|
|
def get_widget_html():
|
|
|
|
|
"""
|
|
|
|
|
Returns the the html-code to show in the overly-widget.
|
|
|
|
|
"""
|
|
|
|
|
context = {
|
|
|
|
|
'countdown_time': config['countdown_time'],
|
|
|
|
|
'countdown_state': config['countdown_state']}
|
|
|
|
|
context.update(csrf(request))
|
|
|
|
|
return render_to_string('projector/overlay_countdown_widget.html', context)
|
|
|
|
|
|
|
|
|
|
def get_projector_html():
|
|
|
|
|
"""
|
|
|
|
|
Returns an html-code to show on the projector.
|
|
|
|
|
"""
|
|
|
|
|
start = config['countdown_start_stamp']
|
|
|
|
|
duration = config['countdown_time']
|
|
|
|
|
pause = config['countdown_pause_stamp']
|
|
|
|
|
if config['countdown_state'] == 'active':
|
|
|
|
|
seconds = max(0, int(start + duration - time()))
|
|
|
|
|
elif config['countdown_state'] == 'paused':
|
|
|
|
|
seconds = max(0, int(start + duration - pause))
|
|
|
|
|
elif config['countdown_state'] == 'inactive':
|
|
|
|
|
seconds = max(0, int(duration))
|
|
|
|
|
else:
|
|
|
|
|
seconds = 0
|
|
|
|
|
if seconds == 0:
|
|
|
|
|
config['countdown_state'] = 'expired'
|
2013-04-22 22:09:09 +02:00
|
|
|
|
clear_projector_cache()
|
2013-04-15 10:40:47 +02:00
|
|
|
|
return render_to_string('projector/overlay_countdown_projector.html',
|
|
|
|
|
{'seconds': '%02d:%02d' % (seconds / 60, seconds % 60)})
|
|
|
|
|
|
|
|
|
|
return Overlay(name, get_widget_html, get_projector_html)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@receiver(projector_overlays, dispatch_uid="projector_message")
|
|
|
|
|
def projector_message(sender, **kwargs):
|
|
|
|
|
"""
|
|
|
|
|
Receiver to show the overlay_message on the projector or the form in the
|
|
|
|
|
overlay-widget on the dashboard.
|
|
|
|
|
"""
|
|
|
|
|
name = 'projector_message'
|
|
|
|
|
request = kwargs.get('request', None)
|
|
|
|
|
|
|
|
|
|
def get_widget_html():
|
|
|
|
|
"""
|
|
|
|
|
Returns the the html-code to show in the overly-widget.
|
|
|
|
|
"""
|
|
|
|
|
return render_to_string('projector/overlay_message_widget.html', csrf(request))
|
|
|
|
|
|
|
|
|
|
def get_projector_html():
|
|
|
|
|
"""
|
|
|
|
|
Returns an html-code to show on the projector.
|
|
|
|
|
"""
|
|
|
|
|
if config['projector_message']:
|
|
|
|
|
return render_to_string('projector/overlay_message_projector.html',
|
|
|
|
|
{'message': config['projector_message']})
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
return Overlay(name, get_widget_html, get_projector_html)
|