# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
+import json
from django.shortcuts import render
from collections import defaultdict
from organization.media.models import *
from dal import autocomplete
from django.core.exceptions import FieldDoesNotExist
from datetime import datetime
+from django.db.models import Q
# temporarily excluse not ready models
EXCLUDED_MODELS = ("organizationplaylist", "personplaylist")
def get_context_data(self, **kwargs):
context = super(LiveStreamingDetailView, self).get_context_data(**kwargs)
- print("LIVE_STREAMING_TYPE_CHOICES", LIVE_STREAMING_TYPE_CHOICES)
+
+ # check type choices
type_choices = []
for st in LIVE_STREAMING_TYPE_CHOICES:
type_choices.append(st[0])
else :
context['type'] = self.kwargs['type']
- context['slug'] = self.object.slug
- context['next_event'] = Event.objects.filter(location=self.object.event_location).filter(start__gt=datetime.now()).first()
+ # slug
+ context['slug'] = self.object.slug
+
+ # event data
+ all_events = Event.objects.filter(location=self.object.event_location)
+ curr_event = Event.objects.filter(location=self.object.event_location).filter(end__gte=datetime.now()).order_by('start').first()
+
+ events_data = {}
+ counter = 0
+ curr_event_index = len(all_events)
+ for event in all_events:
+ events_data[counter] = {}
+ events_data[counter]['title'] = event.title
+ events_data[counter]['begin'] = event.start.isoformat()
+ events_data[counter]['end'] = event.end.isoformat()
+ if curr_event:
+ if curr_event.id == event.id :
+ curr_event_index = counter
+ counter += 1
+ context['curr_event_index'] = curr_event_index
+ context['json_event'] = json.dumps(events_data)
return context
$('#countdown').html('<br />');
}
-function CountDownTimer(dt_begin, dt_end, id, video_id/*, video_url*/)
+function CountDownTimer(json_event, curr_event_index, id, video_id/*, video_url*/)
{
- var begin = new Date(dt_begin);
- var end = new Date(dt_end);
+ //console.log("json_event.length", Object.keys(json_event).length);
+ //console.log("curr_event_index", curr_event_index);
+ if (Object.keys(json_event).length <= curr_event_index) {
+ return ;
+ }
+
+ var curr_event = json_event[curr_event_index];
+ var begin = new Date(curr_event.begin);
+ var end = new Date(curr_event.end);
var _second = 1000;
var _minute = _second * 60;
var _day = _hour * 24;
var timer;
var distance_out = 1;
- var distance_in = 0;
+ var distance_in = 1;
function showRemaining() {
var now = new Date();
var distance_out = begin - now;
- // console.log("distance_out", distance_out)
+ //console.log("distance_out", distance_out)
if (distance_out < 0) {
//clearInterval(timer);
//switchVideo(video_id, video_url);
$('.countdown-overlay').hide()
distance_in = 1;
- nextEvent()
- return;
+ hideRemaining()
+ //return;
}
- $('#countdown-title').html('Retransmission dans :');
+ $('#countdown-title').html('Prochain évènement :<br><br/><strong>'+ curr_event.title +'</strong><br/><br/> Retransmission dans :');
var days = Math.floor(distance_out / _day);
var hours = Math.floor((distance_out % _day) / _hour);
}
- function nextEvent() {
+ function hideRemaining() {
var now = new Date();
var distance_in = end - now;
//console.log("distance_in", distance_in)
if (distance_in < 0) {
+ nextEvent()
+ distance_in = end - now;
$('.countdown-overlay').show()
+ }
+ }
+
+ function nextEvent() {
+ curr_event_index++;
+ if (shouldStreamingStop()) {
+ curr_event = json_event[curr_event_index]
+ begin = new Date(curr_event.begin);
+ end = new Date(curr_event.end);
+ }
+ }
+ function shouldStreamingStop() {
+ var bool = true;
+ if (json_event.length - 1 < curr_event_index) {
+ clearInterval(timer);
+ bool = false;
}
+ return bool;
}
+
// calculer le diff avec le prochain évènement
// réactiver le countdown
//console.log("distance_in", distance_in)
if (distance_in > 0) {
- timer = setInterval(nextEvent, 1000);
+ timer = setInterval(hideRemaining, 1000);
}
}
<script src="{% static "src/js/modules/live-streaming-counter.js" %}"></script>
<script type="text/javascript">
- var d_begin = '{{ next_event.start|format_iso }}';
- var d_end = '{{ next_event.end|format_iso }}';
- CountDownTimer(d_begin, d_end, 'countdown', 'live-streaming');
+ var json_event = {{ json_event|safe }}
+ CountDownTimer(json_event, {{ curr_event_index }}, 'countdown', 'live-streaming');
</script>
{% endblock %}