]> git.0d.be Git - django-panik-emissions.git/commitdiff
store effective episode start/end from regie page to database
authorFrédéric Péters <fpeters@0d.be>
Sat, 14 May 2016 11:12:45 +0000 (13:12 +0200)
committerFrédéric Péters <fpeters@0d.be>
Sat, 14 May 2016 11:12:45 +0000 (13:12 +0200)
emissions/migrations/0008_auto_20160514_1215.py [new file with mode: 0644]
emissions/models.py
emissions/templates/emissions/episode_regie.html
emissions/urls.py
emissions/views.py

diff --git a/emissions/migrations/0008_auto_20160514_1215.py b/emissions/migrations/0008_auto_20160514_1215.py
new file mode 100644 (file)
index 0000000..52f1712
--- /dev/null
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('emissions', '0007_playlistelement'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='episode',
+            name='effective_end',
+            field=models.DateTimeField(null=True),
+            preserve_default=True,
+        ),
+        migrations.AddField(
+            model_name='episode',
+            name='effective_start',
+            field=models.DateTimeField(null=True),
+            preserve_default=True,
+        ),
+    ]
index 9808b90b6fbcedd545ea75d8b494a3c8e67debb3..0ed2b1991e3d32aac9458b9e8aec9ba515aca900 100644 (file)
@@ -286,6 +286,9 @@ class Episode(models.Model):
     image = models.ImageField(_('Image'),
             upload_to=get_episode_image_path, max_length=250, null=True, blank=True)
 
+    effective_start = models.DateTimeField(null=True)
+    effective_end = models.DateTimeField(null=True)
+
     # denormalized from Focus
     got_focus = models.DateTimeField(default=None, null=True, blank=True)
     has_focus = models.BooleanField(default=False)
index dff0d52c8fddf07d2732083939670df6a466b417..3f8540275df2c812d47ac34832f09379a0618510 100644 (file)
@@ -8,13 +8,18 @@
 {% block content %}
 
 <p>
-<a class="big-friendly-button start-episode" href="#">Démarrer l'émission</a>
-<a class="big-friendly-button end-episode" href="#">Terminer l'émission</a>
+<a class="big-friendly-button ready" href="#">Prêt !</a>
+<a style="display: none;" class="big-friendly-button start-episode" href="#">Démarrer l'émission</a>
+<a style="display: none;" class="big-friendly-button end-episode" href="#">Terminer l'émission</a>
 <a style="display: none" class="big-friendly-button reset-episode" href="#">Réinitialiser</a>
 </p>
 
