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 126e29e68..3d0ff5222 100644
--- a/airtime_mvc/application/models/StreamSetting.php
+++ b/airtime_mvc/application/models/StreamSetting.php
@@ -110,22 +110,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/.htaccess b/airtime_mvc/public/.htaccess
index 3dfbebfef..48c40b1dd 100644
--- a/airtime_mvc/public/.htaccess
+++ b/airtime_mvc/public/.htaccess
@@ -11,5 +11,3 @@ RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
RewriteBase /
-
-SetEnv APPLICATION_ENV development
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/dev_tools/fabric/fab_release_test.py b/dev_tools/fabric/fab_release_test.py
index 417aa564d..6145a5733 100644
--- a/dev_tools/fabric/fab_release_test.py
+++ b/dev_tools/fabric/fab_release_test.py
@@ -143,8 +143,8 @@ def create_fresh_os(vm_name, lucid=False, debian=False):
#installed before.
do_sudo('echo "rabbitmq-server rabbitmq-server/upgrade_previous note" | debconf-set-selections')
- if debian:
- append('/etc/apt/sources.list', "deb http://www.debian-multimedia.org squeeze main non-free", use_sudo=True)
+ #if debian:
+ #append('/etc/apt/sources.list', "deb http://www.debian-multimedia.org squeeze main non-free", use_sudo=True)
def ubuntu_lucid_32(fresh_os=True):
if (fresh_os):
@@ -186,11 +186,20 @@ def debian_squeeze_64(fresh_os=True):
if (fresh_os):
create_fresh_os('Debian_Squeeze_64', debian=True)
+def airtime_180_tar():
+ airtime_18x_tar("airtime", "1.8.0")
+
+def airtime_181_tar():
+ airtime_18x_tar("airtime", "1.8.1")
+
def airtime_182_tar():
+ airtime_18x_tar("airtime-1.8.2" "1.8.2")
+
+def airtime_18x_tar(root_dir, version):
do_sudo('apt-get update')
do_sudo('apt-get install -y tar gzip unzip apache2 php5-pgsql libapache2-mod-php5 ' + \
'php-pear php5-gd postgresql odbc-postgresql python python-configobj poc-streamer ' + \
- 'lame daemontools daemontools-run python-mutagen libsoundtouch-ocaml do_sudo ' + \
+ 'lame daemontools daemontools-run python-mutagen libsoundtouch-ocaml sudo ' + \
'libtaglib-ocaml libao-ocaml libmad-ocaml libesd0 icecast2 oggvideotools ' + \
'libportaudio2 libsamplerate0 libcamomile-ocaml-dev ecasound php5-curl mpg123 ' + \
'python-setuptools python-pip rabbitmq-server libvorbis-ocaml-dev libmp3lame-dev flac')
@@ -217,9 +226,9 @@ def airtime_182_tar():
sed('/etc/default/icecast2', 'ENABLE=false', 'ENABLE=true', use_sudo=True)
do_sudo('service icecast2 start')
- do_run('wget http://downloads.sourceforge.net/project/airtime/1.8.2/airtime-1.8.2.tar.gz')
- do_run('tar xfz airtime-1.8.2.tar.gz')
- do_sudo('cd ~/airtime-1.8.2/install && php airtime-install.php')
+ do_run('wget http://downloads.sourceforge.net/project/airtime/%s/airtime-%s.tar.gz' % (version, version))
+ do_run('tar xfz airtime-%s.tar.gz' % version)
+ do_sudo('cd ~/%s/install && php airtime-install.php' % root_dir)
#need to reboot because of daemon-tools.
reboot(45)
diff --git a/install_full/debian/airtime-full-install b/install_full/debian/airtime-full-install
new file mode 100755
index 000000000..805f1ee7e
--- /dev/null
+++ b/install_full/debian/airtime-full-install
@@ -0,0 +1,14 @@
+#!/bin/bash
+#
+# Auto install script for airtime on Debian
+
+
+#Current dir
+# Absolute path to this script, e.g. /home/user/bin/foo.sh
+SCRIPT=`readlink -f $0`
+# Absolute path this script is in, thus /home/user/bin
+SCRIPTPATH=`dirname $SCRIPT`
+
+cd $SCRIPTPATH/../ubuntu
+./airtime-full-install
+
diff --git a/install_full/ubuntu/airtime-full-install b/install_full/ubuntu/airtime-full-install
index c4c3f82c9..3b94a73e7 100755
--- a/install_full/ubuntu/airtime-full-install
+++ b/install_full/ubuntu/airtime-full-install
@@ -22,6 +22,15 @@ echo "----------------------------------------------------"
echo " 1. Install Packages"
echo "----------------------------------------------------"
+dist=`lsb_release -is`
+
+if [ "$dist" -eq "Debian" ]; then
+ grep "deb http://www.debian-multimedia.org squeeze main non-free" /etc/apt/sources.list
+ if [ "$?" -ne "0" ]; then
+ echo "deb http://www.debian-multimedia.org squeeze main non-free" >> /etc/apt/sources.list
+ fi
+fi
+
apt-get update
# Updated package list
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 c1382be13..147e9e484 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: