From 53aecd1c00f2a3d134cc3be2178d0f2a154d886d Mon Sep 17 00:00:00 2001 From: Yuchen Wang Date: Tue, 29 Nov 2011 16:25:30 -0500 Subject: [PATCH 1/2] CC-3130: Disabling a Shoutcast stream causes the service type to revert back to Icecast This happens because we use same field in the db to store whether stream is disabled, and which type is it (Icecast/Shoutcast). Thus when we disable a stream, we forget about the fact that it was set to Shoutcast before. Fixed by separating out the enable/disable state from stream type. Whether a stream is enabled/disabled is stored in new fields sx_enable. Stream type is stored in the old fields, sx_output. --- .../forms/StreamSettingSubForm.php | 2 +- .../application/models/StreamSetting.php | 29 ++++++++----------- airtime_mvc/build/sql/defaultdata.sql | 7 +++-- .../airtime-2.0.0/airtime-upgrade.php | 9 ++++-- .../upgrades/airtime-2.0.0/liquidsoap.cfg.200 | 8 +++-- .../pypo/liquidsoap_scripts/liquidsoap.cfg | 8 +++-- .../pypo/liquidsoap_scripts/ls_script.liq | 6 ++-- 7 files changed, 39 insertions(+), 30 deletions(-) diff --git a/airtime_mvc/application/forms/StreamSettingSubForm.php b/airtime_mvc/application/forms/StreamSettingSubForm.php index c58e596a3..96c348775 100644 --- a/airtime_mvc/application/forms/StreamSettingSubForm.php +++ b/airtime_mvc/application/forms/StreamSettingSubForm.php @@ -43,7 +43,7 @@ class Application_Form_StreamSettingSubForm extends Zend_Form_SubForm{ $enable = new Zend_Form_Element_Checkbox('enable'); $enable->setLabel('Enabled:') - ->setValue($setting[$prefix.'_output'] != 'disabled'?1:0) + ->setValue($setting[$prefix.'_enable'] == 'true' ? 1 : 0) ->setDecorators(array('ViewHelper')); if($disable_all){ $enable->setAttrib("disabled", "disabled"); diff --git a/airtime_mvc/application/models/StreamSetting.php b/airtime_mvc/application/models/StreamSetting.php index d14843d8b..d63ce12f7 100644 --- a/airtime_mvc/application/models/StreamSetting.php +++ b/airtime_mvc/application/models/StreamSetting.php @@ -7,8 +7,8 @@ class Application_Model_StreamSetting { global $CC_DBC; $sql = "SELECT * " ."FROM cc_stream_setting " - ."WHERE keyname LIKE '%_output' " - ."AND value != 'disabled'"; + ."WHERE keyname LIKE '%_enable' " + ."AND value == true"; $rows = $CC_DBC->getAll($sql); $ids = array(); @@ -75,21 +75,18 @@ class Application_Model_StreamSetting { */ public static function setStreamSetting($data){ global $CC_DBC; - foreach($data as $key=>$d){ - if($key == "output_sound_device" || $key == "icecast_vorbis_metadata"){ + foreach ($data as $key=>$d) { + if ($key == "output_sound_device" || $key == "icecast_vorbis_metadata") { $v = $d == 1?"true":"false"; $sql = "UPDATE cc_stream_setting SET value='$v' WHERE keyname='$key'"; $CC_DBC->query($sql); - } - else{ + } else { $temp = explode('_', $key); $prefix = $temp[0]; - foreach($d as $k=>$v){ - $keyname = $prefix."_".$k; - if( $k == 'output'){ - if( $d["enable"] == 0){ - $v = 'disabled'; - } + foreach ($d as $k=>$v) { + $keyname = $prefix . "_" . $k; + if ($k == 'enable') { + $v = $d['enable'] == 1 ? 'true' : 'false'; } $v = trim($v); $sql = "UPDATE cc_stream_setting SET value='$v' WHERE keyname='$keyname'"; @@ -145,17 +142,15 @@ class Application_Model_StreamSetting { public static function getStreamEnabled($stream_id){ global $CC_DBC; - $keyname = "s".$stream_id."_output"; + $keyname = "s" . $stream_id . "_enable"; $sql = "SELECT value FROM cc_stream_setting" ." WHERE keyname = '$keyname'"; $result = $CC_DBC->GetOne($sql); - - if($result == 'disabled'){ + if ($result == 'false') { $result = false; - }else{ + } else { $result = true; } - return $result; } } diff --git a/airtime_mvc/build/sql/defaultdata.sql b/airtime_mvc/build/sql/defaultdata.sql index 4728d4ee6..48fe7efb5 100644 --- a/airtime_mvc/build/sql/defaultdata.sql +++ b/airtime_mvc/build/sql/defaultdata.sql @@ -10,6 +10,7 @@ INSERT INTO cc_pref("keystr", "valstr") VALUES('plan_level', 'disabled'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('output_sound_device', 'false', 'boolean'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('icecast_vorbis_metadata', 'false', 'boolean'); +INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s1_enable', 'true', 'boolean'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s1_output', 'icecast', 'string'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s1_type', 'ogg', 'string'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s1_bitrate', '128', 'integer'); @@ -22,7 +23,8 @@ INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s1_url', 'ht INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s1_description', 'Airtime Radio! Stream #1', 'string'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s1_genre', 'genre', 'string'); -INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s2_output', 'disabled', 'string'); +INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s2_enable', 'false', 'boolean'); +INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s2_output', 'icecast', 'string'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s2_type', '', 'string'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s2_bitrate', '', 'integer'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s2_host', '', 'string'); @@ -34,7 +36,8 @@ INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s2_url', '', INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s2_description', '', 'string'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s2_genre', '', 'string'); -INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s3_output', 'disabled', 'string'); +INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s3_enable', 'false', 'boolean'); +INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s3_output', 'icecast', 'string'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s3_type', '', 'string'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s3_bitrate', '', 'integer'); INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s3_host', '', 'string'); diff --git a/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php b/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php index c685f763a..9d5bb4a9d 100644 --- a/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php +++ b/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php @@ -153,7 +153,7 @@ class AirtimeDatabaseUpgrade{ private static function SetDefaultStreamSetting() { global $CC_DBC; - + echo "* Setting up default stream setting".PHP_EOL; $sql = "INSERT INTO cc_pref(keystr, valstr) VALUES('stream_type', 'ogg, mp3'); INSERT INTO cc_pref(keystr, valstr) VALUES('stream_bitrate', '24, 32, 48, 64, 96, 128, 160, 192, 224, 256, 320'); @@ -164,6 +164,7 @@ class AirtimeDatabaseUpgrade{ INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('output_sound_device', 'false', 'boolean'); INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('icecast_vorbis_metadata', 'false', 'boolean'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_enable', 'true', 'boolean'); INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_output', 'icecast', 'string'); INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_type', 'ogg', 'string'); INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_bitrate', '128', 'integer'); @@ -176,7 +177,8 @@ class AirtimeDatabaseUpgrade{ INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_description', 'Airtime Radio! Stream #1', 'string'); INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s1_genre', 'genre', 'string'); - INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_output', 'disabled', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_enable', 'false', 'boolean'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_output', 'icecast', 'string'); INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_type', '', 'string'); INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_bitrate', '', 'integer'); INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_host', '', 'string'); @@ -188,7 +190,8 @@ class AirtimeDatabaseUpgrade{ INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_description', '', 'string'); INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s2_genre', '', 'string'); - INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_output', 'disabled', 'string'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_enable', 'false', 'boolean'); + INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_output', 'icecast', 'string'); INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_type', '', 'string'); INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_bitrate', '', 'integer'); INSERT INTO cc_stream_setting (keyname, value, type) VALUES ('s3_host', '', 'string'); diff --git a/install_minimal/upgrades/airtime-2.0.0/liquidsoap.cfg.200 b/install_minimal/upgrades/airtime-2.0.0/liquidsoap.cfg.200 index 28a20a0ce..a96b9146f 100644 --- a/install_minimal/upgrades/airtime-2.0.0/liquidsoap.cfg.200 +++ b/install_minimal/upgrades/airtime-2.0.0/liquidsoap.cfg.200 @@ -7,8 +7,12 @@ ########################################### output_sound_device = false s1_output = "icecast" -s2_output = "disabled" -s3_output = "disabled" +s2_output = "icecast" +s3_output = "icecast" + +s1_enable = true +s2_enable = false +s3_enable = false s1_type = "ogg" s2_type = "ogg" diff --git a/python_apps/pypo/liquidsoap_scripts/liquidsoap.cfg b/python_apps/pypo/liquidsoap_scripts/liquidsoap.cfg index 48c4db42e..3a72bf5f9 100644 --- a/python_apps/pypo/liquidsoap_scripts/liquidsoap.cfg +++ b/python_apps/pypo/liquidsoap_scripts/liquidsoap.cfg @@ -7,8 +7,12 @@ ########################################### output_sound_device = false s1_output = "icecast" -s2_output = "disabled" -s3_output = "disabled" +s2_output = "icecast" +s3_output = "icecast" + +s1_enable = true +s2_enable = false +s3_enable = false s1_type = "ogg" s2_type = "ogg" diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index 80b4dca26..c1382be13 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -54,18 +54,18 @@ if output_sound_device then ignore(out(s)) end -if s1_output != "disabled" then +if s1_enable == true then #output_to(output_type, type, bitrate, host, port, pass, mount_point, url, description, genre, s) output_to(s1_output, s1_type, s1_bitrate, s1_host, s1_port, s1_pass, s1_mount, s1_url, s1_description, s1_genre, s1_user, s, "1") end -if s2_output != "disabled" then +if s2_enable == true then #output_to(output_type, type, bitrate, host, port, pass, mount_point, url, description, genre, s) output_to(s2_output, s2_type, s2_bitrate, s2_host, s2_port, s2_pass, s2_mount, s2_url, s2_description, s2_genre, s2_user, s, "2") end -if s3_output != "disabled" then +if s3_enable == true then #output_to(output_type, type, bitrate, host, port, pass, mount_point, url, description, genre, s) output_to(s3_output, s3_type, s3_bitrate, s3_host, s3_port, s3_pass, s3_mount, s3_url, s3_description, s3_genre, s3_user, s, "3") end From 9c65bfeba72b4a131da470fdb49d80a1c07f9afd Mon Sep 17 00:00:00 2001 From: James Date: Tue, 29 Nov 2011 20:15:38 -0500 Subject: [PATCH 2/2] CC-3131: Latency of stream authentication warning in Stream Settings page - it compares boot time of liquidsoap and the time user clicks on "Save" on stream setting page. The status only gets updated if the "boot_time" > "user update time" - as soon as a user click on save, status is set to "wating" - since there is no timing issue, quering interval is reduced to 1 sec --- .../application/controllers/ApiController.php | 6 ++-- .../controllers/PreferenceController.php | 5 +++ airtime_mvc/application/models/Preference.php | 19 ++++++++++++ .../application/models/StreamSetting.php | 31 ++++++++++++------- .../js/airtime/preferences/streamsetting.js | 4 ++- python_apps/api_clients/api_client.cfg | 4 +-- python_apps/api_clients/api_client.py | 6 ++-- .../pypo/liquidsoap_scripts/ls_lib.liq | 8 ++--- .../pypo/liquidsoap_scripts/ls_script.liq | 2 ++ python_apps/pypo/pypo-notify.py | 15 +++++---- 10 files changed, 71 insertions(+), 29 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 8e97e639c..9cc28589f 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -772,15 +772,17 @@ class ApiController extends Zend_Controller_Action $error_msg = $request->getParam('error_msg'); $stream_id = $request->getParam('stream_id'); - Application_Model_StreamSetting::setLiquidsoapError($stream_id, $error_msg); + $boot_time = $request->getParam('boot_time'); + Application_Model_StreamSetting::setLiquidsoapError($stream_id, $error_msg, $boot_time); } public function updateLiquidsoapConnectionAction(){ $request = $this->getRequest(); $stream_id = $request->getParam('stream_id'); + $boot_time = $request->getParam('boot_time'); // setting error_msg as "" when there is no error_msg - Application_Model_StreamSetting::setLiquidsoapError($stream_id, "OK"); + Application_Model_StreamSetting::setLiquidsoapError($stream_id, "OK", $boot_time); } /** diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index ec846c52e..83bd44748 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -203,6 +203,11 @@ class PreferenceController extends Zend_Controller_Action Application_Model_StreamSetting::setStreamSetting($values); $data = array(); $data['setting'] = Application_Model_StreamSetting::getStreamSetting(); + for($i=1;$i<=$num_of_stream;$i++){ + Application_Model_StreamSetting::setLiquidsoapError($i, "waiting"); + } + // store stream update timestamp + Application_Model_Preference::SetStreamUpdateTimestamp(); Application_Model_RabbitMq::SendMessageToPypo("update_stream_setting", $data); $this->view->statusMsg = "
Stream Setting Updated.
"; } diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index 2307b458a..cc95e7fe3 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -573,6 +573,25 @@ class Application_Model_Preference return $val; } } + + /** + * Stores the last timestamp of user updating stream setting + */ + public static function SetStreamUpdateTimestamp() { + $now = time(); + self::SetValue("stream_update_timestamp", $now); + } + + /** + * Gets the last timestamp of user updating stream setting + */ + public static function GetStreamUpdateTimestemp() { + $update_time = self::GetValue("stream_update_timestamp"); + if($update_time == null){ + $update_time = 0; + } + return $update_time; + } /* User specific preferences start */ diff --git a/airtime_mvc/application/models/StreamSetting.php b/airtime_mvc/application/models/StreamSetting.php index d14843d8b..e742ff594 100644 --- a/airtime_mvc/application/models/StreamSetting.php +++ b/airtime_mvc/application/models/StreamSetting.php @@ -113,22 +113,29 @@ class Application_Model_StreamSetting { } } - public static function setLiquidsoapError($stream_id, $msg){ + /* + * Stores liquidsoap status if $boot_time > save time. + * save time is the time that user clicked save on stream setting page + */ + public static function setLiquidsoapError($stream_id, $msg, $boot_time=null){ global $CC_DBC; - $keyname = "s".$stream_id."_liquidsoap_error"; - $sql = "SELECT COUNT(*) FROM cc_stream_setting" - ." WHERE keyname = '$keyname'"; - $result = $CC_DBC->GetOne($sql); - if ($result == 1){ - $sql = "UPDATE cc_stream_setting" - ." SET value = '$msg'" + $update_time = Application_Model_Preference::GetStreamUpdateTimestemp(); + if($boot_time == null || $boot_time > $update_time ){ + $keyname = "s".$stream_id."_liquidsoap_error"; + $sql = "SELECT COUNT(*) FROM cc_stream_setting" ." WHERE keyname = '$keyname'"; - }else{ - $sql = "INSERT INTO cc_stream_setting (keyname, value, type)" - ." VALUES ('$keyname', '$msg', 'string')"; + $result = $CC_DBC->GetOne($sql); + if ($result == 1){ + $sql = "UPDATE cc_stream_setting" + ." SET value = '$msg'" + ." WHERE keyname = '$keyname'"; + }else{ + $sql = "INSERT INTO cc_stream_setting (keyname, value, type)" + ." VALUES ('$keyname', '$msg', 'string')"; + } + $res = $CC_DBC->query($sql); } - $res = $CC_DBC->query($sql); } public static function getLiquidsoapError($stream_id){ diff --git a/airtime_mvc/public/js/airtime/preferences/streamsetting.js b/airtime_mvc/public/js/airtime/preferences/streamsetting.js index 277d1e34a..eea41e0c2 100644 --- a/airtime_mvc/public/js/airtime/preferences/streamsetting.js +++ b/airtime_mvc/public/js/airtime/preferences/streamsetting.js @@ -96,6 +96,8 @@ function checkLiquidsoapStatus(){ html = '

Connected to the streaming server

' }else if(status == "N/A"){ html = '

The stream is disabled

' + }else if(status == "waiting"){ + html = '

Getting information from the server...

' }else{ html = '

Can not connect to the streaming server

'+status+'

' } @@ -163,6 +165,6 @@ $(document).ready(function() { }) showErrorSections() - setInterval('checkLiquidsoapStatus()', 7000) + setInterval('checkLiquidsoapStatus()', 1000) }); \ No newline at end of file diff --git a/python_apps/api_clients/api_client.cfg b/python_apps/api_clients/api_client.cfg index 3457db2e3..f9da7739a 100644 --- a/python_apps/api_clients/api_client.cfg +++ b/python_apps/api_clients/api_client.cfg @@ -93,10 +93,10 @@ generate_range_url = 'generate_range_dp.php' get_stream_setting = 'get-stream-setting/format/json/api_key/%%api_key%%/' #URL to update liquidsoap error msg -update_liquidsoap_error = 'update-liquidsoap-error/format/json/api_key/%%api_key%%/error_msg/%%error_msg%%/stream_id/%%stream_id%%' +update_liquidsoap_error = 'update-liquidsoap-error/format/json/api_key/%%api_key%%/error_msg/%%error_msg%%/stream_id/%%stream_id%%/boot_time/%%boot_time%%' #URL to update liquidsoap connection -update_liquidsoap_connection = 'update-liquidsoap-connection/format/json/api_key/%%api_key%%/stream_id/%%stream_id%%' +update_liquidsoap_connection = 'update-liquidsoap-connection/format/json/api_key/%%api_key%%/stream_id/%%stream_id%%/boot_time/%%boot_time%%' ############## # OBP config # diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index 7c944b468..6ec5b6819 100755 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -571,7 +571,7 @@ class AirTimeApiClient(ApiClientInterface): except Exception, e: logger.error("Exception: %s", e) - def notify_liquidsoap_error(self, error_msg, stream_id): + def notify_liquidsoap_error(self, error_msg, stream_id, time): logger = logging.getLogger() try: url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["update_liquidsoap_error"]) @@ -581,19 +581,21 @@ class AirTimeApiClient(ApiClientInterface): encoded_msg = urllib.quote(error_msg, '') url = url.replace("%%error_msg%%", encoded_msg) url = url.replace("%%stream_id%%", stream_id) + url = url.replace("%%boot_time%%", time) logger.debug(url) req = urllib2.Request(url) response = urllib2.urlopen(req).read() except Exception, e: logger.error("Exception: %s", e) - def notify_liquidsoap_connection(self, stream_id): + def notify_liquidsoap_connection(self, stream_id, time): logger = logging.getLogger() try: url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["update_liquidsoap_connection"]) url = url.replace("%%api_key%%", self.config["api_key"]) url = url.replace("%%stream_id%%", stream_id) + url = url.replace("%%boot_time%%", time) logger.debug(url) req = urllib2.Request(url) response = urllib2.urlopen(req).read() diff --git a/python_apps/pypo/liquidsoap_scripts/ls_lib.liq b/python_apps/pypo/liquidsoap_scripts/ls_lib.liq index d278d570b..f6e966989 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_lib.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_lib.liq @@ -39,13 +39,13 @@ end def output_to(output_type, type, bitrate, host, port, pass, mount_point, url, description, genre, user, s, stream) = def on_error(msg) - system("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --error='#{msg}' --stream-id=#{stream}") - log("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --error='#{msg}' --stream-id=#{stream}") + system("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --error='#{msg}' --stream-id=#{stream} --time=#{time}") + log("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --error='#{msg}' --stream-id=#{stream} --time=#{time}") 5. end def on_connect() - system("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --connect --stream-id=#{stream}") - log("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --connect --stream-id=#{stream}") + system("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --connect --stream-id=#{stream} --time=#{time}") + log("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --connect --stream-id=#{stream} --time=#{time}") end if output_type == "icecast" then user_ref = ref user diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index 80b4dca26..7a7c3c7be 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -6,6 +6,8 @@ set("log.stdout", true) set("server.telnet", true) set("server.telnet.port", 1234) +time = gettimeofday() + queue = audio_to_stereo(request.queue(id="queue", length=0.5)) queue = cue_cut(queue) diff --git a/python_apps/pypo/pypo-notify.py b/python_apps/pypo/pypo-notify.py index 5b1842f1c..a6cf103dc 100644 --- a/python_apps/pypo/pypo-notify.py +++ b/python_apps/pypo/pypo-notify.py @@ -50,6 +50,7 @@ parser.add_option("-m", "--media-id", help="ID of the file that is currently pla parser.add_option("-e", "--error", action="store", dest="error", type="string", help="liquidsoap error msg.", metavar="error_msg") parser.add_option("-s", "--stream-id", help="ID stream", metavar="stream_id") parser.add_option("-c", "--connect", help="liquidsoap connected", action="store_true", metavar="connect") +parser.add_option("-t", "--time", help="liquidsoap boot up time", action="store", dest="time", metavar="time", type="string") # parse options (options, args) = parser.parse_args() @@ -80,23 +81,25 @@ class Notify: response = self.api_client.notify_media_item_start_playing(data, media_id) logger.debug("Response: "+json.dumps(response)) - def notify_liquidsoap_error(self, error_msg, stream_id): + # @pram time: time that LS started + def notify_liquidsoap_error(self, error_msg, stream_id, time): logger = logging.getLogger() logger.debug('#################################################') logger.debug('# Calling server to update liquidsoap error #') logger.debug('#################################################') logger.debug('error msg = '+ str(error_msg)) - response = self.api_client.notify_liquidsoap_error(error_msg, stream_id) + response = self.api_client.notify_liquidsoap_error(error_msg, stream_id, time) logger.debug("Response: "+json.dumps(response)) - def notify_liquidsoap_connection(self, stream_id): + # @pram time: time that LS started + def notify_liquidsoap_connection(self, stream_id, time): logger = logging.getLogger() logger.debug('#################################################') logger.debug('# Calling server to update liquidsoap connection#') logger.debug('#################################################') - response = self.api_client.notify_liquidsoap_connection(stream_id) + response = self.api_client.notify_liquidsoap_connection(stream_id, time) logger.debug("Response: "+json.dumps(response)) if __name__ == '__main__': @@ -112,13 +115,13 @@ if __name__ == '__main__': if options.error and options.stream_id: try: n = Notify() - n.notify_liquidsoap_error(options.error, options.stream_id) + n.notify_liquidsoap_error(options.error, options.stream_id, options.time) except Exception, e: print e elif options.connect and options.stream_id: try: n = Notify() - n.notify_liquidsoap_connection(options.stream_id) + n.notify_liquidsoap_connection(options.stream_id, options.time) except Exception, e: print e else: