Merge branch '2.5.x' of dev.sourcefabric.org:airtime into 2.5.x

This commit is contained in:
Albert Santoni 2013-10-11 19:30:01 -04:00
commit 9ea686880e
9 changed files with 714 additions and 669 deletions

View File

@ -179,7 +179,7 @@ class Application_Form_LiveStreamingPreferences extends Zend_Form_SubForm
socket_bind($sock, 0, $dj_harbor_input_port); socket_bind($sock, 0, $dj_harbor_input_port);
} catch (Exception $e) { } catch (Exception $e) {
$element = $this->getElement("dj_harbor_input_port"); $element = $this->getElement("dj_harbor_input_port");
$element->addError(sprintf(_("Port %s is not available"). $dj_harbor_input_port)); $element->addError(sprintf(_("Port %s is not available"), $dj_harbor_input_port));
$isValid = false; $isValid = false;
} }
socket_close($sock); socket_close($sock);

View File

@ -1083,6 +1083,14 @@ SQL;
$event["soundcloud_id"] = is_null($show["soundcloud_id"]) $event["soundcloud_id"] = is_null($show["soundcloud_id"])
? -1 : $show["soundcloud_id"]; ? -1 : $show["soundcloud_id"];
//for putting the now playing icon on the show.
if ($now > $startsDT && $now < $endsDT) {
$event["nowPlaying"] = true;
}
else {
$event["nowPlaying"] = false;
}
//event colouring //event colouring
if ($show["color"] != "") { if ($show["color"] != "") {
$event["textColor"] = "#".$show["color"]; $event["textColor"] = "#".$show["color"];

View File

@ -80,10 +80,10 @@ class Application_Service_CalendarService
} }
} else { } else {
// Show content can be modified from the calendar if: // Show content can be modified from the calendar if:
// the show has not started,
// the user is admin or hosting the show, // the user is admin or hosting the show,
// the show is not recorded // the show is not recorded
if ($now < $start && ($isAdminOrPM || $isHostOfShow) &&
if ($now < $end && ($isAdminOrPM || $isHostOfShow) &&
!$this->ccShowInstance->isRecorded() ) { !$this->ccShowInstance->isRecorded() ) {
$menu["schedule"] = array( $menu["schedule"] = array(
@ -91,6 +91,11 @@ class Application_Service_CalendarService
"icon" => "add-remove-content", "icon" => "add-remove-content",
"url" => $baseUrl."showbuilder/builder-dialog/"); "url" => $baseUrl."showbuilder/builder-dialog/");
}
if ($now < $start && ($isAdminOrPM || $isHostOfShow) &&
!$this->ccShowInstance->isRecorded() ) {
$menu["clear"] = array( $menu["clear"] = array(
"name"=> _("Remove All Content"), "name"=> _("Remove All Content"),
"icon" => "remove-all-content", "icon" => "remove-all-content",

View File

@ -575,11 +575,23 @@ class Application_Service_HistoryService
$instanceEnd = $showInstance->getDbEnds(null); $instanceEnd = $showInstance->getDbEnds(null);
$itemEnd = $item->getDbEnds(null); $itemEnd = $item->getDbEnds(null);
$recordStart = $item->getDbStarts(null);
$recordEnd = ($instanceEnd < $itemEnd) ? $instanceEnd : $itemEnd; $recordEnd = ($instanceEnd < $itemEnd) ? $instanceEnd : $itemEnd;
//first check if this is a duplicate
// (caused by restarting liquidsoap)
$prevRecord = CcPlayoutHistoryQuery::create()
->filterByDbStarts($recordStart)
->filterByDbEnds($recordEnd)
->filterByDbFileId($fileId)
->findOne($this->con);
if (empty($prevRecord)) {
$history = new CcPlayoutHistory(); $history = new CcPlayoutHistory();
$history->setDbFileId($fileId); $history->setDbFileId($fileId);
$history->setDbStarts($item->getDbStarts(null)); $history->setDbStarts($recordStart);
$history->setDbEnds($recordEnd); $history->setDbEnds($recordEnd);
$history->setDbInstanceId($item->getDbInstanceId()); $history->setDbInstanceId($item->getDbInstanceId());
@ -592,10 +604,10 @@ class Application_Service_HistoryService
} }
$history->save($this->con); $history->save($this->con);
}
$this->con->commit(); $this->con->commit();
} }
}
}
catch (Exception $e) { catch (Exception $e) {
$this->con->rollback(); $this->con->rollback();
throw $e; throw $e;

View File

@ -4,6 +4,84 @@
* *
*/ */
function openAddShowForm() {
if($("#add-show-form").length == 1) {
if( ($("#add-show-form").css('display')=='none')) {
$("#add-show-form").show();
var windowWidth = $(window).width();
// margin on showform are 16 px on each side
var calendarWidth = 100-(($("#schedule-add-show").width() + (16 * 4))/windowWidth*100);
var widthPercent = parseInt(calendarWidth)+"%";
$("#schedule_calendar").css("width", widthPercent);
// 200 px for top dashboard and 50 for padding on main content
// this calculation was copied from schedule.js line 326
var mainHeight = document.documentElement.clientHeight - 200 - 50;
$('#schedule_calendar').fullCalendar('option', 'contentHeight', mainHeight);
}
$("#schedule-show-what").show(0, function(){
$add_show_name = $("#add_show_name");
$add_show_name.focus();
$add_show_name.select();
});
}
}
function makeAddShowButton(){
$('.fc-header-left')
.append('<span class="fc-header-space"></span>')
.append('<span class="fc-button"><a href="#" class="add-button"><span class="add-icon"></span>'+$.i18n._("Show")+'</a></span>')
.find('span.fc-button:last > a')
.click(function(){
openAddShowForm();
removeAddShowButton();
});
}
function removeAddShowButton(){
var aTag = $('.fc-header-left')
.find("span.fc-button:last > a");
var span = aTag.parent();
span.prev().remove();
span.remove();
}
//$el is DOM element #add-show-form
//form is the new form contents to append to $el
function redrawAddShowForm($el, form) {
//need to clean up the color picker.
$el.find("#schedule-show-style input").each(function(i, el){
var $input = $(this),
colId = $input.data("colorpickerId");
$("#"+colId).remove();
$input.removeData();
});
$el.empty().append(form);
setAddShowEvents($el);
}
function closeAddShowForm(event) {
event.stopPropagation();
event.preventDefault();
var $el = $("#add-show-form");
$el.hide();
windowResize();
$.get(baseUrl+"Schedule/get-form", {format:"json"}, function(json) {
redrawAddShowForm($el, json.form);
});
makeAddShowButton();
}
//dateText mm-dd-yy //dateText mm-dd-yy
function startDpSelect(dateText, inst) { function startDpSelect(dateText, inst) {
var time, date; var time, date;
@ -73,16 +151,14 @@ function findHosts(request, callback) {
} }
function beginEditShow(data){ function beginEditShow(data){
if (data.show_error == true){ if (data.show_error == true){
alertShowErrorAndReload(); alertShowErrorAndReload();
return false; return false;
} }
$("#add-show-form")
.empty()
.append(data.newForm);
redrawAddShowForm($("#add-show-form"), data.newForm);
removeAddShowButton(); removeAddShowButton();
setAddShowEvents();
openAddShowForm(); openAddShowForm();
} }
@ -130,9 +206,9 @@ function getContrastYIQ(hexcolor){
} }
function setAddShowEvents() { function setAddShowEvents(form) {
var form = $("#add-show-form"); //var form = $("#add-show-form");
form.find("h3").click(function(){ form.find("h3").click(function(){
$(this).next().toggle(); $(this).next().toggle();
@ -499,38 +575,17 @@ function setAddShowEvents() {
} }
}); });
form.find("#add-show-close").click(closeAddShowForm);
form.find("#add-show-close") form.find(".add-show-submit").click(function(event) {
.click(function(event){
event.stopPropagation();
event.preventDefault(); event.preventDefault();
$("#add-show-form").hide();
windowResize();
$.get(baseUrl+"Schedule/get-form", {format:"json"}, function(json){
$("#add-show-form")
.empty()
.append(json.form);
setAddShowEvents();
});
makeAddShowButton();
});
form.find(".add-show-submit")
.click(function(event){
var addShowButton = $(this); var addShowButton = $(this);
/*
if (!addShowButton.hasClass("disabled")){
addShowButton.addClass("disabled");
}
else {
return;
}
*/
event.preventDefault(); $('#schedule-add-show').block({
message: null,
applyPlatformOpacityRules: false
});
//when editing a show, the record option is disabled //when editing a show, the record option is disabled
//we have to enable it to get the correct value when //we have to enable it to get the correct value when
@ -555,48 +610,36 @@ function setAddShowEvents() {
var start_date = $("#add_show_start_date").val(); var start_date = $("#add_show_start_date").val();
var end_date = $("#add_show_end_date").val(); var end_date = $("#add_show_end_date").val();
$('#schedule-add-show').block({
message: null,
applyPlatformOpacityRules: false
});
var action = baseUrl+"Schedule/"+String(addShowButton.attr("data-action")); var action = baseUrl+"Schedule/"+String(addShowButton.attr("data-action"));
$.post(action, {format: "json", data: data, hosts: hosts, days: days}, function(json){ $.post(action, {format: "json", data: data, hosts: hosts, days: days}, function(json){
//addShowButton.removeClass("disabled");
$('#schedule-add-show').unblock();
if(json.form) {
$("#add-show-form")
.empty()
.append(json.form);
setAddShowEvents(); $('#schedule-add-show').unblock();
var $addShowForm = $("#add-show-form");
if (json.form) {
redrawAddShowForm($addShowForm, json.form);
$("#add_show_end_date").val(end_date); $("#add_show_end_date").val(end_date);
$("#add_show_start_date").val(start_date); $("#add_show_start_date").val(start_date);
showErrorSections(); showErrorSections();
}else if(json.edit){ }
else if (json.edit) {
$("#schedule_calendar").removeAttr("style") $("#schedule_calendar").removeAttr("style")
.fullCalendar('render'); .fullCalendar('render');
$("#add-show-form").hide(); $addShowForm.hide();
$.get(baseUrl+"Schedule/get-form", {format:"json"}, function(json){ $.get(baseUrl+"Schedule/get-form", {format:"json"}, function(json){
$("#add-show-form") redrawAddShowForm($addShowForm, json.form);
.empty()
.append(json.form);
setAddShowEvents();
}); });
makeAddShowButton(); makeAddShowButton();
} }
else { else {
$("#add-show-form")
.empty()
.append(json.newForm);
redrawAddShowForm($addShowForm, json.newForm);
setAddShowEvents();
scheduleRefetchEvents(json); scheduleRefetchEvents(json);
} }
}); });
@ -740,7 +783,7 @@ function showErrorSections() {
} }
$(document).ready(function() { $(document).ready(function() {
setAddShowEvents(); setAddShowEvents($("#add-show-form"));
}); });
//Alert the error and reload the page //Alert the error and reload the page

View File

@ -19,49 +19,6 @@ function scheduleRefetchEvents(json) {
$("#schedule_calendar").fullCalendar( 'refetchEvents' ); $("#schedule_calendar").fullCalendar( 'refetchEvents' );
} }
function openAddShowForm() {
if($("#add-show-form").length == 1) {
if( ($("#add-show-form").css('display')=='none')) {
$("#add-show-form").show();
var windowWidth = $(window).width();
// margin on showform are 16 px on each side
var calendarWidth = 100-(($("#schedule-add-show").width() + (16 * 4))/windowWidth*100);
var widthPercent = parseInt(calendarWidth)+"%";
$("#schedule_calendar").css("width", widthPercent);
// 200 px for top dashboard and 50 for padding on main content
// this calculation was copied from schedule.js line 326
var mainHeight = document.documentElement.clientHeight - 200 - 50;
$('#schedule_calendar').fullCalendar('option', 'contentHeight', mainHeight);
}
$("#schedule-show-what").show(0, function(){
$add_show_name = $("#add_show_name");
$add_show_name.focus();
$add_show_name.select();
});
}
}
function makeAddShowButton(){
$('.fc-header-left')
.append('<span class="fc-header-space"></span>')
.append('<span class="fc-button"><a href="#" class="add-button"><span class="add-icon"></span>'+$.i18n._("Show")+'</a></span>')
.find('span.fc-button:last > a')
.click(function(){
openAddShowForm();
removeAddShowButton();
});
}
function removeAddShowButton(){
var aTag = $('.fc-header-left')
.find("span.fc-button:last > a");
var span = aTag.parent();
span.prev().remove();
span.remove();
}
function makeTimeStamp(date){ function makeTimeStamp(date){
var sy, sm, sd, h, m, s, timestamp; var sy, sm, sd, h, m, s, timestamp;
sy = date.getFullYear(); sy = date.getFullYear();
@ -331,6 +288,21 @@ function eventRender(event, element, view) {
$(element).find(".fc-event-title").after('<span class="small-icon rebroadcast"></span>'); $(element).find(".fc-event-title").after('<span class="small-icon rebroadcast"></span>');
} }
} }
//now playing icon.
var span = '<span class="small-icon now-playing"></span>';
if (event.nowPlaying === true) {
if (view_name === 'agendaDay' || view_name === 'agendaWeek') {
$(element).find(".fc-event-time").before(span);
}
else if (view_name === 'month') {
$(element).find(".fc-event-title").after(span);
}
}
} }
function eventAfterRender( event, element, view ) { function eventAfterRender( event, element, view ) {

View File

@ -13,8 +13,13 @@ var AIRTIME = (function(AIRTIME){
var serverTimezoneOffset = 0; var serverTimezoneOffset = 0;
function closeDialogCalendar(event, ui) { function closeDialogCalendar(event, ui) {
//$("#schedule_calendar").fullCalendar( 'refetchEvents' );
$(this).remove(); $el = $(this);
$el.dialog('destroy');
$el.remove();
//need to refetch the events to update scheduled status.
$("#schedule_calendar").fullCalendar( 'refetchEvents' );
} }
function checkShowLength(json) { function checkShowLength(json) {

View File

@ -482,4 +482,4 @@
ColorPickerShow: ColorPicker.showPicker, ColorPickerShow: ColorPicker.showPicker,
ColorPickerSetColor: ColorPicker.setColor ColorPickerSetColor: ColorPicker.setColor
}); });
})(jQuery) })(jQuery);

View File

@ -140,14 +140,14 @@ class PypoLiquidsoap():
#Iterate over the new files, and compare them to currently scheduled #Iterate over the new files, and compare them to currently scheduled
#tracks. If already in liquidsoap queue still need to make sure they don't #tracks. If already in liquidsoap queue still need to make sure they don't
#have different attributes such replay_gain etc. #have different attributes
#if replay gain changes, it shouldn't change the amplification of the currently playing song
for i in scheduled_now_files: for i in scheduled_now_files:
if i["row_id"] in row_id_map: if i["row_id"] in row_id_map:
mi = row_id_map[i["row_id"]] mi = row_id_map[i["row_id"]]
correct = mi['start'] == i['start'] and \ correct = mi['start'] == i['start'] and \
mi['end'] == i['end'] and \ mi['end'] == i['end'] and \
mi['row_id'] == i['row_id'] and \ mi['row_id'] == i['row_id']
mi['replay_gain'] == i['replay_gain']
if not correct: if not correct:
#need to re-add #need to re-add