Merge branch '2.5.x' of dev.sourcefabric.org:airtime into 2.5.x
This commit is contained in:
commit
9ea686880e
|
@ -179,7 +179,7 @@ class Application_Form_LiveStreamingPreferences extends Zend_Form_SubForm
|
|||
socket_bind($sock, 0, $dj_harbor_input_port);
|
||||
} catch (Exception $e) {
|
||||
$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;
|
||||
}
|
||||
socket_close($sock);
|
||||
|
|
|
@ -1083,6 +1083,14 @@ SQL;
|
|||
$event["soundcloud_id"] = is_null($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
|
||||
if ($show["color"] != "") {
|
||||
$event["textColor"] = "#".$show["color"];
|
||||
|
|
|
@ -79,22 +79,27 @@ class Application_Service_CalendarService
|
|||
"url" => $baseUrl."schedule/show-content-dialog");
|
||||
}
|
||||
} else {
|
||||
//Show content can be modified from the calendar if:
|
||||
// the show has not started,
|
||||
// Show content can be modified from the calendar if:
|
||||
// the user is admin or hosting the show,
|
||||
// the show is not recorded
|
||||
|
||||
if ($now < $end && ($isAdminOrPM || $isHostOfShow) &&
|
||||
!$this->ccShowInstance->isRecorded() ) {
|
||||
|
||||
$menu["schedule"] = array(
|
||||
"name"=> _("Add / Remove Content"),
|
||||
"icon" => "add-remove-content",
|
||||
"url" => $baseUrl."showbuilder/builder-dialog/");
|
||||
|
||||
}
|
||||
|
||||
if ($now < $start && ($isAdminOrPM || $isHostOfShow) &&
|
||||
!$this->ccShowInstance->isRecorded() ) {
|
||||
!$this->ccShowInstance->isRecorded() ) {
|
||||
|
||||
$menu["schedule"] = array(
|
||||
"name"=> _("Add / Remove Content"),
|
||||
"icon" => "add-remove-content",
|
||||
"url" => $baseUrl."showbuilder/builder-dialog/");
|
||||
|
||||
$menu["clear"] = array(
|
||||
"name"=> _("Remove All Content"),
|
||||
"icon" => "remove-all-content",
|
||||
"url" => $baseUrl."schedule/clear-show");
|
||||
$menu["clear"] = array(
|
||||
"name"=> _("Remove All Content"),
|
||||
"icon" => "remove-all-content",
|
||||
"url" => $baseUrl."schedule/clear-show");
|
||||
}
|
||||
|
||||
//"Show Content" should be a menu item at all times except when
|
||||
|
|
|
@ -575,26 +575,38 @@ class Application_Service_HistoryService
|
|||
|
||||
$instanceEnd = $showInstance->getDbEnds(null);
|
||||
$itemEnd = $item->getDbEnds(null);
|
||||
$recordStart = $item->getDbStarts(null);
|
||||
$recordEnd = ($instanceEnd < $itemEnd) ? $instanceEnd : $itemEnd;
|
||||
|
||||
$history = new CcPlayoutHistory();
|
||||
$history->setDbFileId($fileId);
|
||||
$history->setDbStarts($item->getDbStarts(null));
|
||||
$history->setDbEnds($recordEnd);
|
||||
$history->setDbInstanceId($item->getDbInstanceId());
|
||||
//first check if this is a duplicate
|
||||
// (caused by restarting liquidsoap)
|
||||
|
||||
foreach ($metadata as $key => $val) {
|
||||
$meta = new CcPlayoutHistoryMetaData();
|
||||
$meta->setDbKey($key);
|
||||
$meta->setDbValue($val);
|
||||
$prevRecord = CcPlayoutHistoryQuery::create()
|
||||
->filterByDbStarts($recordStart)
|
||||
->filterByDbEnds($recordEnd)
|
||||
->filterByDbFileId($fileId)
|
||||
->findOne($this->con);
|
||||
|
||||
$history->addCcPlayoutHistoryMetaData($meta);
|
||||
if (empty($prevRecord)) {
|
||||
|
||||
$history = new CcPlayoutHistory();
|
||||
$history->setDbFileId($fileId);
|
||||
$history->setDbStarts($recordStart);
|
||||
$history->setDbEnds($recordEnd);
|
||||
$history->setDbInstanceId($item->getDbInstanceId());
|
||||
|
||||
foreach ($metadata as $key => $val) {
|
||||
$meta = new CcPlayoutHistoryMetaData();
|
||||
$meta->setDbKey($key);
|
||||
$meta->setDbValue($val);
|
||||
|
||||
$history->addCcPlayoutHistoryMetaData($meta);
|
||||
}
|
||||
|
||||
$history->save($this->con);
|
||||
$this->con->commit();
|
||||
}
|
||||
|
||||
$history->save($this->con);
|
||||
}
|
||||
|
||||
$this->con->commit();
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$this->con->rollback();
|
||||
|
|
|
@ -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
|
||||
function startDpSelect(dateText, inst) {
|
||||
var time, date;
|
||||
|
@ -73,16 +151,14 @@ function findHosts(request, callback) {
|
|||
}
|
||||
|
||||
function beginEditShow(data){
|
||||
if(data.show_error == true){
|
||||
|
||||
if (data.show_error == true){
|
||||
alertShowErrorAndReload();
|
||||
return false;
|
||||
}
|
||||
$("#add-show-form")
|
||||
.empty()
|
||||
.append(data.newForm);
|
||||
|
||||
redrawAddShowForm($("#add-show-form"), data.newForm);
|
||||
removeAddShowButton();
|
||||
setAddShowEvents();
|
||||
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(){
|
||||
$(this).next().toggle();
|
||||
|
@ -499,108 +575,75 @@ function setAddShowEvents() {
|
|||
}
|
||||
});
|
||||
|
||||
form.find("#add-show-close").click(closeAddShowForm);
|
||||
|
||||
form.find("#add-show-close")
|
||||
.click(function(event){
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
form.find(".add-show-submit").click(function(event) {
|
||||
event.preventDefault();
|
||||
|
||||
$("#add-show-form").hide();
|
||||
windowResize();
|
||||
var addShowButton = $(this);
|
||||
|
||||
$.get(baseUrl+"Schedule/get-form", {format:"json"}, function(json){
|
||||
$("#add-show-form")
|
||||
.empty()
|
||||
.append(json.form);
|
||||
$('#schedule-add-show').block({
|
||||
message: null,
|
||||
applyPlatformOpacityRules: false
|
||||
});
|
||||
|
||||
setAddShowEvents();
|
||||
});
|
||||
makeAddShowButton();
|
||||
});
|
||||
//when editing a show, the record option is disabled
|
||||
//we have to enable it to get the correct value when
|
||||
//we call serializeArray()
|
||||
if (form.find("#add_show_record").attr("disabled", true)) {
|
||||
form.find("#add_show_record").attr("disabled", false);
|
||||
}
|
||||
|
||||
form.find(".add-show-submit")
|
||||
.click(function(event){
|
||||
var addShowButton = $(this);
|
||||
/*
|
||||
if (!addShowButton.hasClass("disabled")){
|
||||
addShowButton.addClass("disabled");
|
||||
var data = $("form").serializeArray();
|
||||
|
||||
var hosts = $('#add_show_hosts-element input').map(function() {
|
||||
if($(this).attr("checked")) {
|
||||
return $(this).val();
|
||||
}
|
||||
}).get();
|
||||
|
||||
var days = $('#add_show_day_check-element input').map(function() {
|
||||
if($(this).attr("checked")) {
|
||||
return $(this).val();
|
||||
}
|
||||
}).get();
|
||||
|
||||
var start_date = $("#add_show_start_date").val();
|
||||
var end_date = $("#add_show_end_date").val();
|
||||
var action = baseUrl+"Schedule/"+String(addShowButton.attr("data-action"));
|
||||
|
||||
$.post(action, {format: "json", data: data, hosts: hosts, days: days}, function(json){
|
||||
|
||||
$('#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_start_date").val(start_date);
|
||||
showErrorSections();
|
||||
}
|
||||
else if (json.edit) {
|
||||
|
||||
$("#schedule_calendar").removeAttr("style")
|
||||
.fullCalendar('render');
|
||||
|
||||
$addShowForm.hide();
|
||||
$.get(baseUrl+"Schedule/get-form", {format:"json"}, function(json){
|
||||
redrawAddShowForm($addShowForm, json.form);
|
||||
});
|
||||
makeAddShowButton();
|
||||
}
|
||||
else {
|
||||
return;
|
||||
|
||||
redrawAddShowForm($addShowForm, json.newForm);
|
||||
scheduleRefetchEvents(json);
|
||||
}
|
||||
*/
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
//when editing a show, the record option is disabled
|
||||
//we have to enable it to get the correct value when
|
||||
//we call serializeArray()
|
||||
if (form.find("#add_show_record").attr("disabled", true)) {
|
||||
form.find("#add_show_record").attr("disabled", false);
|
||||
}
|
||||
|
||||
var data = $("form").serializeArray();
|
||||
|
||||
var hosts = $('#add_show_hosts-element input').map(function() {
|
||||
if($(this).attr("checked")) {
|
||||
return $(this).val();
|
||||
}
|
||||
}).get();
|
||||
|
||||
var days = $('#add_show_day_check-element input').map(function() {
|
||||
if($(this).attr("checked")) {
|
||||
return $(this).val();
|
||||
}
|
||||
}).get();
|
||||
|
||||
var start_date = $("#add_show_start_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"));
|
||||
|
||||
$.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();
|
||||
|
||||
$("#add_show_end_date").val(end_date);
|
||||
$("#add_show_start_date").val(start_date);
|
||||
showErrorSections();
|
||||
}else if(json.edit){
|
||||
$("#schedule_calendar").removeAttr("style")
|
||||
.fullCalendar('render');
|
||||
|
||||
$("#add-show-form").hide();
|
||||
$.get(baseUrl+"Schedule/get-form", {format:"json"}, function(json){
|
||||
$("#add-show-form")
|
||||
.empty()
|
||||
.append(json.form);
|
||||
|
||||
setAddShowEvents();
|
||||
});
|
||||
makeAddShowButton();
|
||||
}
|
||||
else {
|
||||
$("#add-show-form")
|
||||
.empty()
|
||||
.append(json.newForm);
|
||||
|
||||
|
||||
setAddShowEvents();
|
||||
scheduleRefetchEvents(json);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
var regDate = new RegExp(/^[0-9]{4}-[0-1][0-9]-[0-3][0-9]$/);
|
||||
var regTime = new RegExp(/^[0-2][0-9]:[0-5][0-9]$/);
|
||||
|
@ -740,7 +783,7 @@ function showErrorSections() {
|
|||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
setAddShowEvents();
|
||||
setAddShowEvents($("#add-show-form"));
|
||||
});
|
||||
|
||||
//Alert the error and reload the page
|
||||
|
|
|
@ -19,49 +19,6 @@ function scheduleRefetchEvents(json) {
|
|||
$("#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){
|
||||
var sy, sm, sd, h, m, s, timestamp;
|
||||
sy = date.getFullYear();
|
||||
|
@ -331,6 +288,21 @@ function eventRender(event, element, view) {
|
|||
$(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 ) {
|
||||
|
|
|
@ -13,8 +13,13 @@ var AIRTIME = (function(AIRTIME){
|
|||
var serverTimezoneOffset = 0;
|
||||
|
||||
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) {
|
||||
|
|
|
@ -482,4 +482,4 @@
|
|||
ColorPickerShow: ColorPicker.showPicker,
|
||||
ColorPickerSetColor: ColorPicker.setColor
|
||||
});
|
||||
})(jQuery)
|
||||
})(jQuery);
|
||||
|
|
|
@ -140,14 +140,14 @@ class PypoLiquidsoap():
|
|||
|
||||
#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
|
||||
#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:
|
||||
if i["row_id"] in row_id_map:
|
||||
mi = row_id_map[i["row_id"]]
|
||||
correct = mi['start'] == i['start'] and \
|
||||
mi['end'] == i['end'] and \
|
||||
mi['row_id'] == i['row_id'] and \
|
||||
mi['replay_gain'] == i['replay_gain']
|
||||
mi['row_id'] == i['row_id']
|
||||
|
||||
if not correct:
|
||||
#need to re-add
|
||||
|
|
Loading…
Reference in New Issue