-<input type="hidden" id="start_time">
-<input type="hidden" id="end_time">
+<div style="display: none;">
+<input type="text" id="ready" value="{{ready}}"/>
+<input data-url="{% url 'episode-regie-marks' emission_slug=episode.emission.slug slug=episode.slug %}"
+       type="text" id="start_time" value="{{start_time}}">
+<input type="text" id="end_time" value="{{end_time}}">
+</div>
 
 <table id="playlist"
   data-update-order-url="{% url 'episode-regie-update-order' emission_slug=episode.emission.slug slug=episode.slug %}"
 {% block page-end %}
 <script>
 $(function() {
-  $('#start_time').val('');
-  $('#end_time').val('');
+  function update_start_end() {
+    $.ajax({
+       url: $('#start_time').data('url'),
+       data: {'start': $('#start_time').val(),
+              'end': $('#end_time').val()}
+    });
+  }
+
+  $('.ready').on('click', function() {
+    $('.ready').hide();
+    $('.start-episode').show();
+    $('.end-episode').show();
+    $('#ready').val('ready');
+    return false;
+  });
+
   $('#add-playlist-elements-form input[type=file]').on('change', function() {
     $('body').addClass('submitting');
     $(this).parent().submit();
@@ -66,7 +85,7 @@ $(function() {
      var audio = $(this).parent().find('audio')[0];
      if (audio.paused === true) {
        audio.play();
-       if ($('#start_time').val() == "") {
+       if ($('#ready').val() === 'ready' && $('#start_time').val() === "") {
          $('.start-episode').trigger('click');
        }
      } else {
@@ -79,29 +98,49 @@ $(function() {
   });
   $('.start-episode').click(function() {
     $('#start_time').val(Date.now());
+    update_start_end();
     $(this).toggleClass('button-done');
     $('.reset-episode').show();
     return false;
   });
   $('.end-episode').click(function() {
     $('#end_time').val(Date.now());
+    update_start_end();
     $(this).toggleClass('button-done');
     return false;
   });
   $('.reset-episode').click(function() {
+    $('.ready').show();
+    $('.start-episode').hide();
+    $('.end-episode').hide();
+    $('#ready').val('');
     $('#start_time').val('');
     $('#end_time').val('');
+    update_start_end();
     $('a').removeClass('button-done');
     $(this).hide();
     return false;
   });
   $('audio').each(function(i, elem) {
     elem.addEventListener('play', function() {
-       if ($('#start_time').val() == "") {
+       if ($('#ready').val() === 'ready' && $('#start_time').val() === "") {
          $('.start-episode').trigger('click');
        }
     });
   });
+
+
+  if ($('#ready').val() === 'ready') {
+    $('.ready').trigger('click');
+  }
+  if ($('#start_time').val() !== '') {
+    $('.start-episode').toggleClass('button-done');
+    $('.reset-episode').show();
+  }
+  if ($('#end_time').val() !== '') {
+    $('.end-episode').toggleClass('button-done');
+  }
+
 });
 </script>
 {% endblock %}
index 0940b28ac59d9731eae903d92a2b24ab9442efcc..25a699530d0f224636793984978ad942d10e0157 100644 (file)
@@ -43,7 +43,10 @@ urlpatterns = patterns('',
     url(r'^(?P<emission_slug>[\w,-]+)/(?P<slug>[\w,-]+)/sounds/(?P<pk>\d+)/$',
             SoundFileUpdateView.as_view(), name='soundfile-update'),
 
-    url(r'^(?P<emission_slug>[\w,-]+)/(?P<slug>[\w,-]+)/regie/$', EpisodeRegieView.as_view(), name='episode-regie'),
+    url(r'^(?P<emission_slug>[\w,-]+)/(?P<slug>[\w,-]+)/regie/$',
+        EpisodeRegieView.as_view(), name='episode-regie'),
+    url(r'^(?P<emission_slug>[\w,-]+)/(?P<slug>[\w,-]+)/regie/marks/$',
+        EpisodeRegieMarks.as_view(), name='episode-regie-marks'),
     url(r'^(?P<emission_slug>[\w,-]+)/(?P<slug>[\w,-]+)/regie/update-order$',
         EpisodeRegieUpdateOrderView.as_view(), name='episode-regie-update-order'),
 
index 1bc87590dc1957fc4032bb9562a1c1365d762f20..03dce4f5a9dc6e13a6064f9f8228885e77e1c7cd 100644 (file)
@@ -1,6 +1,7 @@
 import datetime
 import json
 import os
+import time
 
 from django.core.exceptions import PermissionDenied
 from django.core.files.storage import DefaultStorage
@@ -42,7 +43,9 @@ __all__ = ['EmissionListView', 'EmissionDetailView', 'EmissionCreateView',
            'EmissionAddAbsenceView', 'AbsenceDeleteView',
            'EmissionOpenChatView', 'EmissionCloseChatView',
            'EpisodeRegieView',
-           'EpisodeRegieUpdateOrderView']
+           'EpisodeRegieUpdateOrderView',
+           'EpisodeRegieMarks',
+           ]
 
 
 SUCCESS_MESSAGE = ugettext_lazy('Your changes will appear online in a few minutes.')
@@ -588,6 +591,15 @@ class EpisodeRegieView(DetailView):
     def get_context_data(self, **kwargs):
         context = super(EpisodeRegieView, self).get_context_data(**kwargs)
         context['playlist'] = PlaylistElement.objects.filter(episode=self.object.id)
+        context['start_time'] = ''
+        context['end_time'] = ''
+        if self.object.effective_start:
+            context['ready'] = 'ready'
+            context['start_time'] = int(time.mktime(self.object.effective_start.timetuple())*1000
+                    + self.object.effective_start.microsecond/1000)
+        if self.object.effective_end:
+            context['end_time'] = int(time.mktime(self.object.effective_end.timetuple())*1000
+                    + self.object.effective_end.microsecond/1000)
         try:
             context['can_manage'] = self.request.user.can_manage(self.object)
         except AttributeError:
@@ -601,3 +613,20 @@ class EpisodeRegieUpdateOrderView(View):
             element.order = new_order.index(str(element.id)) + 1
             element.save()
         return HttpResponse('ok')
+
+
+class EpisodeRegieMarks(EpisodeRegieView):
+    def get(self, request, *args, **kwargs):
+        episode = self.get_object()
+        start = self.request.GET['start']
+        end = self.request.GET['end']
+        if start:
+            episode.effective_start = datetime.datetime.fromtimestamp(float(start)/1000)
+        else:
+            episode.effective_start = None
+        if end:
+            episode.effective_end = datetime.datetime.fromtimestamp(float(end)/1000)
+        else:
+            episode.effective_end = None
+        episode.save()
+        return HttpResponse('ok')