--- /dev/null
+# -*- 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,
+ ),
+ ]
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)
{% 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();
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 {
});
$('.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 %}
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'),
import datetime
import json
import os
+import time
from django.core.exceptions import PermissionDenied
from django.core.files.storage import DefaultStorage
'EmissionAddAbsenceView', 'AbsenceDeleteView',
'EmissionOpenChatView', 'EmissionCloseChatView',
'EpisodeRegieView',
- 'EpisodeRegieUpdateOrderView']
+ 'EpisodeRegieUpdateOrderView',
+ 'EpisodeRegieMarks',
+ ]
SUCCESS_MESSAGE = ugettext_lazy('Your changes will appear online in a few minutes.')
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:
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')