From 4242fecd3425ba6ee6a6a04e191773f75eff6db7 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 20 Nov 2012 18:03:13 -0500 Subject: [PATCH 1/6] CC-4615: Now Playing page: Fail to get soundcloud file id in Schedule - fixed --- airtime_mvc/public/js/airtime/library/library.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index b463610bc..144ce7e9c 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -975,7 +975,6 @@ function addProgressIcon(id) { } function checkLibrarySCUploadStatus(){ - var url = '/Library/get-upload-to-soundcloud-status', span, id; @@ -1028,15 +1027,22 @@ function addQtipToSCIcons(){ }); } else if($(this).hasClass("soundcloud")){ + var sc_id = $(this).parent().parent().data("aData").soundcloud_id; $(this).qtip({ content: { + //text: "The soundcloud id for this file is: "+sc_id text: "Retrieving data from the server...", ajax: { url: "/Library/get-upload-to-soundcloud-status", type: "post", data: ({format: "json", id : id, type: "file"}), success: function(json, status){ - this.set('content.text', "The soundcloud id for this file is: "+json.sc_id); + id = sc_id; + if (id == undefined) { + id = json.sc_id; + } + + this.set('content.text', "The soundcloud id for this file is: "+id); } } }, From 8483439551991d324385ee52d3c3ca963d28309e Mon Sep 17 00:00:00 2001 From: James Date: Thu, 22 Nov 2012 10:29:40 -0500 Subject: [PATCH 2/6] CC-4709: Exception happens when DJ try to click a Webstream not belongs to himself - fixed --- airtime_mvc/application/models/Webstream.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/models/Webstream.php b/airtime_mvc/application/models/Webstream.php index ef3f32605..ad6ca7f76 100644 --- a/airtime_mvc/application/models/Webstream.php +++ b/airtime_mvc/application/models/Webstream.php @@ -34,7 +34,7 @@ class Application_Model_Webstream implements Application_Model_LibraryEditable public function getCreatorId() { - return $this->Webstream->getCcSubjs()->getDbId(); + return $this->webstream->getDbCreatorId(); } public function getLastModified($p_type) @@ -51,7 +51,7 @@ class Application_Model_Webstream implements Application_Model_LibraryEditable $di = new DateInterval("PT{$hours}H{$min}M{$sec}S"); return $di->format("%Hh %Im"); - } + } return ""; } From acf2ffc9d548562380d452b4419440dff43e0d6b Mon Sep 17 00:00:00 2001 From: James Date: Thu, 22 Nov 2012 11:18:42 -0500 Subject: [PATCH 3/6] CC-4707: Webstream: Preview for Webstream in Scheduler is forbidden - fixed --- .../airtime/audiopreview/preview_jplayer.js | 22 ++++++++++++++----- .../public/js/airtime/common/audioplaytest.js | 3 ++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js b/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js index e7435ee2e..a18f31d5d 100644 --- a/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js +++ b/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js @@ -153,12 +153,24 @@ function buildplaylist(p_url, p_playIndex) { continue; } } else if (data[index]['type'] == 1) { - media = {title: data[index]['element_title'], - artist: data[index]['element_artist'], - mp3:data[index]['uri'] - }; + var mime = data[index]['mime']; + if (mime.search(/mp3/i) > 0 || mime.search(/mpeg/i) > 0) { + key = "mp3"; + } else if (mime.search(/og(g|a)/i) > 0 || mime.search(/vorbis/i) > 0) { + key = "oga"; + } else if (mime.search(/mp4/i) > 0) { + key = "m4a"; + } else if (mime.search(/wav/i) > 0) { + key = "wav"; + } + + if (key) { + media = {title: data[index]['element_title'], + artist: data[index]['element_artist'] + }; + media[key] = data[index]['uri'] + } } - console.log(data[index]); if (media && isAudioSupported(data[index]['mime'])) { // javascript doesn't support associative array with numeric key // so we need to remove the gap if we skip any of tracks due to diff --git a/airtime_mvc/public/js/airtime/common/audioplaytest.js b/airtime_mvc/public/js/airtime/common/audioplaytest.js index f96ad09af..078d8f1e4 100644 --- a/airtime_mvc/public/js/airtime/common/audioplaytest.js +++ b/airtime_mvc/public/js/airtime/common/audioplaytest.js @@ -15,5 +15,6 @@ function isAudioSupported(mime){ //is adding a javascript library to do the work for you, which seems like overkill.... return (!!audio.canPlayType && audio.canPlayType(bMime) != "") || (mime.indexOf("mp3") != -1 && navigator.mimeTypes ["application/x-shockwave-flash"] != undefined) || - (mime.indexOf("mp4") != -1 && navigator.mimeTypes ["application/x-shockwave-flash"] != undefined); + (mime.indexOf("mp4") != -1 && navigator.mimeTypes ["application/x-shockwave-flash"] != undefined) || + (mime.indexOf("mpeg") != -1 && navigator.mimeTypes ["application/x-shockwave-flash"] != undefined); } From 3a1945a818e1af428e42216502799e16cf66f0a9 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 22 Nov 2012 11:40:44 -0500 Subject: [PATCH 4/6] CC-4702Webstream: When webstream is playing, it isn't marked as 'media_item_played' in cc_schedule -fixed --- .../application/controllers/ApiController.php | 42 ++++++++++--------- .../pypo/liquidsoap_scripts/ls_script.liq | 5 --- python_apps/pypo/pyponotify.py | 1 + 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 1a1876ce9..89fd93467 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -926,31 +926,33 @@ class ApiController extends Zend_Controller_Action $data_arr = json_decode($data); - if (!is_null($media_id) && isset($data_arr->title) && strlen($data_arr->title) < 1024) { + if (!is_null($media_id)) { + if (isset($data_arr->title) && + strlen($data_arr->title) < 1024) { - $previous_metadata = CcWebstreamMetadataQuery::create() - ->orderByDbStartTime('desc') - ->filterByDbInstanceId($media_id) - ->findOne(); + $previous_metadata = CcWebstreamMetadataQuery::create() + ->orderByDbStartTime('desc') + ->filterByDbInstanceId($media_id) + ->findOne(); - $do_insert = true; - if ($previous_metadata) { - if ($previous_metadata->getDbLiquidsoapData() == $data_arr->title) { - Logging::debug("Duplicate found: ".$data_arr->title); - $do_insert = false; + $do_insert = true; + if ($previous_metadata) { + if ($previous_metadata->getDbLiquidsoapData() == $data_arr->title) { + Logging::debug("Duplicate found: ".$data_arr->title); + $do_insert = false; + } + } + + if ($do_insert) { + $webstream_metadata = new CcWebstreamMetadata(); + $webstream_metadata->setDbInstanceId($media_id); + $webstream_metadata->setDbStartTime(new DateTime("now", new DateTimeZone("UTC"))); + $webstream_metadata->setDbLiquidsoapData($data_arr->title); + $webstream_metadata->save(); } } - - if ($do_insert) { - $webstream_metadata = new CcWebstreamMetadata(); - $webstream_metadata->setDbInstanceId($media_id); - $webstream_metadata->setDbStartTime(new DateTime("now", new DateTimeZone("UTC"))); - $webstream_metadata->setDbLiquidsoapData($data_arr->title); - $webstream_metadata->save(); - } - } else { - throw new Error("Unexpected error. media_id $media_id has a null stream value in cc_schedule!"); + throw new Exception("Null value of media_id"); } $this->view->response = $data; diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index 5cec2301b..ac0e380e9 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -53,11 +53,6 @@ http = input.http_restart(id="http") http = cross_http(http_input_id="http",http) stream_queue = http_fallback(http_input_id="http",http=http,default=queue) -#stream_queue = switch(id="stream_queue_switch", track_sensitive=false, -# transitions=[transition, transition], -# [({!webstream_enabled},web_stream), -# ({true}, queue)]) - ignore(output.dummy(stream_queue, fallible=true)) server.register(namespace="vars", diff --git a/python_apps/pypo/pyponotify.py b/python_apps/pypo/pyponotify.py index 9c2f1688c..96b358e9c 100644 --- a/python_apps/pypo/pyponotify.py +++ b/python_apps/pypo/pyponotify.py @@ -114,6 +114,7 @@ class Notify: self.notify_source_status(options.source_name, options.source_status) elif options.webstream: self.notify_webstream_data(options.webstream, options.media_id) + self.notify_media_start_playing(options.media_id) elif options.media_id: self.notify_media_start_playing(options.media_id) elif options.liquidsoap_started: From 612ac415d29c76245f334f85d697652e2d993148 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 22 Nov 2012 12:24:59 -0500 Subject: [PATCH 5/6] cc-4708: cue points not working -fixed --- python_apps/pypo/liquidsoap_scripts/ls_script.liq | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index ac0e380e9..c291c9876 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -11,11 +11,7 @@ set("server.telnet.port", 1234) webstream_enabled = ref false time = ref string_of(gettimeofday()) -queue = audio_to_stereo(id="queue_src", mksafe(request.equeue(id="queue", length=0.5))) -queue = cue_cut(queue) -queue = amplify(1., override="replay_gain", queue) -#fallback between queue and input.harbor (for restreaming other web-streams) #live stream setup set("harbor.bind_addr", "0.0.0.0") @@ -43,6 +39,10 @@ just_switched = ref false #web_stream = on_metadata(notify_stream, web_stream) #output.dummy(fallible=true, web_stream) +queue = audio_to_stereo(id="queue_src", request.equeue(id="queue", length=0.5)) +queue = cue_cut(queue) +queue = amplify(1., override="replay_gain", queue) + # the crossfade function controls fade in/out queue = crossfade_airtime(queue) queue = on_metadata(notify, queue) @@ -222,6 +222,7 @@ end s = switch(id="default_switch", track_sensitive=false, transitions=[transition_default, transition], [({!scheduled_play_enabled}, stream_queue),({true},default)]) + s = append_dj_inputs(master_live_stream_port, master_live_stream_mp, dj_live_stream_port, dj_live_stream_mp, s) From 87d0383533c6203b1b605fc5aa8c3b16b24e403b Mon Sep 17 00:00:00 2001 From: James Date: Thu, 22 Nov 2012 14:37:57 -0500 Subject: [PATCH 6/6] CC-4703: Now Playing duration column ignores any cue point set - fixed --- airtime_mvc/application/common/DateHelper.php | 20 +++++++++---------- .../application/models/ShowBuilder.php | 8 ++++++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/airtime_mvc/application/common/DateHelper.php b/airtime_mvc/application/common/DateHelper.php index c13543d8e..a22a26b4a 100644 --- a/airtime_mvc/application/common/DateHelper.php +++ b/airtime_mvc/application/common/DateHelper.php @@ -48,7 +48,7 @@ class Application_Common_DateHelper /** * Get the week start date of this week in the format * YYYY-MM-DD - * + * * @return String - week start date */ function getWeekStartDate() @@ -231,7 +231,7 @@ class Application_Common_DateHelper if (2 !== substr_count($p_time, ":")){ return FALSE; } - + if (1 === substr_count($p_time, ".")){ list($hhmmss, $ms) = explode(".", $p_time); } else { @@ -275,17 +275,17 @@ class Application_Common_DateHelper return $dateTime; } - /* Convenience method to return a date formatted into a String rather than a + /* Convenience method to return a date formatted into a String rather than a * DateTime object. Note that if an empty string is provided for $p_dateString - * then the current time is provided. - * + * then the current time is provided. + * * @param $p_dateString * Date string in UTC timezone. * @param $p_format * Format which the string should be returned in. - * - * @return string - * Date String in localtime + * + * @return string + * Date String in localtime * */ public static function ConvertToLocalDateTimeString($p_dateString, $p_format="Y-m-d H:i:s"){ if (is_null($p_dateString) || strlen($p_dateString) == 0) @@ -302,7 +302,7 @@ class Application_Common_DateHelper /* * Example input: "00:02:32.746562". Output is a DateInterval object * representing that 2 minute, 32.746562 second interval. - * + * */ public static function getDateIntervalFromString($p_interval){ list($hour_min_sec, $subsec) = explode(".", $p_interval); @@ -335,7 +335,7 @@ class Application_Common_DateHelper $retVal['errMsg'] = "The year '$year' must be within the range of 1753 - 9999"; } else if (!checkdate($month, $day, $year)) { $retVal['success'] = false; - $retVal['errMsg'] = "'$year-$month-$day' is not a valid date"; + $retVal['errMsg'] = "'$year-$month-$day' is not a valid date"; } else { // check time if (isset($timeInfo)) { diff --git a/airtime_mvc/application/models/ShowBuilder.php b/airtime_mvc/application/models/ShowBuilder.php index 789d5990a..175e61dfd 100644 --- a/airtime_mvc/application/models/ShowBuilder.php +++ b/airtime_mvc/application/models/ShowBuilder.php @@ -266,8 +266,12 @@ class Application_Model_ShowBuilder $row["instance"] = intval($p_item["si_id"]); $row["starts"] = $schedStartDT->format("H:i:s"); $row["ends"] = $schedEndDT->format("H:i:s"); - - $formatter = new LengthFormatter($p_item['file_length']); + + $cue_out = Application_Common_DateHelper::calculateLengthInSeconds($p_item['cue_out']); + $cue_in = Application_Common_DateHelper::calculateLengthInSeconds($p_item['cue_in']); + $run_time = $cue_out-$cue_in; + + $formatter = new LengthFormatter(Application_Common_DateHelper::ConvertMSToHHMMSSmm($run_time*1000)); $row['runtime'] = $formatter->format(); $row["title"] = $p_item["file_track_title"];