From 3f1ea46d3d2fce573e1b5f9f8fb3259917564860 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 26 Sep 2011 12:18:43 -0400 Subject: [PATCH 01/16] CC-2694: Create command line program for viewing/dumping log files -fix package dependencies --- install_full/ubuntu/airtime-full-install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_full/ubuntu/airtime-full-install b/install_full/ubuntu/airtime-full-install index 94496443f..1570b457c 100755 --- a/install_full/ubuntu/airtime-full-install +++ b/install_full/ubuntu/airtime-full-install @@ -27,7 +27,7 @@ apt-get -y install tar gzip curl apache2 php5-pgsql libapache2-mod-php5 \ php-pear php5-gd postgresql odbc-postgresql python2.6 lame libsoundtouch-ocaml \ libmp3lame-dev libtaglib-ocaml libao-ocaml libmad-ocaml ecasound \ libesd0 icecast2 libportaudio2 libsamplerate0 rabbitmq-server patch \ -php5-curl mpg123 monit python-virtualenv +php5-curl mpg123 monit python-virtualenv multitail #possibly remove? #libvorbis-ocaml-dev From 974612badfc6372542084b9a22eb51055245f2d5 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 26 Sep 2011 12:51:02 -0400 Subject: [PATCH 02/16] CC-2888: Create a monit file for each airtime component --- install_minimal/airtime-install | 3 ++- install_minimal/airtime-uninstall | 3 ++- install_minimal/include/AirtimeIni.php | 7 ------- install_minimal/include/airtime-install.php | 2 -- .../media-monitor/install/media-monitor-install.py | 6 ++++++ .../media-monitor/install/media-monitor-uninstall.py | 6 ++++++ .../media-monitor/monit-airtime-media-monitor.cfg | 9 +++++++++ python_apps/monit/airtime-monit.cfg | 4 ---- python_apps/monit/monit-airtime-generic.cfg | 10 ++++++++++ python_apps/monit/monit-airtime-rabbitmq-server.cfg | 11 +++++++++++ python_apps/pypo/install/pypo-install.py | 6 ++++++ python_apps/pypo/install/pypo-uninstall.py | 9 ++++++++- python_apps/pypo/monit-airtime-liquidsoap.cfg | 9 +++++++++ python_apps/pypo/monit-airtime-playout.cfg | 9 +++++++++ python_apps/show-recorder/install/recorder-install.py | 6 ++++++ .../show-recorder/install/recorder-uninstall.py | 7 +++++++ .../show-recorder/monit-airtime-show-recorder.cfg | 9 +++++++++ 17 files changed, 100 insertions(+), 16 deletions(-) create mode 100644 python_apps/media-monitor/monit-airtime-media-monitor.cfg create mode 100644 python_apps/monit/monit-airtime-generic.cfg create mode 100644 python_apps/monit/monit-airtime-rabbitmq-server.cfg create mode 100644 python_apps/pypo/monit-airtime-liquidsoap.cfg create mode 100644 python_apps/pypo/monit-airtime-playout.cfg create mode 100644 python_apps/show-recorder/monit-airtime-show-recorder.cfg diff --git a/install_minimal/airtime-install b/install_minimal/airtime-install index b962ec5c6..0255c1ae8 100755 --- a/install_minimal/airtime-install +++ b/install_minimal/airtime-install @@ -61,8 +61,9 @@ python ${SCRIPTPATH}/../python_apps/show-recorder/install/recorder-install.py echo -e "\n*** Media Monitor Installation ***" python ${SCRIPTPATH}/../python_apps/media-monitor/install/media-monitor-install.py -monit monitor icecast2 +set +e monit monitor rabbitmq-server +set -e echo -e "\n*** Verifying your system environment ***" sleep 10 diff --git a/install_minimal/airtime-uninstall b/install_minimal/airtime-uninstall index 5de4dd80d..9aae54194 100755 --- a/install_minimal/airtime-uninstall +++ b/install_minimal/airtime-uninstall @@ -25,8 +25,9 @@ SCRIPTPATH=`dirname $SCRIPT` echo -e "\n******************************* Uninstall Begin ********************************" -monit unmonitor icecast2 >/dev/null 2>&1 +set +e monit unmonitor rabbitmq-server >/dev/null 2>&1 +set -e echo -e "\n*** Uninstalling Pypo ***" python ${SCRIPTPATH}/../python_apps/pypo/install/pypo-uninstall.py diff --git a/install_minimal/include/AirtimeIni.php b/install_minimal/include/AirtimeIni.php index d06bcb64d..59b1fafaf 100644 --- a/install_minimal/include/AirtimeIni.php +++ b/install_minimal/include/AirtimeIni.php @@ -120,13 +120,6 @@ class AirtimeIni chmod($filename, 0640)); } - public static function CreateMonitFile(){ - if (!copy(__DIR__."/../../python_apps/monit/airtime-monit.cfg", AirtimeIni::CONF_FILE_MONIT)){ - echo "Could not copy airtime-monit.cfg to /etc/monit/conf.d/. Exiting."; - exit(1); - } - } - public static function RemoveMonitFile(){ @unlink("/etc/monit/conf.d/airtime-monit.cfg"); } diff --git a/install_minimal/include/airtime-install.php b/install_minimal/include/airtime-install.php index 19c2997d1..6ab5e75cd 100644 --- a/install_minimal/include/airtime-install.php +++ b/install_minimal/include/airtime-install.php @@ -110,8 +110,6 @@ if ($overwrite) { echo "* Creating INI files".PHP_EOL; AirtimeIni::CreateIniFiles(); } -AirtimeIni::CreateMonitFile(); - AirtimeInstall::InstallPhpCode(); AirtimeInstall::InstallBinaries(); diff --git a/python_apps/media-monitor/install/media-monitor-install.py b/python_apps/media-monitor/install/media-monitor-install.py index a96b3e4d4..ab5324705 100644 --- a/python_apps/media-monitor/install/media-monitor-install.py +++ b/python_apps/media-monitor/install/media-monitor-install.py @@ -39,6 +39,10 @@ def get_current_script_dir(): index = current_script_dir.rindex('/') return current_script_dir[0:index] +def copy_monit_file(current_script_dir): + shutil.copy("%s/../monit-airtime-media-monitor.cfg"%current_script_dir, "/etc/monit/conf.d/") + shutil.copy("%s/../../monit/monit-airtime-generic.cfg"%current_script_dir, "/etc/monit/conf.d/") + try: # load config file @@ -50,6 +54,8 @@ try: current_script_dir = get_current_script_dir() + copy_monit_file(current_script_dir) + p = Popen("/etc/init.d/airtime-media-monitor stop >/dev/null 2>&1", shell=True) sts = os.waitpid(p.pid, 0)[1] diff --git a/python_apps/media-monitor/install/media-monitor-uninstall.py b/python_apps/media-monitor/install/media-monitor-uninstall.py index a9b69399d..ed6fa4195 100644 --- a/python_apps/media-monitor/install/media-monitor-uninstall.py +++ b/python_apps/media-monitor/install/media-monitor-uninstall.py @@ -18,6 +18,9 @@ def get_current_script_dir(): index = current_script_dir.rindex('/') return current_script_dir[0:index] +def remove_monit_file(): + os.system("rm -f /etc/monit/conf.d/monit-airtime-media-monitor.cfg") + try: # load config file try: @@ -30,6 +33,9 @@ try: os.system("rm -f /etc/init.d/airtime-media-monitor") os.system("update-rc.d -f airtime-media-monitor remove >/dev/null 2>&1") + print "Removing monit file" + remove_monit_file() + print "Removing log directories" remove_path(config["log_dir"]) diff --git a/python_apps/media-monitor/monit-airtime-media-monitor.cfg b/python_apps/media-monitor/monit-airtime-media-monitor.cfg new file mode 100644 index 000000000..7001a3f5a --- /dev/null +++ b/python_apps/media-monitor/monit-airtime-media-monitor.cfg @@ -0,0 +1,9 @@ + set daemon 10 # Poll at 5 second intervals + set logfile /var/log/monit.log + + set httpd port 2812 + + check process airtime-media-monitor + with pidfile "/var/run/airtime-media-monitor.pid" + start program = "/etc/init.d/airtime-media-monitor start" with timeout 10 seconds + stop program = "/etc/init.d/airtime-media-monitor stop" diff --git a/python_apps/monit/airtime-monit.cfg b/python_apps/monit/airtime-monit.cfg index 8480dda7f..0f5dd0f69 100644 --- a/python_apps/monit/airtime-monit.cfg +++ b/python_apps/monit/airtime-monit.cfg @@ -21,10 +21,6 @@ with pidfile "/var/run/airtime-show-recorder.pid" start program = "/etc/init.d/airtime-show-recorder start" with timeout 10 seconds stop program = "/etc/init.d/airtime-show-recorder stop" - check process icecast2 - matching "/usr/bin/icecast2" - start program = "/etc/init.d/icecast2 start" with timeout 10 seconds - stop program = "/etc/init.d/icecast2 stop" check process rabbitmq-server with pidfile "/var/run/rabbitmq.pid" start program = "/bin/bash -c '/etc/init.d/rabbitmq-server start; sed "s/.*,\(.*\)\}.*/\1/" /var/lib/rabbitmq/pids > /var/run/rabbitmq.pid'" diff --git a/python_apps/monit/monit-airtime-generic.cfg b/python_apps/monit/monit-airtime-generic.cfg new file mode 100644 index 000000000..03f0d0173 --- /dev/null +++ b/python_apps/monit/monit-airtime-generic.cfg @@ -0,0 +1,10 @@ + set daemon 10 # Poll at 5 second intervals + set logfile /var/log/monit.log + + set httpd port 2812 + allow admin:monit + + check process rabbitmq-server + with pidfile "/var/run/rabbitmq.pid" + start program = "/bin/bash -c '/etc/init.d/rabbitmq-server start; sed "s/.*,\(.*\)\}.*/\1/" /var/lib/rabbitmq/pids > /var/run/rabbitmq.pid'" + stop program = "/etc/init.d/rabbitmq-server stop" diff --git a/python_apps/monit/monit-airtime-rabbitmq-server.cfg b/python_apps/monit/monit-airtime-rabbitmq-server.cfg new file mode 100644 index 000000000..74742dc58 --- /dev/null +++ b/python_apps/monit/monit-airtime-rabbitmq-server.cfg @@ -0,0 +1,11 @@ + set daemon 10 # Poll at 5 second intervals + #set logfile syslog facility log_daemon + set logfile /var/log/monit.log + + set httpd port 2812 + allow admin:monit + + check process rabbitmq-server + with pidfile "/var/run/rabbitmq.pid" + start program = "/bin/bash -c '/etc/init.d/rabbitmq-server start; sed "s/.*,\(.*\)\}.*/\1/" /var/lib/rabbitmq/pids > /var/run/rabbitmq.pid'" + stop program = "/etc/init.d/rabbitmq-server stop" diff --git a/python_apps/pypo/install/pypo-install.py b/python_apps/pypo/install/pypo-install.py index 0853cf9a9..0ee6e9667 100644 --- a/python_apps/pypo/install/pypo-install.py +++ b/python_apps/pypo/install/pypo-install.py @@ -50,6 +50,10 @@ def is_natty(): return True return False +def copy_monit_file(current_script_dir): + shutil.copy("%s/../monit-airtime-playout.cfg"%current_script_dir, "/etc/monit/conf.d/") + shutil.copy("%s/../monit-airtime-liquidsoap.cfg"%current_script_dir, "/etc/monit/conf.d/") + shutil.copy("%s/../../monit/monit-airtime-generic.cfg"%current_script_dir, "/etc/monit/conf.d/") try: # load config file @@ -61,6 +65,8 @@ try: current_script_dir = get_current_script_dir() + copy_monit_file(current_script_dir) + p = Popen("/etc/init.d/airtime-playout stop >/dev/null 2>&1", shell=True) sts = os.waitpid(p.pid, 0)[1] diff --git a/python_apps/pypo/install/pypo-uninstall.py b/python_apps/pypo/install/pypo-uninstall.py index c6f95da3a..9b4429598 100644 --- a/python_apps/pypo/install/pypo-uninstall.py +++ b/python_apps/pypo/install/pypo-uninstall.py @@ -17,6 +17,10 @@ def get_current_script_dir(): current_script_dir = os.path.realpath(__file__) index = current_script_dir.rindex('/') return current_script_dir[0:index] + +def remove_monit_file(): + os.system("rm -f /etc/monit/conf.d/monit-airtime-playout.cfg") + os.system("rm -f /etc/monit/conf.d/monit-airtime-liquidsoap.cfg") try: # load config file @@ -30,8 +34,11 @@ try: os.system("rm -f /etc/init.d/airtime-playout") os.system("update-rc.d -f airtime-playout remove >/dev/null 2>&1") - #copy logrotate script + #remove logrotate script os.system("rm -f /etc/logrotate.d/airtime-liquidsoap") + + print "Removing monit file" + remove_monit_file() print "Removing cache directories" remove_path(config["cache_base_dir"]) diff --git a/python_apps/pypo/monit-airtime-liquidsoap.cfg b/python_apps/pypo/monit-airtime-liquidsoap.cfg new file mode 100644 index 000000000..aececd388 --- /dev/null +++ b/python_apps/pypo/monit-airtime-liquidsoap.cfg @@ -0,0 +1,9 @@ + set daemon 10 # Poll at 5 second intervals + set logfile /var/log/monit.log + + set httpd port 2812 + + check process airtime-liquidsoap + with pidfile "/var/run/airtime-liquidsoap.pid" + start program = "/etc/init.d/airtime-playout monit-restart" with timeout 5 seconds + stop program = "/etc/init.d/airtime-playout stop" diff --git a/python_apps/pypo/monit-airtime-playout.cfg b/python_apps/pypo/monit-airtime-playout.cfg new file mode 100644 index 000000000..5b096c72a --- /dev/null +++ b/python_apps/pypo/monit-airtime-playout.cfg @@ -0,0 +1,9 @@ + set daemon 10 # Poll at 5 second intervals + set logfile /var/log/monit.log + + set httpd port 2812 + + check process airtime-playout + with pidfile "/var/run/airtime-playout.pid" + start program = "/etc/init.d/airtime-playout monit-restart" with timeout 5 seconds + stop program = "/etc/init.d/airtime-playout stop" diff --git a/python_apps/show-recorder/install/recorder-install.py b/python_apps/show-recorder/install/recorder-install.py index ad576e22f..762b6daed 100644 --- a/python_apps/show-recorder/install/recorder-install.py +++ b/python_apps/show-recorder/install/recorder-install.py @@ -32,6 +32,10 @@ def get_current_script_dir(): index = current_script_dir.rindex('/') return current_script_dir[0:index] +def copy_monit_file(current_script_dir): + shutil.copy("%s/../monit-airtime-show-recorder.cfg"%current_script_dir, "/etc/monit/conf.d/") + shutil.copy("%s/../../monit/monit-airtime-generic.cfg"%current_script_dir, "/etc/monit/conf.d/") + try: # load config file @@ -43,6 +47,8 @@ try: current_script_dir = get_current_script_dir() + copy_monit_file(current_script_dir) + p = Popen("/etc/init.d/airtime-show-recorder stop >/dev/null 2>&1", shell=True) sts = os.waitpid(p.pid, 0)[1] diff --git a/python_apps/show-recorder/install/recorder-uninstall.py b/python_apps/show-recorder/install/recorder-uninstall.py index 35e923dfb..d778f8d07 100644 --- a/python_apps/show-recorder/install/recorder-uninstall.py +++ b/python_apps/show-recorder/install/recorder-uninstall.py @@ -17,6 +17,10 @@ def get_current_script_dir(): current_script_dir = os.path.realpath(__file__) index = current_script_dir.rindex('/') return current_script_dir[0:index] + +def remove_monit_file(): + os.system("rm -f /etc/monit/conf.d/monit-airtime-show-recorder.cfg") + try: # load config file @@ -29,6 +33,9 @@ try: os.system("/etc/init.d/airtime-show-recorder stop") os.system("rm -f /etc/init.d/airtime-show-recorder") os.system("update-rc.d -f airtime-show-recorder remove >/dev/null 2>&1") + + print "Removing monit file" + remove_monit_file() print "Removing log directories" remove_path(config["log_dir"]) diff --git a/python_apps/show-recorder/monit-airtime-show-recorder.cfg b/python_apps/show-recorder/monit-airtime-show-recorder.cfg new file mode 100644 index 000000000..137e56c03 --- /dev/null +++ b/python_apps/show-recorder/monit-airtime-show-recorder.cfg @@ -0,0 +1,9 @@ + set daemon 10 # Poll at 5 second intervals + set logfile /var/log/monit.log + + set httpd port 2812 + + check process airtime-show-recorder + with pidfile "/var/run/airtime-show-recorder.pid" + start program = "/etc/init.d/airtime-show-recorder start" with timeout 10 seconds + stop program = "/etc/init.d/airtime-show-recorder stop" From 2c0b0a2eff95377e2dc454a0e7823bae88c9da48 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 26 Sep 2011 14:47:21 -0400 Subject: [PATCH 03/16] CC-2888: Create a monit file for each airtime component -remove old monit file on upgrade -remove old monit file from git repo. --- .../airtime-2.0.0/airtime-upgrade.php | 10 +++++-- python_apps/monit/airtime-monit.cfg | 27 ------------------- 2 files changed, 8 insertions(+), 29 deletions(-) delete mode 100644 python_apps/monit/airtime-monit.cfg 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 a2cb64b09..ac5f99ade 100644 --- a/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php +++ b/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php @@ -238,7 +238,7 @@ class Airtime200Upgrade{ } public static function InstallAirtimePhpServerCode($phpDir) - { + { $AIRTIME_SRC = realpath(__DIR__.'/../../../airtime_mvc'); @@ -247,7 +247,11 @@ class Airtime200Upgrade{ echo "* Installing PHP code to ".$phpDir.PHP_EOL; exec("mkdir -p ".$phpDir); exec("cp -R ".$AIRTIME_SRC."/* ".$phpDir); - } + } + + public static function RemoveOldMonitFile(){ + unlink("/etc/monit/conf.d/airtime-monit.cfg"); + } } class ConvertToUtc{ @@ -577,6 +581,8 @@ AirtimeInstall::SetDefaultStreamSetting(); AirtimeInstall::GetOldLiquidsoapCfgAndUpdate(); +AirtimeUpgrade::RemoveOldMonitFile(); + // restart monit exec("service monit restart"); diff --git a/python_apps/monit/airtime-monit.cfg b/python_apps/monit/airtime-monit.cfg deleted file mode 100644 index 0f5dd0f69..000000000 --- a/python_apps/monit/airtime-monit.cfg +++ /dev/null @@ -1,27 +0,0 @@ - set daemon 10 # Poll at 5 second intervals - #set logfile syslog facility log_daemon - set logfile /var/log/monit.log - - set httpd port 2812 - allow admin:monit - - check process airtime-playout - with pidfile "/var/run/airtime-playout.pid" - start program = "/etc/init.d/airtime-playout monit-restart" with timeout 5 seconds - stop program = "/etc/init.d/airtime-playout stop" - check process airtime-liquidsoap - with pidfile "/var/run/airtime-liquidsoap.pid" - start program = "/etc/init.d/airtime-playout monit-restart" with timeout 5 seconds - stop program = "/etc/init.d/airtime-playout stop" - check process airtime-media-monitor - with pidfile "/var/run/airtime-media-monitor.pid" - start program = "/etc/init.d/airtime-media-monitor start" with timeout 10 seconds - stop program = "/etc/init.d/airtime-media-monitor stop" - check process airtime-show-recorder - with pidfile "/var/run/airtime-show-recorder.pid" - start program = "/etc/init.d/airtime-show-recorder start" with timeout 10 seconds - stop program = "/etc/init.d/airtime-show-recorder stop" - check process rabbitmq-server - with pidfile "/var/run/rabbitmq.pid" - start program = "/bin/bash -c '/etc/init.d/rabbitmq-server start; sed "s/.*,\(.*\)\}.*/\1/" /var/lib/rabbitmq/pids > /var/run/rabbitmq.pid'" - stop program = "/etc/init.d/rabbitmq-server stop" From dfe43c98bb0abe5f846b82ebf851efc14c6fcdb0 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 26 Sep 2011 15:19:04 -0400 Subject: [PATCH 04/16] CC-2833: Use ClassLoaders for PHP Files -autoload RabbitMq class --- airtime_mvc/application/Bootstrap.php | 2 +- .../controllers/LibraryController.php | 4 ++-- .../controllers/PreferenceController.php | 2 +- .../controllers/ScheduleController.php | 2 +- .../controllers/plugins/RabbitMqPlugin.php | 6 ++--- airtime_mvc/application/models/MusicDir.php | 8 +++---- airtime_mvc/application/models/Preference.php | 4 ++-- airtime_mvc/application/models/RabbitMq.php | 2 +- .../application/models/ScheduleGroup.php | 4 ++-- airtime_mvc/application/models/Show.php | 10 ++++----- .../application/models/ShowInstance.php | 22 +++++++++---------- .../application/models/tests/populator.php | 4 ++-- 12 files changed, 35 insertions(+), 35 deletions(-) diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index c514ce8ca..f3f956da5 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -19,7 +19,7 @@ require_once 'Soundcloud.php'; require_once 'Preference.php'; //require_once 'Shows.php'; //require_once 'User.php'; -require_once 'RabbitMq.php'; +//require_once 'RabbitMq.php'; require_once 'DateHelper.php'; require_once __DIR__.'/controllers/plugins/RabbitMqPlugin.php'; diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 2f0466b12..28987eb81 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -164,7 +164,7 @@ class LibraryController extends Zend_Controller_Action else { $res = settype($res, "integer"); $data = array("filepath" => $file->getFilePath(), "delete" => $res); - RabbitMq::SendMessageToMediaMonitor("file_delete", $data); + Application_Model_RabbitMq::SendMessageToMediaMonitor("file_delete", $data); } } @@ -214,7 +214,7 @@ class LibraryController extends Zend_Controller_Action $data = $file->getMetadata(); - RabbitMq::SendMessageToMediaMonitor("md_update", $data); + Application_Model_RabbitMq::SendMessageToMediaMonitor("md_update", $data); $this->_helper->redirector('index'); } diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index 4fdf9ec0b..11fead872 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -188,7 +188,7 @@ class PreferenceController extends Zend_Controller_Action Application_Model_StreamSetting::setStreamSetting($values); $data = array(); $data['setting'] = Application_Model_StreamSetting::getStreamSetting(); - RabbitMq::SendMessageToPypo("update_stream_setting", $data); + Application_Model_RabbitMq::SendMessageToPypo("update_stream_setting", $data); $this->view->statusMsg = "
Stream Setting Updated.
"; } } diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 4f2ade3cd..a99392f7c 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -700,7 +700,7 @@ class ScheduleController extends Zend_Controller_Action $show->clearShow(); $show->deleteShow(); // send 'cancel-current-show' command to pypo - RabbitMq::SendMessageToPypo("cancel_current_show", array()); + Application_Model_RabbitMq::SendMessageToPypo("cancel_current_show", array()); } } diff --git a/airtime_mvc/application/controllers/plugins/RabbitMqPlugin.php b/airtime_mvc/application/controllers/plugins/RabbitMqPlugin.php index 50dc9969f..1c885528c 100644 --- a/airtime_mvc/application/controllers/plugins/RabbitMqPlugin.php +++ b/airtime_mvc/application/controllers/plugins/RabbitMqPlugin.php @@ -4,10 +4,10 @@ class RabbitMqPlugin extends Zend_Controller_Plugin_Abstract { public function dispatchLoopShutdown() { - if (RabbitMq::$doPush) { + if (Application_Model_RabbitMq::$doPush) { $md = array('schedule' => Application_Model_Schedule::GetScheduledPlaylists()); - RabbitMq::SendMessageToPypo("update_schedule", $md); - RabbitMq::SendMessageToShowRecorder("update_schedule"); + Application_Model_RabbitMq::SendMessageToPypo("update_schedule", $md); + Application_Model_RabbitMq::SendMessageToShowRecorder("update_schedule"); } } } diff --git a/airtime_mvc/application/models/MusicDir.php b/airtime_mvc/application/models/MusicDir.php index 0ca8ab00d..cee6182cd 100644 --- a/airtime_mvc/application/models/MusicDir.php +++ b/airtime_mvc/application/models/MusicDir.php @@ -58,7 +58,7 @@ class Application_Model_MusicDir { $temp_show->updateScheduledTime(); } - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); } /** @@ -184,7 +184,7 @@ class Application_Model_MusicDir { $data = array(); $data["directory"] = $p_path; - RabbitMq::SendMessageToMediaMonitor("new_watch", $data); + Application_Model_RabbitMq::SendMessageToMediaMonitor("new_watch", $data); } return $res; } @@ -256,7 +256,7 @@ class Application_Model_MusicDir { $data = array(); $data["directory"] = $p_dir; $data["dir_id"] = $dirId; - RabbitMq::SendMessageToMediaMonitor("change_stor", $data); + Application_Model_RabbitMq::SendMessageToMediaMonitor("change_stor", $data); return array("code"=>0); }else{ return array("code"=>1, "error"=>"'$p_dir' is already set as the current storage dir or in the watched folders list."); @@ -289,7 +289,7 @@ class Application_Model_MusicDir { $dir->remove(); $data = array(); $data["directory"] = $p_dir; - RabbitMq::SendMessageToMediaMonitor("remove_watch", $data); + Application_Model_RabbitMq::SendMessageToMediaMonitor("remove_watch", $data); return array("code"=>0); } } diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index db4f095ee..513067b79 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -81,7 +81,7 @@ class Application_Model_Preference self::SetValue("station_name", $title); $defaultNamespace = new Zend_Session_Namespace('title_name'); $defaultNamespace->title = $title; - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); //set session variable to new station name so that html title is updated. //should probably do this in a view helper to keep this controller as minimal as possible. @@ -107,7 +107,7 @@ class Application_Model_Preference public static function SetStreamLabelFormat($type){ self::SetValue("stream_label_format", $type); - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); } public static function GetStreamLabelFormat(){ diff --git a/airtime_mvc/application/models/RabbitMq.php b/airtime_mvc/application/models/RabbitMq.php index 537136c9f..d5bbfbfba 100644 --- a/airtime_mvc/application/models/RabbitMq.php +++ b/airtime_mvc/application/models/RabbitMq.php @@ -9,7 +9,7 @@ class RabbitMq * Sets a flag to push the schedule at the end of the request. */ public static function PushSchedule() { - RabbitMq::$doPush = TRUE; + Application_Model_RabbitMq::$doPush = TRUE; } public static function SendMessageToPypo($event_type, $md) diff --git a/airtime_mvc/application/models/ScheduleGroup.php b/airtime_mvc/application/models/ScheduleGroup.php index 713c9c5bc..5d8b29b21 100644 --- a/airtime_mvc/application/models/ScheduleGroup.php +++ b/airtime_mvc/application/models/ScheduleGroup.php @@ -116,7 +116,7 @@ class Application_Model_ScheduleGroup { } } - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); return $this->groupId; } @@ -155,7 +155,7 @@ class Application_Model_ScheduleGroup { ." WHERE group_id = ".$this->groupId; //echo $sql; $retVal = $CC_DBC->query($sql); - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); return $retVal; } diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 6f241e999..77f86953e 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -19,7 +19,7 @@ class Application_Model_Show { { $show = CcShowQuery::create()->findPK($this->_showId); $show->setDbName($name); - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); } public function getDescription() @@ -119,7 +119,7 @@ class Application_Model_Show { WHERE starts >= '{$day_timestamp}' AND show_id = {$this->_showId}"; $CC_DBC->query($sql); - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); } /** @@ -871,7 +871,7 @@ class Application_Model_Show { } Application_Model_Show::populateShowUntil($showId); - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); return $showId; } @@ -1008,7 +1008,7 @@ class Application_Model_Show { } } } - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); } //for a show with repeat_type == 0,1,2 @@ -1091,7 +1091,7 @@ class Application_Model_Show { } Application_Model_Show::setNextPop($next_date, $show_id, $day); - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); } private static function populateShow($repeatType, $show_id, $next_pop_date, diff --git a/airtime_mvc/application/models/ShowInstance.php b/airtime_mvc/application/models/ShowInstance.php index 163dcdbde..7fed88a1a 100644 --- a/airtime_mvc/application/models/ShowInstance.php +++ b/airtime_mvc/application/models/ShowInstance.php @@ -111,14 +111,14 @@ class Application_Model_ShowInstance { { $this->_showInstance->setDbStarts($start) ->save(); - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); } public function setShowEnd($end) { $this->_showInstance->setDbEnds($end) ->save(); - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); } public function updateScheduledTime() @@ -153,7 +153,7 @@ class Application_Model_ShowInstance { $CC_DBC->query($sql); } } - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); } public function moveShow($deltaDay, $deltaMin) @@ -219,7 +219,7 @@ class Application_Model_ShowInstance { $show->setShowLastShow($new_ends); } - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); } public function resizeShow($deltaDay, $deltaMin) @@ -263,7 +263,7 @@ class Application_Model_ShowInstance { } $this->setShowEnd($new_ends); - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); } /** @@ -295,7 +295,7 @@ class Application_Model_ShowInstance { else { $groupId = $sched->addPlaylistAfter($this->_instanceId, $lastGroupId, $plId); } - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); $this->updateScheduledTime(); } @@ -315,7 +315,7 @@ class Application_Model_ShowInstance { else { $groupId = $sched->addFileAfter($this->_instanceId, $lastGroupId, $file_id); } - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); $this->updateScheduledTime(); } @@ -351,7 +351,7 @@ class Application_Model_ShowInstance { WHERE starts >= '{$groupBoundry["end_timestamp"]}' AND instance_id = {$this->_instanceId}"; $CC_DBC->query($sql); - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); $this->updateScheduledTime(); } @@ -360,7 +360,7 @@ class Application_Model_ShowInstance { CcScheduleQuery::create() ->filterByDbInstanceId($this->_instanceId) ->delete(); - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); $this->updateScheduledTime(); } @@ -373,9 +373,9 @@ class Application_Model_ShowInstance { CcShowInstancesQuery::create() ->findPK($this->_instanceId) ->delete(); - RabbitMq::PushSchedule(); + Application_Model_RabbitMq::PushSchedule(); if($recording){ - RabbitMq::SendMessageToShowRecorder("cancel_recording"); + Application_Model_RabbitMq::SendMessageToShowRecorder("cancel_recording"); } } diff --git a/airtime_mvc/application/models/tests/populator.php b/airtime_mvc/application/models/tests/populator.php index 82c7ad1e6..6d70e1fbb 100644 --- a/airtime_mvc/application/models/tests/populator.php +++ b/airtime_mvc/application/models/tests/populator.php @@ -97,9 +97,9 @@ while ($showTime < $endDate) { $showNumber = $showNumber + 1; } -if (RabbitMq::$doPush) { +if (Application_Model_RabbitMq::$doPush) { $md = array('schedule' => Application_Model_Schedule::GetScheduledPlaylists()); - RabbitMq::SendMessageToPypo("update_schedule", $md); + Application_Model_RabbitMq::SendMessageToPypo("update_schedule", $md); } From b8838a5bdaf047679ee4dce2a89e2298e54513a0 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 26 Sep 2011 15:24:48 -0400 Subject: [PATCH 05/16] CC-2833: Use ClassLoaders for PHP Files -autoload AtSoundcloud class --- airtime_mvc/application/Bootstrap.php | 4 ++-- airtime_mvc/application/controllers/ApiController.php | 2 +- airtime_mvc/application/models/Soundcloud.php | 2 +- airtime_mvc/application/models/StoredFile.php | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index f3f956da5..9da2f81e9 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -11,12 +11,12 @@ require_once __DIR__."/configs/constants.php"; require_once __DIR__."/configs/conf.php"; require_once 'DB.php'; -require_once 'Soundcloud.php'; +//require_once 'Soundcloud.php'; //require_once 'MusicDir.php'; //require_once 'Playlist.php'; //require_once 'StoredFile.php'; //require_once 'Schedule.php'; -require_once 'Preference.php'; +//require_once 'Preference.php'; //require_once 'Shows.php'; //require_once 'User.php'; //require_once 'RabbitMq.php'; diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 7e6b5768f..8e0fc20f7 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -400,7 +400,7 @@ class ApiController extends Zend_Controller_Action $tags = array_merge($hosts, array($show_name)); try { - $soundcloud = new ATSoundcloud(); + $soundcloud = new Application_Model_AtSoundcloud(); $soundcloud_id = $soundcloud->uploadTrack($file->getFilePath(), $tmpTitle, $description, $tags, $show_start_time, $show_genre); $file->setSoundCloudFileId($soundcloud_id); break; diff --git a/airtime_mvc/application/models/Soundcloud.php b/airtime_mvc/application/models/Soundcloud.php index 5e17049b6..29ad98772 100644 --- a/airtime_mvc/application/models/Soundcloud.php +++ b/airtime_mvc/application/models/Soundcloud.php @@ -2,7 +2,7 @@ require_once 'soundcloud-api/Services/Soundcloud.php'; -class ATSoundcloud { +class Application_Model_AtSoundcloud { private $_soundcloud; diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index a9f0913d7..6c9bf6e16 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -924,7 +924,7 @@ class Application_Model_StoredFile { $release = $file->getDbYear(); try { - $soundcloud = new ATSoundcloud(); + $soundcloud = new Application_Model_AtSoundcloud(); $soundcloud_id = $soundcloud->uploadTrack($this->getFilePath(), $this->getName(), $description, $tag, $release, $genre); $this->setSoundCloudFileId($soundcloud_id); break; From 9e6a1ebf44195bac156b6b104c5b6c68743022e9 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 26 Sep 2011 15:29:12 -0400 Subject: [PATCH 06/16] CC-2833: Use ClassLoaders for PHP Files -autoload DateHelper class --- airtime_mvc/application/Bootstrap.php | 2 +- .../application/controllers/ApiController.php | 2 +- .../controllers/ScheduleController.php | 8 +++---- airtime_mvc/application/models/DateHelper.php | 2 +- airtime_mvc/application/models/Nowplaying.php | 14 +++++------ airtime_mvc/application/models/Schedule.php | 6 ++--- airtime_mvc/application/models/Show.php | 24 +++++++++---------- 7 files changed, 29 insertions(+), 29 deletions(-) diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index 9da2f81e9..fbb337a19 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -20,7 +20,7 @@ require_once 'DB.php'; //require_once 'Shows.php'; //require_once 'User.php'; //require_once 'RabbitMq.php'; -require_once 'DateHelper.php'; +//require_once 'DateHelper.php'; require_once __DIR__.'/controllers/plugins/RabbitMqPlugin.php'; global $CC_CONFIG, $CC_DBC; diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 8e0fc20f7..fd246d863 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -158,7 +158,7 @@ class ApiController extends Zend_Controller_Action $this->view->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); - $date = new DateHelper; + $date = new Application_Model_DateHelper; $timeNow = $date->getTimestamp(); $result = array("env"=>APPLICATION_ENV, "schedulerTime"=>gmdate("Y-m-d H:i:s"), diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index a99392f7c..d1ed1674d 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -152,8 +152,8 @@ class ScheduleController extends Zend_Controller_Action $params = '/format/json/id/#id#'; - $showStartDateHelper = DateHelper::ConvertToLocalDateTime($show->getShowStart()); - $showEndDateHelper = DateHelper::ConvertToLocalDateTime($show->getShowEnd()); + $showStartDateHelper = Application_Model_DateHelper::ConvertToLocalDateTime($show->getShowStart()); + $showEndDateHelper = Application_Model_DateHelper::ConvertToLocalDateTime($show->getShowEnd()); if ($epochNow < $showStartDateHelper->getTimestamp()) { @@ -461,7 +461,7 @@ class ScheduleController extends Zend_Controller_Action $i = 1; foreach ($rebroadcastsRelative as $rebroadcast){ $rebroadcastFormValues["add_show_rebroadcast_date_$i"] = $rebroadcast['day_offset']; - $rebroadcastFormValues["add_show_rebroadcast_time_$i"] = DateHelper::removeSecondsFromTime($rebroadcast['start_time']); + $rebroadcastFormValues["add_show_rebroadcast_time_$i"] = Application_Model_DateHelper::removeSecondsFromTime($rebroadcast['start_time']); $i++; } $formRebroadcast->populate($rebroadcastFormValues); @@ -471,7 +471,7 @@ class ScheduleController extends Zend_Controller_Action $i = 1; foreach ($rebroadcastsAbsolute as $rebroadcast){ $rebroadcastAbsoluteFormValues["add_show_rebroadcast_date_absolute_$i"] = $rebroadcast['start_date']; - $rebroadcastAbsoluteFormValues["add_show_rebroadcast_time_absolute_$i"] = DateHelper::removeSecondsFromTime($rebroadcast['start_time']); + $rebroadcastAbsoluteFormValues["add_show_rebroadcast_time_absolute_$i"] = Application_Model_DateHelper::removeSecondsFromTime($rebroadcast['start_time']); $i++; } $formAbsoluteRebroadcast->populate($rebroadcastAbsoluteFormValues); diff --git a/airtime_mvc/application/models/DateHelper.php b/airtime_mvc/application/models/DateHelper.php index 41068f319..63b71f26e 100644 --- a/airtime_mvc/application/models/DateHelper.php +++ b/airtime_mvc/application/models/DateHelper.php @@ -1,6 +1,6 @@ format("Y-m-d H:i:s"); $showEnds = $showEndDateTime->format("Y-m-d H:i:s"); @@ -61,7 +61,7 @@ class Application_Model_Nowplaying $startCutoff = 60; $endCutoff = 86400; //60*60*24 - seconds in a day } else { - $date = new DateHelper; + $date = new Application_Model_DateHelper; $time = $date->getTime(); $date->setDate($dateString." ".$time); $timeNow = $date->getUtcTimestamp(); @@ -81,8 +81,8 @@ class Application_Model_Nowplaying $showId = $si->getShowId(); $show = new Application_Model_Show($showId); - $showStartDateTime = DateHelper::ConvertToLocalDateTime($si->getShowStart()); - $showEndDateTime = DateHelper::ConvertToLocalDateTime($si->getShowEnd()); + $showStartDateTime = Application_Model_DateHelper::ConvertToLocalDateTime($si->getShowStart()); + $showEndDateTime = Application_Model_DateHelper::ConvertToLocalDateTime($si->getShowEnd()); //append show header row $data[] = self::CreateHeaderRow($show->getName(), $showStartDateTime->format("Y-m-d H:i:s"), $showEndDateTime->format("Y-m-d H:i:s")); diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index fffc5b13a..faccafcb7 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -143,7 +143,7 @@ class Application_Model_Schedule { global $CC_CONFIG; - $date = new DateHelper; + $date = new Application_Model_DateHelper; $timeNow = $date->getUtcTimestamp(); return array("env"=>APPLICATION_ENV, "schedulerTime"=>$timeNow, @@ -499,8 +499,8 @@ class Application_Model_Schedule { 'fade_in' => Application_Model_Schedule::WallTimeToMillisecs($item["fade_in"]), 'fade_out' => Application_Model_Schedule::WallTimeToMillisecs($item["fade_out"]), 'fade_cross' => 0, - 'cue_in' => DateHelper::CalculateLengthInSeconds($item["cue_in"]), - 'cue_out' => DateHelper::CalculateLengthInSeconds($item["cue_out"]), + 'cue_in' => Application_Model_DateHelper::CalculateLengthInSeconds($item["cue_in"]), + 'cue_out' => Application_Model_DateHelper::CalculateLengthInSeconds($item["cue_out"]), 'export_source' => 'scheduler', 'start' => $starts, 'end' => Application_Model_Schedule::AirtimeTimeToPypoTime($item["ends"]) diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 77f86953e..0c7afa4a5 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -137,7 +137,7 @@ class Application_Model_Show { $uncheckedDaysImploded = implode(",", $p_uncheckedDays); $showId = $this->getId(); - $date = new DateHelper; + $date = new Application_Model_DateHelper; $timestamp = $date->getTimestamp(); $sql = "DELETE FROM cc_show_instances" @@ -302,7 +302,7 @@ class Application_Model_Show { public function deleteAllInstances(){ global $CC_DBC; - $date = new DateHelper; + $date = new Application_Model_DateHelper; $timestamp = $date->getTimestamp(); $showId = $this->getId(); @@ -321,7 +321,7 @@ class Application_Model_Show { public function deleteAllRebroadcasts(){ global $CC_DBC; - $date = new DateHelper; + $date = new Application_Model_DateHelper; $timestamp = $date->getTimestamp(); $showId = $this->getId(); @@ -343,11 +343,11 @@ class Application_Model_Show { public function removeAllInstancesFromDate($p_date=null){ global $CC_DBC; - $date = new DateHelper; + $date = new Application_Model_DateHelper; $timestamp = $date->getTimestamp(); if(is_null($p_date)) { - $date = new DateHelper; + $date = new Application_Model_DateHelper; $p_date = $date->getDate(); } @@ -377,7 +377,7 @@ class Application_Model_Show { public function removeAllInstancesBeforeDate($p_date){ global $CC_DBC; - $date = new DateHelper; + $date = new Application_Model_DateHelper; $timestamp = $date->getTimestamp(); $showId = $this->getId(); @@ -481,7 +481,7 @@ class Application_Model_Show { * true if the StartDate is in the past, false otherwise */ public function isStartDateTimeInPast(){ - $date = new DateHelper; + $date = new Application_Model_DateHelper; $current_timestamp = $date->getTimestamp(); return ($current_timestamp > $this->getStartDate()." ".$this->getStartTime()); } @@ -495,7 +495,7 @@ class Application_Model_Show { public function getAllFutureInstanceIds(){ global $CC_DBC; - $date = new DateHelper; + $date = new Application_Model_DateHelper; $timestamp = $date->getTimestamp(); $showId = $this->getId(); @@ -517,7 +517,7 @@ class Application_Model_Show { global $CC_DBC; - $date = new DateHelper; + $date = new Application_Model_DateHelper; $timestamp = $date->getTimestamp(); $sql = "UPDATE cc_show_days " @@ -538,7 +538,7 @@ class Application_Model_Show { global $CC_DBC; - $date = new DateHelper; + $date = new Application_Model_DateHelper; $timestamp = $date->getTimestamp(); $sql = "UPDATE cc_show_days " @@ -955,7 +955,7 @@ class Application_Model_Show { $sql = "SELECT timestamp '{$start}' + interval '{$duration}'"; $end = $CC_DBC->GetOne($sql); - $date = new DateHelper(); + $date = new Application_Model_DateHelper(); $currentTimestamp = $date->getTimestamp(); $show = new Application_Model_Show($show_id); @@ -1028,7 +1028,7 @@ class Application_Model_Show { $rebroadcasts = $CC_DBC->GetAll($sql); $show = new Application_Model_Show($show_id); - $date = new DateHelper(); + $date = new Application_Model_DateHelper(); $currentTimestamp = $date->getTimestamp(); while(strtotime($next_date) <= strtotime($end_timestamp) && (strtotime($last_show) > strtotime($next_date) || is_null($last_show))) { From 685cc879519375a02d012e5998c8a598a2a17729 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 26 Sep 2011 15:32:56 -0400 Subject: [PATCH 07/16] CC-2833: Use ClassLoaders for PHP Files -temporarily reenable some files from being always loaded --- airtime_mvc/application/Bootstrap.php | 4 ++-- airtime_mvc/application/models/RabbitMq.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index fbb337a19..f42f172fc 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -16,10 +16,10 @@ require_once 'DB.php'; //require_once 'Playlist.php'; //require_once 'StoredFile.php'; //require_once 'Schedule.php'; -//require_once 'Preference.php'; +require_once 'Preference.php'; //require_once 'Shows.php'; //require_once 'User.php'; -//require_once 'RabbitMq.php'; +require_once 'RabbitMq.php'; //require_once 'DateHelper.php'; require_once __DIR__.'/controllers/plugins/RabbitMqPlugin.php'; diff --git a/airtime_mvc/application/models/RabbitMq.php b/airtime_mvc/application/models/RabbitMq.php index d5bbfbfba..65f03539a 100644 --- a/airtime_mvc/application/models/RabbitMq.php +++ b/airtime_mvc/application/models/RabbitMq.php @@ -1,7 +1,7 @@ Date: Mon, 26 Sep 2011 15:43:58 -0400 Subject: [PATCH 08/16] CC-2833: Use ClassLoaders for PHP Files --- airtime_mvc/application/Bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index f42f172fc..11c73d154 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -19,7 +19,7 @@ require_once 'DB.php'; require_once 'Preference.php'; //require_once 'Shows.php'; //require_once 'User.php'; -require_once 'RabbitMq.php'; +//require_once 'RabbitMq.php'; //require_once 'DateHelper.php'; require_once __DIR__.'/controllers/plugins/RabbitMqPlugin.php'; From df4bf9e1c7fa8655e162723fdfb5b091f766a438 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 26 Sep 2011 17:01:43 -0400 Subject: [PATCH 09/16] CC-2833: Use ClassLoaders for PHP Files --- airtime_mvc/application/Bootstrap.php | 9 --------- 1 file changed, 9 deletions(-) diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php index 11c73d154..8bf8d58aa 100644 --- a/airtime_mvc/application/Bootstrap.php +++ b/airtime_mvc/application/Bootstrap.php @@ -11,16 +11,7 @@ require_once __DIR__."/configs/constants.php"; require_once __DIR__."/configs/conf.php"; require_once 'DB.php'; -//require_once 'Soundcloud.php'; -//require_once 'MusicDir.php'; -//require_once 'Playlist.php'; -//require_once 'StoredFile.php'; -//require_once 'Schedule.php'; require_once 'Preference.php'; -//require_once 'Shows.php'; -//require_once 'User.php'; -//require_once 'RabbitMq.php'; -//require_once 'DateHelper.php'; require_once __DIR__.'/controllers/plugins/RabbitMqPlugin.php'; global $CC_CONFIG, $CC_DBC; From dffe6b33ace94d44a893b3ab26cda6206f118e45 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 26 Sep 2011 20:42:08 -0400 Subject: [PATCH 10/16] CC-2888: Create a monit file for each airtime component -missed some changes in the full-install --- install_full/ubuntu/airtime-full-install | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/install_full/ubuntu/airtime-full-install b/install_full/ubuntu/airtime-full-install index 1570b457c..d36ae4ab6 100755 --- a/install_full/ubuntu/airtime-full-install +++ b/install_full/ubuntu/airtime-full-install @@ -74,16 +74,14 @@ echo "4. Enable Monit" echo "----------------------------------------------------" cd /etc/default/ sed -i 's/startup=0/startup=1/g' monit -cp $SCRIPTPATH/../../python_apps/monit/airtime-monit.cfg /etc/monit/conf.d grep -q "include /etc/monit/conf.d" /etc/monit/monitrc RETVAL=$? if [ $RETVAL -ne 0 ] ; then + mkdir -p /etc/monit/conf.d echo "include /etc/monit/conf.d/*" >> /etc/monit/monitrc fi -service monit start - # Run Airtime Install echo "----------------------------------------------------" echo "5. Run Airtime Install" From d5ec44027fe5af1825ad2644964127c7de10b010 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 26 Sep 2011 23:45:58 -0400 Subject: [PATCH 11/16] -update airtime-nuke --- dev_tools/airtime-nuke.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev_tools/airtime-nuke.sh b/dev_tools/airtime-nuke.sh index 4e48eba1f..fde45d1dd 100755 --- a/dev_tools/airtime-nuke.sh +++ b/dev_tools/airtime-nuke.sh @@ -18,6 +18,8 @@ rm -rf "/var/tmp/airtime" rm -rf "/opt/pypo" rm -rf "/opt/recorder" rm -rf "/srv/airtime" +rm -rf "/etc/monit/conf.d/airtime-monit.cfg" +rm -rf /etc/monit/conf.d/monit-airtime-* echo "DROP DATABASE AIRTIME;" | su postgres -c psql echo "DROP LANGUAGE plpgsql;" | su postgres -c psql From fef0392e43fa8f16d7096b392e3034c50d325fff Mon Sep 17 00:00:00 2001 From: martin Date: Tue, 27 Sep 2011 13:31:02 -0400 Subject: [PATCH 12/16] CC-2724: Play Stream Icon + jPlayer popup styling -upgraded to jplayer 2.1 --- .../scripts/dashboard/stream-player.phtml | 72 +++++--- airtime_mvc/public/css/add-show.css | 9 +- .../public/css/images/airtime_logo_jp.png | Bin 0 -> 1957 bytes airtime_mvc/public/css/styles.css | 136 ++++++++++++--- .../public/js/airtime/dashboard/playlist.js | 2 +- airtime_mvc/public/js/jplayer/Jplayer.swf | Bin 7679 -> 8452 bytes .../public/js/jplayer/jquery.jplayer.min.js | 155 ++++++++++-------- .../js/jplayer/skin/jplayer.blue.monday.css | 105 ++++++++---- .../public/js/jplayer/skin/jplayer.png | Bin 0 -> 8046 bytes 9 files changed, 330 insertions(+), 149 deletions(-) create mode 100644 airtime_mvc/public/css/images/airtime_logo_jp.png create mode 100644 airtime_mvc/public/js/jplayer/skin/jplayer.png diff --git a/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml b/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml index dab53ad48..717072ddc 100644 --- a/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml +++ b/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml @@ -1,34 +1,52 @@ + diff --git a/airtime_mvc/public/css/add-show.css b/airtime_mvc/public/css/add-show.css index 96008facd..fbd1c6be5 100644 --- a/airtime_mvc/public/css/add-show.css +++ b/airtime_mvc/public/css/add-show.css @@ -51,7 +51,7 @@ margin: 0; padding: 4px 0; text-align: left; - min-width:100px; + min-width:103px; clear:left; } #schedule-add-show dt.big { @@ -94,7 +94,7 @@ label.wrapp-label input[type="checkbox"] { margin-right:5px; } #add_show_name-element .input_text { - width:99%; + /*width:99%;*/ } #schedule-add-show-overlap { @@ -113,12 +113,13 @@ label.wrapp-label input[type="checkbox"] { } #add_show_start_time, #add_show_end_time { - width: 60px; + width: 54px; margin-left:10px; } #add_show_end_date_no_repeat, #add_show_start_date { - width: 95px; + width: 89px; + } #add_show_duration { diff --git a/airtime_mvc/public/css/images/airtime_logo_jp.png b/airtime_mvc/public/css/images/airtime_logo_jp.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc1ff866533221a2699a5c9a4ac5adb39896eeb GIT binary patch literal 1957 zcmaJ?dr%X19*-C`Vmuihjs);FONkgE*(4-^lz@i|KxBlK7;2QEXwE_x6EaZ@HD#g(K$OG< zQW3od%{RS4OQiyd-h?UjYFHu`f;gXnAQ}Oe!{b095I2e&#AUIfph#X6UlbG_!G~B; zY&Ki8z!jtFJRPjZ7Py+*5h6`;-)TopTi;$h+YzLgv@;Z>GoT>V~|U7 zsQc*5-%fEnx*CCmh-xRjfxb_6q~0lJ+5T)oqU{sssbrUt?%my~OE&Zc*xI%saE`kA zaob|0g-KV0rU?$X=PKYF2LP4uBvU)vjooljZ@e)(YqqrX;l`;=vM z043qkg=Lq+r$=*+?xy*>_U?1xnPp9#k36rPuoP8%R&V{&p{rrTmwxR2(rsB_bY&AX zwBvD)3u(7@Qx@Xt6q{_kd$vg@qfYcd=@e(r3_rj6AFE=*LOjRLH>HDDJd$qhql$*6 zh1hnBm0qi`W)!ED$$f5CiQYdKa;4`S9oO3S#m`3&Ln(Nqszjy&>PiJ4CJ@gxXN!NX zldmY(VjUmM4K;o$xK|h`rg{zjn=m=-e&h4$czZQ1r9)cmpS^TsW=o27MT7=w)Qwdn zSjhpKw_jBZ$ctyoxev)_iXQt7zJ%IsZ4bPqiV1g`m424?T5+H0KjAi4T=&#^ro2J> z%%a*$-{yzNuI2V(&$Xw?*?lRw$-XDm%CO@o#jR}Q;+@~SIfgA00KsrxE^@0W?6IT4w|0SJa~p&dEbP6w6gwMB24NZHCc-}jW5Z* zG&_YdI6KVCm5|L^(sy7at110=AL>in-A3cd2_uu)S$ymM8@J?LpZ9W|kM-Xo78QL7 z9h`aguh@u?YaTU{iD2z!1@HS8Rd?DWn?c0T{7oY=5=!jvqR&e|w!Nz8=pC;D*-r}7 zyldoMNX*T)zRTvVmUFb_^@mQU&?G_g>C~F|mpwRD4S5A-jbo#pOL|)ByUYhxAY$#sXYF}gP?BkSh zDJQL&ll~oRH~i2{-8z2$=qZnagWvA-ogz~o-Au2ZcsjM`>nH3+s^xg@kk91GIh)Mh z^@wV$)NYw9WR3o{R%YF9zhL-r)4Bb)c?XF>kVm$~?Ma}&MeQ3L? z@n0YLsVcLHwlj&u*B*oqnB}M7z`4U~gZUvvkR&aF3b2b*RTYaUEgk WBIxRROy1%6aY~}%#9u|GANUWT;srqf literal 0 HcmV?d00001 diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index db6111c4d..6cd9305f6 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -456,7 +456,7 @@ dl.inline-list dd { background-color: #95d5f7 !important; } -.datatable tr td:first-child, .datatable tr th:first-child, .datatable tr th.ui-state-default:first-child, tr td:first-child, tr th:first-child { +.datatable tr td:first-child, .datatable tr th:first-child, .datatable tr th.ui-state-default:first-child { border-left-width:0 !important; } .ui-widget-header + .datatable { @@ -1057,7 +1057,7 @@ h2#scheduled_playlist_name span { } .stream-setting-content dd.block-display { - width: 60%; + /*width: 60%;*/ } .simple-formblock.padded-strong { @@ -1566,9 +1566,6 @@ div.success{ background:url(images/icon_soundcloud.png) no-repeat 0 0; width:21px; } -.small-icon.sc-error { - background:url(images/icon_soundcloud_error2.png) no-repeat 0 0; -} .small-icon.progress { background:url(images/upload-icon.gif) no-repeat; background-color:black; @@ -1658,8 +1655,10 @@ dd.radio-inline-list, .preferences dd.radio-inline-list, .stream-config dd.radio .preferences dd.block-display .input_select, .stream-config dd.block-display .input_select { width: 100%; } -.preferences dd.block-display .input_text_area, .preferences dd.block-display .input_text { - width: 99.5%; +.preferences dd.block-display .input_text_area, .preferences dd.block-display .input_text +.stream-config dd.block-display .input_text_area, .stream-config dd.block-display .input_text, +.stream-config dd.block-display input[type="text"], .stream-config dd.block-display input[type="password"] { + width: 98.5%; } .preferences dd#SoundCloudTags-element.block-display .input_text_area { @@ -1935,12 +1934,13 @@ dd .info-text-small { line-height:140%; } -.stream-config dd input { - width:300px; +.stream-config dd input[type="text"] { + /*width:98.5%;*/ + min-width:152px; } .stream-config dd input[id$=port] { - width:160px; + width:152px; } dt.block-display.info-block { @@ -1979,7 +1979,7 @@ dt.block-display.info-block { } .stream-config dt.block-display, .stream-config dd.block-display { - float: left; + /*float: left;*/ } .collapsible-header-disabled { cursor:default; @@ -2049,8 +2049,7 @@ dt.block-display.info-block { table { border-color: #5b5b5b; border-style: solid; - border-width: 2px 1px 1px 1px; - background-color: #D8D8D8; + border-width: 0; } tbody tr th { color: #000000; @@ -2067,7 +2066,7 @@ tbody tr th { } thead tr th { color: #FFFFFF; - font-size: 13px; + font-size: 12px; padding: 5px 5px; border-color:#CCCCCC; background-color: #6e6e6e; @@ -2079,8 +2078,8 @@ thead tr th { tr td { border-color: #b1b1b1; border-style: solid; - border-width: 1px 0 0 1px; - font-size: 13px; + border-width: 0; + font-size: 12px; padding: 5px 5px; } tfoot tr td, tfoot tr th { @@ -2101,13 +2100,21 @@ tfoot tr th { /*---//////////////////// STATUS TABLE ////////////////////---*/ - -.statustable tr td { +.statustable { + background-color: #D8D8D8; + border-width: 2px 1px 1px; +} +.statustable tr td, .statustable tr th { text-align:center; vertical-align:text-top; + font-size:13px; +} +.statustable tr td { + border-width: 1px 0 0 1px; } .statustable tr td:first-child, .statustable tr th:first-child { text-align:left; + border-left-width: 0 !important; } .checked-icon { width:100%; @@ -2140,7 +2147,7 @@ tfoot tr th { -moz-border-radius: 4px; font-size:13px; } -.big { +.statustable .big { width:120px; height:10px; background:#444444; @@ -2195,3 +2202,94 @@ tfoot tr th { border:none; margin:0; } + +/*---//////////////////// TRIAL BOX HEADER ////////////////////---*/ + +.trial-box { + width:142px; + height:38px; + display:block; + position:absolute; + right:20px; + bottom:10px; + background-color:#222; + background-color:rgba(0, 0, 0, 0.7); + z-index:100; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + color:#FFF; + font-size:11px; + padding:7px; +} +.trial-box p { + padding:0 0 3px 0; + margin:0 0 5px 0; + float:left; +} +.trial-box-button a { + width:92px; + height:14px; + display:block; + padding: 1px 3px; + -moz-border-radius: 1px; + -webkit-border-radius: 1px; + border-radius: 1px; + text-transform:uppercase; + text-align:center; + font-family:Arial, Helvetica, sans-serif; + font-weight:bold; + text-decoration:none; + color:#FFFFFF; + background-color:#ff5d1a; + background: -moz-linear-gradient(top, #ff5d1a 0, #dd4202 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #ff5d1a), color-stop(100%, #dd4202)); + box-shadow: rgba(248, 248, 248, 0.4) 0 1px 1px inset; + -moz-box-shadow: rgba(248, 248, 248, 0.4) 0 1px 1px inset; + -webkit-box-shadow: rgba(248, 248, 248, 0.4) 0 1px 1px inset; + float:left; +} +.trial-box-button a:hover { + background-color:#dd4202; + background: -moz-linear-gradient(top, #dd4202 0, #ff5d1a 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #dd4202), color-stop(100%, #ff5d1a)); + box-shadow: rgba(248, 248, 248, 0.4) 0 1px 1px inset; + -moz-box-shadow: rgba(248, 248, 248, 0.4) 0 1px 1px inset; + -webkit-box-shadow: rgba(248, 248, 248, 0.4) 0 1px 1px inset; +} +.trial-box-calendar { + float:right; + text-align:center; + font-weight:bold; +} +.trial-box-calendar-white { + font-size:18px; + color:#ff5d1a; + background:#FFF; + width:36px; + height:22px; + display:block; + -webkit-border-top-right-radius: 1px; + -moz-border-radius-topright: 1px; + -webkit-border-top-left-radius: 1px; + -moz-border-radius-topleft: 1px; +} +.trial-box-calendar-gray { + width:36px; + height:14px; + display:block; + color:#FFF; + font-size:11px; + padding:1px 0; + text-transform:uppercase; + background-color:#676767; + background: -moz-linear-gradient(top, #7f7f7f 0, #555555 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #7f7f7f), color-stop(100%, #555555)); + -webkit-border-bottom-right-radius: 1px; + -moz-border-radius-bottomright: 1px; + -webkit-border-bottom-left-radius: 1px; + -moz-border-radius-bottomleft: 1px; + box-shadow: rgba(0, 0, 0, 0.4) 0 2px 1px inset; + -moz-box-shadow: rgba(0, 0, 0, 0.4) 0 2px 2px inset; + -webkit-box-shadow: rgba(0, 0, 0, 0.4) 0 2px 2px inset; +} \ No newline at end of file diff --git a/airtime_mvc/public/js/airtime/dashboard/playlist.js b/airtime_mvc/public/js/airtime/dashboard/playlist.js index a740a9227..be91be286 100644 --- a/airtime_mvc/public/js/airtime/dashboard/playlist.js +++ b/airtime_mvc/public/js/airtime/dashboard/playlist.js @@ -259,7 +259,7 @@ function init() { setupQtip(); $('#on-air-info').click(function() { - newwindow=window.open("Dashboard/stream-player", 'name', 'height=200,width=450'); + newwindow=window.open("Dashboard/stream-player", 'name', 'width=380,height=168'); if (window.focus) {newwindow.focus()} return false; }); diff --git a/airtime_mvc/public/js/jplayer/Jplayer.swf b/airtime_mvc/public/js/jplayer/Jplayer.swf index 9487f49b5a6cacf53f320a41c21f94d1cd35feb1..4d50c86ae1faf32a43ff61906129cb15f80a6b49 100644 GIT binary patch literal 8452 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 literal 7679 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 tpEwp3y8olRx)HX3>%G!>fvepFu0cZU';f[1]='';f[2]='';f[3]='';f[4]='';b=document.createElement(d);for(d=0;d0?100*d/this.status.duration:0;if(typeof a.seekable==="object"&&a.seekable.length>0){e=this.status.duration>0?100*a.seekable.end(a.seekable.length-1)/this.status.duration:100;g=100*a.currentTime/a.seekable.end(a.seekable.length-1)}else{e=100;g=f}if(b)f=g=d=0;this.status.seekPercent=e;this.status.currentPercentRelative=g;this.status.currentPercentAbsolute=f;this.status.currentTime=d},_resetStatus:function(){this.status=c.extend({},this.status,c.jPlayer.prototype.status)}, -_trigger:function(a,b,d){a=c.Event(a);a.jPlayer={};a.jPlayer.version=c.extend({},this.version);a.jPlayer.status=c.extend(true,{},this.status);a.jPlayer.html=c.extend(true,{},this.html);a.jPlayer.flash=c.extend(true,{},this.flash);if(b)a.jPlayer.error=c.extend({},b);if(d)a.jPlayer.warning=c.extend({},d);this.element.trigger(a)},jPlayerFlashEvent:function(a,b){if(a===c.jPlayer.event.ready&&!this.internal.ready){this.internal.ready=true;this.version.flash=b.version;this.version.needFlash!==this.version.flash&& -this._error({type:c.jPlayer.error.VERSION,context:this.version.flash,message:c.jPlayer.errorMsg.VERSION+this.version.flash,hint:c.jPlayer.errorHint.VERSION});this._trigger(a)}if(this.flash.gate)switch(a){case c.jPlayer.event.progress:this._getFlashStatus(b);this._updateInterface();this._trigger(a);break;case c.jPlayer.event.timeupdate:this._getFlashStatus(b);this._updateInterface();this._trigger(a);break;case c.jPlayer.event.play:this._seeked();this._updateButtons(true);this._trigger(a);break;case c.jPlayer.event.pause:this._updateButtons(false); -this._trigger(a);break;case c.jPlayer.event.ended:this._updateButtons(false);this._trigger(a);break;case c.jPlayer.event.error:this.status.waitForLoad=true;this.status.waitForPlay=true;this.status.video&&this.internal.flash.jq.css({width:"0px",height:"0px"});this._validString(this.status.media.poster)&&this.internal.poster.jq.show();this.css.jq.videoPlay.length&&this.css.jq.videoPlay.show();this.status.video?this._flash_setVideo(this.status.media):this._flash_setAudio(this.status.media);this._error({type:c.jPlayer.error.URL, -context:b.src,message:c.jPlayer.errorMsg.URL,hint:c.jPlayer.errorHint.URL});break;case c.jPlayer.event.seeking:this._seeking();this._trigger(a);break;case c.jPlayer.event.seeked:this._seeked();this._trigger(a);break;default:this._trigger(a)}return false},_getFlashStatus:function(a){this.status.seekPercent=a.seekPercent;this.status.currentPercentRelative=a.currentPercentRelative;this.status.currentPercentAbsolute=a.currentPercentAbsolute;this.status.currentTime=a.currentTime;this.status.duration=a.duration}, -_updateButtons:function(a){this.status.paused=!a;if(this.css.jq.play.length&&this.css.jq.pause.length)if(a){this.css.jq.play.hide();this.css.jq.pause.show()}else{this.css.jq.play.show();this.css.jq.pause.hide()}},_updateInterface:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.width(this.status.seekPercent+"%");this.css.jq.playBar.length&&this.css.jq.playBar.width(this.status.currentPercentRelative+"%");this.css.jq.currentTime.length&&this.css.jq.currentTime.text(c.jPlayer.convertTime(this.status.currentTime)); -this.css.jq.duration.length&&this.css.jq.duration.text(c.jPlayer.convertTime(this.status.duration))},_seeking:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.addClass("jp-seeking-bg")},_seeked:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.removeClass("jp-seeking-bg")},setMedia:function(a){var b=this;this._seeked();clearTimeout(this.internal.htmlDlyCmdId);var d=this.html.audio.gate,f=this.html.video.gate,e=false;c.each(this.formats,function(g,i){var j=b.format[i].media==="video"; -c.each(b.solutions,function(n,k){if(b[k].support[i]&&b._validString(a[i])){var l=k==="html";if(j)if(l){b.html.audio.gate=false;b.html.video.gate=true;b.flash.gate=false}else{b.html.audio.gate=false;b.html.video.gate=false;b.flash.gate=true}else if(l){b.html.audio.gate=true;b.html.video.gate=false;b.flash.gate=false}else{b.html.audio.gate=false;b.html.video.gate=false;b.flash.gate=true}if(b.flash.active||b.html.active&&b.flash.gate||d===b.html.audio.gate&&f===b.html.video.gate)b.clearMedia();else if(d!== -b.html.audio.gate&&f!==b.html.video.gate){b._html_pause();b.status.video&&b.internal.video.jq.css({width:"0px",height:"0px"});b._resetStatus()}if(j){if(l){b._html_setVideo(a);b.html.active=true;b.flash.active=false}else{b._flash_setVideo(a);b.html.active=false;b.flash.active=true}b.css.jq.videoPlay.length&&b.css.jq.videoPlay.show();b.status.video=true}else{if(l){b._html_setAudio(a);b.html.active=true;b.flash.active=false}else{b._flash_setAudio(a);b.html.active=false;b.flash.active=true}b.css.jq.videoPlay.length&& -b.css.jq.videoPlay.hide();b.status.video=false}e=true;return false}});if(e)return false});if(e){if(this._validString(a.poster))if(this.htmlElement.poster.src!==a.poster)this.htmlElement.poster.src=a.poster;else this.internal.poster.jq.show();else this.internal.poster.jq.hide();this.status.srcSet=true;this.status.media=c.extend({},a);this._updateButtons(false);this._updateInterface()}else{this.status.srcSet&&!this.status.waitForPlay&&this.pause();this.html.audio.gate=false;this.html.video.gate=false; -this.flash.gate=false;this.html.active=false;this.flash.active=false;this._resetStatus();this._updateInterface();this._updateButtons(false);this.internal.poster.jq.hide();this.html.used&&this.require.video&&this.internal.video.jq.css({width:"0px",height:"0px"});this.flash.used&&this.internal.flash.jq.css({width:"0px",height:"0px"});this._error({type:c.jPlayer.error.NO_SUPPORT,context:"{supplied:'"+this.options.supplied+"'}",message:c.jPlayer.errorMsg.NO_SUPPORT,hint:c.jPlayer.errorHint.NO_SUPPORT})}}, -clearMedia:function(){this._resetStatus();this._updateButtons(false);this.internal.poster.jq.hide();clearTimeout(this.internal.htmlDlyCmdId);if(this.html.active)this._html_clearMedia();else this.flash.active&&this._flash_clearMedia()},load:function(){if(this.status.srcSet)if(this.html.active)this._html_load();else this.flash.active&&this._flash_load();else this._urlNotSetError("load")},play:function(a){a=typeof a==="number"?a:NaN;if(this.status.srcSet)if(this.html.active)this._html_play(a);else this.flash.active&& -this._flash_play(a);else this._urlNotSetError("play")},videoPlay:function(){this.play()},pause:function(a){a=typeof a==="number"?a:NaN;if(this.status.srcSet)if(this.html.active)this._html_pause(a);else this.flash.active&&this._flash_pause(a);else this._urlNotSetError("pause")},pauseOthers:function(){var a=this;c.each(this.instances,function(b,d){a.element!==d&&d.data("jPlayer").status.srcSet&&d.jPlayer("pause")})},stop:function(){if(this.status.srcSet)if(this.html.active)this._html_pause(0);else this.flash.active&& -this._flash_pause(0);else this._urlNotSetError("stop")},playHead:function(a){a=this._limitValue(a,0,100);if(this.status.srcSet)if(this.html.active)this._html_playHead(a);else this.flash.active&&this._flash_playHead(a);else this._urlNotSetError("playHead")},mute:function(){this.status.muted=true;this.html.used&&this._html_mute(true);this.flash.used&&this._flash_mute(true);this._updateMute(true);this._updateVolume(0);this._trigger(c.jPlayer.event.volumechange)},unmute:function(){this.status.muted=false; -this.html.used&&this._html_mute(false);this.flash.used&&this._flash_mute(false);this._updateMute(false);this._updateVolume(this.status.volume);this._trigger(c.jPlayer.event.volumechange)},_updateMute:function(a){if(this.css.jq.mute.length&&this.css.jq.unmute.length)if(a){this.css.jq.mute.hide();this.css.jq.unmute.show()}else{this.css.jq.mute.show();this.css.jq.unmute.hide()}},volume:function(a){a=this._limitValue(a,0,1);this.status.volume=a;this.html.used&&this._html_volume(a);this.flash.used&&this._flash_volume(a); -this.status.muted||this._updateVolume(a);this._trigger(c.jPlayer.event.volumechange)},volumeBar:function(a){if(!this.status.muted&&this.css.jq.volumeBar){var b=this.css.jq.volumeBar.offset();a=a.pageX-b.left;b=this.css.jq.volumeBar.width();this.volume(a/b)}},volumeBarValue:function(a){this.volumeBar(a)},_updateVolume:function(a){this.css.jq.volumeBarValue.length&&this.css.jq.volumeBarValue.width(a*100+"%")},_volumeFix:function(a){var b=0.0010*Math.random();return a+(a<0.5?b:-b)},_cssSelectorAncestor:function(a, -b){this.options.cssSelectorAncestor=a;b&&c.each(this.options.cssSelector,function(d,f){self._cssSelector(d,f)})},_cssSelector:function(a,b){var d=this;if(typeof b==="string")if(c.jPlayer.prototype.options.cssSelector[a]){this.css.jq[a]&&this.css.jq[a].length&&this.css.jq[a].unbind(".jPlayer");this.options.cssSelector[a]=b;this.css.cs[a]=this.options.cssSelectorAncestor+" "+b;this.css.jq[a]=b?c(this.css.cs[a]):[];this.css.jq[a].length&&this.css.jq[a].bind("click.jPlayer",function(f){d[a](f);c(this).blur(); -return false});b&&this.css.jq[a].length!==1&&this._warning({type:c.jPlayer.warning.CSS_SELECTOR_COUNT,context:this.css.cs[a],message:c.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.css.jq[a].length+" found for "+a+" method.",hint:c.jPlayer.warningHint.CSS_SELECTOR_COUNT})}else this._warning({type:c.jPlayer.warning.CSS_SELECTOR_METHOD,context:a,message:c.jPlayer.warningMsg.CSS_SELECTOR_METHOD,hint:c.jPlayer.warningHint.CSS_SELECTOR_METHOD});else this._warning({type:c.jPlayer.warning.CSS_SELECTOR_STRING, -context:b,message:c.jPlayer.warningMsg.CSS_SELECTOR_STRING,hint:c.jPlayer.warningHint.CSS_SELECTOR_STRING})},seekBar:function(a){if(this.css.jq.seekBar){var b=this.css.jq.seekBar.offset();a=a.pageX-b.left;b=this.css.jq.seekBar.width();this.playHead(100*a/b)}},playBar:function(a){this.seekBar(a)},currentTime:function(){},duration:function(){},option:function(a,b){var d=a;if(arguments.length===0)return c.extend(true,{},this.options);if(typeof a==="string"){var f=a.split(".");if(b===h){for(var e=c.extend(true, -{},this.options),g=0;g=9||this.htmlElement.media.load()}},_html_load:function(){if(this.status.waitForLoad){this.status.waitForLoad=false;this.htmlElement.media.src=this.status.src; -try{this.htmlElement.media.load()}catch(a){}}clearTimeout(this.internal.htmlDlyCmdId)},_html_play:function(a){var b=this;this._html_load();this.htmlElement.media.play();if(!isNaN(a))try{this.htmlElement.media.currentTime=a}catch(d){this.internal.htmlDlyCmdId=setTimeout(function(){b.play(a)},100);return}this._html_checkWaitForPlay()},_html_pause:function(a){var b=this;a>0?this._html_load():clearTimeout(this.internal.htmlDlyCmdId);this.htmlElement.media.pause();if(!isNaN(a))try{this.htmlElement.media.currentTime= -a}catch(d){this.internal.htmlDlyCmdId=setTimeout(function(){b.pause(a)},100);return}a>0&&this._html_checkWaitForPlay()},_html_playHead:function(a){var b=this;this._html_load();try{if(typeof this.htmlElement.media.seekable==="object"&&this.htmlElement.media.seekable.length>0)this.htmlElement.media.currentTime=a*this.htmlElement.media.seekable.end(this.htmlElement.media.seekable.length-1)/100;else if(this.htmlElement.media.duration>0&&!isNaN(this.htmlElement.media.duration))this.htmlElement.media.currentTime= -a*this.htmlElement.media.duration/100;else throw"e";}catch(d){this.internal.htmlDlyCmdId=setTimeout(function(){b.playHead(a)},100);return}this.status.waitForLoad||this._html_checkWaitForPlay()},_html_checkWaitForPlay:function(){if(this.status.waitForPlay){this.status.waitForPlay=false;this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide();if(this.status.video){this.internal.poster.jq.hide();this.internal.video.jq.css({width:this.status.width,height:this.status.height})}}},_html_volume:function(a){if(this.html.audio.available)this.htmlElement.audio.volume= -a;if(this.html.video.available)this.htmlElement.video.volume=a},_html_mute:function(a){if(this.html.audio.available)this.htmlElement.audio.muted=a;if(this.html.video.available)this.htmlElement.video.muted=a},_flash_setAudio:function(a){var b=this;try{c.each(this.formats,function(f,e){if(b.flash.support[e]&&a[e]){switch(e){case "m4a":b._getMovie().fl_setAudio_m4a(a[e]);break;case "mp3":b._getMovie().fl_setAudio_mp3(a[e])}b.status.src=a[e];b.status.format[e]=true;b.status.formatType=e;return false}}); -if(this.options.preload==="auto"){this._flash_load();this.status.waitForLoad=false}}catch(d){this._flashError(d)}},_flash_setVideo:function(a){var b=this;try{c.each(this.formats,function(f,e){if(b.flash.support[e]&&a[e]){switch(e){case "m4v":b._getMovie().fl_setVideo_m4v(a[e])}b.status.src=a[e];b.status.format[e]=true;b.status.formatType=e;return false}});if(this.options.preload==="auto"){this._flash_load();this.status.waitForLoad=false}}catch(d){this._flashError(d)}},_flash_clearMedia:function(){this.internal.flash.jq.css({width:"0px", -height:"0px"});try{this._getMovie().fl_clearMedia()}catch(a){this._flashError(a)}},_flash_load:function(){try{this._getMovie().fl_load()}catch(a){this._flashError(a)}this.status.waitForLoad=false},_flash_play:function(a){try{this._getMovie().fl_play(a)}catch(b){this._flashError(b)}this.status.waitForLoad=false;this._flash_checkWaitForPlay()},_flash_pause:function(a){try{this._getMovie().fl_pause(a)}catch(b){this._flashError(b)}if(a>0){this.status.waitForLoad=false;this._flash_checkWaitForPlay()}}, -_flash_playHead:function(a){try{this._getMovie().fl_play_head(a)}catch(b){this._flashError(b)}this.status.waitForLoad||this._flash_checkWaitForPlay()},_flash_checkWaitForPlay:function(){if(this.status.waitForPlay){this.status.waitForPlay=false;this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide();if(this.status.video){this.internal.poster.jq.hide();this.internal.flash.jq.css({width:this.status.width,height:this.status.height})}}},_flash_volume:function(a){try{this._getMovie().fl_volume(a)}catch(b){this._flashError(b)}}, -_flash_mute:function(a){try{this._getMovie().fl_mute(a)}catch(b){this._flashError(b)}},_getMovie:function(){return document[this.internal.flash.id]},_checkForFlash:function(a){var b=false,d;if(window.ActiveXObject)try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+a);b=true}catch(f){}else if(navigator.plugins&&navigator.mimeTypes.length>0)if(d=navigator.plugins["Shockwave Flash"])if(navigator.plugins["Shockwave Flash"].description.replace(/.*\s(\d+\.\d+).*/,"$1")>=a)b=true;return c.browser.msie&& -Number(c.browser.version)>=9?false:b},_validString:function(a){return a&&typeof a==="string"},_limitValue:function(a,b,d){return ad?d:a},_urlNotSetError:function(a){this._error({type:c.jPlayer.error.URL_NOT_SET,context:a,message:c.jPlayer.errorMsg.URL_NOT_SET,hint:c.jPlayer.errorHint.URL_NOT_SET})},_flashError:function(a){this._error({type:c.jPlayer.error.FLASH,context:this.internal.flash.swf,message:c.jPlayer.errorMsg.FLASH+a.message,hint:c.jPlayer.errorHint.FLASH})},_error:function(a){this._trigger(c.jPlayer.event.error, -a);if(this.options.errorAlerts)this._alert("Error!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+a.context)},_warning:function(a){this._trigger(c.jPlayer.event.warning,h,a);if(this.options.errorAlerts)this._alert("Warning!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+a.context)},_alert:function(a){alert("jPlayer "+this.version.script+" : id='"+this.internal.self.id+"' : "+a)}};c.jPlayer.error={FLASH:"e_flash",NO_SOLUTION:"e_no_solution",NO_SUPPORT:"e_no_support", -URL:"e_url",URL_NOT_SET:"e_url_not_set",VERSION:"e_version"};c.jPlayer.errorMsg={FLASH:"jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: ",NO_SOLUTION:"No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used.",NO_SUPPORT:"It is not possible to play any media format provided in setMedia() on this browser using your current options.",URL:"Media URL could not be loaded.",URL_NOT_SET:"Attempt to issue media playback commands, while no media url is set.", -VERSION:"jPlayer "+c.jPlayer.prototype.version.script+" needs Jplayer.swf version "+c.jPlayer.prototype.version.needFlash+" but found "};c.jPlayer.errorHint={FLASH:"Check your swfPath option and that Jplayer.swf is there.",NO_SOLUTION:"Review the jPlayer options: support and supplied.",NO_SUPPORT:"Video or audio formats defined in the supplied option are missing.",URL:"Check media URL is valid.",URL_NOT_SET:"Use setMedia() to set the media URL.",VERSION:"Update jPlayer files."};c.jPlayer.warning= -{CSS_SELECTOR_COUNT:"e_css_selector_count",CSS_SELECTOR_METHOD:"e_css_selector_method",CSS_SELECTOR_STRING:"e_css_selector_string",OPTION_KEY:"e_option_key"};c.jPlayer.warningMsg={CSS_SELECTOR_COUNT:"The number of methodCssSelectors found did not equal one: ",CSS_SELECTOR_METHOD:"The methodName given in jPlayer('cssSelector') is not a valid jPlayer method.",CSS_SELECTOR_STRING:"The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty.",OPTION_KEY:"The option requested in jPlayer('option') is undefined."}; -c.jPlayer.warningHint={CSS_SELECTOR_COUNT:"Check your css selector and the ancestor.",CSS_SELECTOR_METHOD:"Check your method name.",CSS_SELECTOR_STRING:"Check your css selector is a string.",OPTION_KEY:"Check your option name."}})(jQuery); \ No newline at end of file +(function(b,f){b.fn.jPlayer=function(a){var c=typeof a==="string",d=Array.prototype.slice.call(arguments,1),e=this,a=!c&&d.length?b.extend.apply(null,[!0,a].concat(d)):a;if(c&&a.charAt(0)==="_")return e;c?this.each(function(){var c=b.data(this,"jPlayer"),h=c&&b.isFunction(c[a])?c[a].apply(c,d):c;if(h!==c&&h!==f)return e=h,!1}):this.each(function(){var c=b.data(this,"jPlayer");c?c.option(a||{}):b.data(this,"jPlayer",new b.jPlayer(a,this))});return e};b.jPlayer=function(a,c){if(arguments.length){this.element= +b(c);this.options=b.extend(!0,{},this.options,a);var d=this;this.element.bind("remove.jPlayer",function(){d.destroy()});this._init()}};b.jPlayer.emulateMethods="load play pause";b.jPlayer.emulateStatus="src readyState networkState currentTime duration paused ended playbackRate";b.jPlayer.emulateOptions="muted volume";b.jPlayer.reservedEvent="ready flashreset resize repeat error warning";b.jPlayer.event={ready:"jPlayer_ready",flashreset:"jPlayer_flashreset",resize:"jPlayer_resize",repeat:"jPlayer_repeat", +click:"jPlayer_click",error:"jPlayer_error",warning:"jPlayer_warning",loadstart:"jPlayer_loadstart",progress:"jPlayer_progress",suspend:"jPlayer_suspend",abort:"jPlayer_abort",emptied:"jPlayer_emptied",stalled:"jPlayer_stalled",play:"jPlayer_play",pause:"jPlayer_pause",loadedmetadata:"jPlayer_loadedmetadata",loadeddata:"jPlayer_loadeddata",waiting:"jPlayer_waiting",playing:"jPlayer_playing",canplay:"jPlayer_canplay",canplaythrough:"jPlayer_canplaythrough",seeking:"jPlayer_seeking",seeked:"jPlayer_seeked", +timeupdate:"jPlayer_timeupdate",ended:"jPlayer_ended",ratechange:"jPlayer_ratechange",durationchange:"jPlayer_durationchange",volumechange:"jPlayer_volumechange"};b.jPlayer.htmlEvent="loadstart,abort,emptied,stalled,loadedmetadata,loadeddata,canplay,canplaythrough,ratechange".split(",");b.jPlayer.pause=function(){b.each(b.jPlayer.prototype.instances,function(a,b){b.data("jPlayer").status.srcSet&&b.jPlayer("pause")})};b.jPlayer.timeFormat={showHour:!1,showMin:!0,showSec:!0,padHour:!1,padMin:!0,padSec:!0, +sepHour:":",sepMin:":",sepSec:""};b.jPlayer.convertTime=function(a){var c=new Date(a*1E3),d=c.getUTCHours(),a=c.getUTCMinutes(),c=c.getUTCSeconds(),d=b.jPlayer.timeFormat.padHour&&d<10?"0"+d:d,a=b.jPlayer.timeFormat.padMin&&a<10?"0"+a:a,c=b.jPlayer.timeFormat.padSec&&c<10?"0"+c:c;return(b.jPlayer.timeFormat.showHour?d+b.jPlayer.timeFormat.sepHour:"")+(b.jPlayer.timeFormat.showMin?a+b.jPlayer.timeFormat.sepMin:"")+(b.jPlayer.timeFormat.showSec?c+b.jPlayer.timeFormat.sepSec:"")};b.jPlayer.uaBrowser= +function(a){var a=a.toLowerCase(),b=/(opera)(?:.*version)?[ \/]([\w.]+)/,d=/(msie) ([\w.]+)/,e=/(mozilla)(?:.*? rv:([\w.]+))?/,a=/(webkit)[ \/]([\w.]+)/.exec(a)||b.exec(a)||d.exec(a)||a.indexOf("compatible")<0&&e.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}};b.jPlayer.uaPlatform=function(a){var b=a.toLowerCase(),d=/(android)/,e=/(mobile)/,a=/(ipad|iphone|ipod|android|blackberry|playbook|windows ce|webos)/.exec(b)||[],b=/(ipad|playbook)/.exec(b)||!e.exec(b)&&d.exec(b)||[];a[1]&&(a[1]=a[1].replace(/\s/g, +"_"));return{platform:a[1]||"",tablet:b[1]||""}};b.jPlayer.browser={};b.jPlayer.platform={};var i=b.jPlayer.uaBrowser(navigator.userAgent);if(i.browser)b.jPlayer.browser[i.browser]=!0,b.jPlayer.browser.version=i.version;i=b.jPlayer.uaPlatform(navigator.userAgent);if(i.platform)b.jPlayer.platform[i.platform]=!0,b.jPlayer.platform.mobile=!i.tablet,b.jPlayer.platform.tablet=!!i.tablet;b.jPlayer.prototype={count:0,version:{script:"2.1.0",needFlash:"2.1.0",flash:"unknown"},options:{swfPath:"js",solution:"html, flash", +supplied:"mp3",preload:"metadata",volume:0.8,muted:!1,wmode:"opaque",backgroundColor:"#000000",cssSelectorAncestor:"#jp_container_1",cssSelector:{videoPlay:".jp-video-play",play:".jp-play",pause:".jp-pause",stop:".jp-stop",seekBar:".jp-seek-bar",playBar:".jp-play-bar",mute:".jp-mute",unmute:".jp-unmute",volumeBar:".jp-volume-bar",volumeBarValue:".jp-volume-bar-value",volumeMax:".jp-volume-max",currentTime:".jp-current-time",duration:".jp-duration",fullScreen:".jp-full-screen",restoreScreen:".jp-restore-screen", +repeat:".jp-repeat",repeatOff:".jp-repeat-off",gui:".jp-gui",noSolution:".jp-no-solution"},fullScreen:!1,autohide:{restored:!1,full:!0,fadeIn:200,fadeOut:600,hold:1E3},loop:!1,repeat:function(a){a.jPlayer.options.loop?b(this).unbind(".jPlayerRepeat").bind(b.jPlayer.event.ended+".jPlayer.jPlayerRepeat",function(){b(this).jPlayer("play")}):b(this).unbind(".jPlayerRepeat")},nativeVideoControls:{},noFullScreen:{msie:/msie [0-6]/,ipad:/ipad.*?os [0-4]/,iphone:/iphone/,ipod:/ipod/,android_pad:/android [0-3](?!.*?mobile)/, +android_phone:/android.*?mobile/,blackberry:/blackberry/,windows_ce:/windows ce/,webos:/webos/},noVolume:{ipad:/ipad/,iphone:/iphone/,ipod:/ipod/,android_pad:/android(?!.*?mobile)/,android_phone:/android.*?mobile/,blackberry:/blackberry/,windows_ce:/windows ce/,webos:/webos/,playbook:/playbook/},verticalVolume:!1,idPrefix:"jp",noConflict:"jQuery",emulateHtml:!1,errorAlerts:!1,warningAlerts:!1},optionsAudio:{size:{width:"0px",height:"0px",cssClass:""},sizeFull:{width:"0px",height:"0px",cssClass:""}}, +optionsVideo:{size:{width:"480px",height:"270px",cssClass:"jp-video-270p"},sizeFull:{width:"100%",height:"100%",cssClass:"jp-video-full"}},instances:{},status:{src:"",media:{},paused:!0,format:{},formatType:"",waitForPlay:!0,waitForLoad:!0,srcSet:!1,video:!1,seekPercent:0,currentPercentRelative:0,currentPercentAbsolute:0,currentTime:0,duration:0,readyState:0,networkState:0,playbackRate:1,ended:0},internal:{ready:!1},solution:{html:!0,flash:!0},format:{mp3:{codec:'audio/mpeg; codecs="mp3"',flashCanPlay:!0, +media:"audio"},m4a:{codec:'audio/mp4; codecs="mp4a.40.2"',flashCanPlay:!0,media:"audio"},oga:{codec:'audio/ogg; codecs="vorbis"',flashCanPlay:!1,media:"audio"},wav:{codec:'audio/wav; codecs="1"',flashCanPlay:!1,media:"audio"},webma:{codec:'audio/webm; codecs="vorbis"',flashCanPlay:!1,media:"audio"},fla:{codec:"audio/x-flv",flashCanPlay:!0,media:"audio"},m4v:{codec:'video/mp4; codecs="avc1.42E01E, mp4a.40.2"',flashCanPlay:!0,media:"video"},ogv:{codec:'video/ogg; codecs="theora, vorbis"',flashCanPlay:!1, +media:"video"},webmv:{codec:'video/webm; codecs="vorbis, vp8"',flashCanPlay:!1,media:"video"},flv:{codec:"video/x-flv",flashCanPlay:!0,media:"video"}},_init:function(){var a=this;this.element.empty();this.status=b.extend({},this.status);this.internal=b.extend({},this.internal);this.internal.domNode=this.element.get(0);this.formats=[];this.solutions=[];this.require={};this.htmlElement={};this.html={};this.html.audio={};this.html.video={};this.flash={};this.css={};this.css.cs={};this.css.jq={};this.ancestorJq= +[];this.options.volume=this._limitValue(this.options.volume,0,1);b.each(this.options.supplied.toLowerCase().split(","),function(c,d){var e=d.replace(/^\s+|\s+$/g,"");if(a.format[e]){var f=!1;b.each(a.formats,function(a,b){if(e===b)return f=!0,!1});f||a.formats.push(e)}});b.each(this.options.solution.toLowerCase().split(","),function(c,d){var e=d.replace(/^\s+|\s+$/g,"");if(a.solution[e]){var f=!1;b.each(a.solutions,function(a,b){if(e===b)return f=!0,!1});f||a.solutions.push(e)}});this.internal.instance= +"jp_"+this.count;this.instances[this.internal.instance]=this.element;this.element.attr("id")||this.element.attr("id",this.options.idPrefix+"_jplayer_"+this.count);this.internal.self=b.extend({},{id:this.element.attr("id"),jq:this.element});this.internal.audio=b.extend({},{id:this.options.idPrefix+"_audio_"+this.count,jq:f});this.internal.video=b.extend({},{id:this.options.idPrefix+"_video_"+this.count,jq:f});this.internal.flash=b.extend({},{id:this.options.idPrefix+"_flash_"+this.count,jq:f,swf:this.options.swfPath+ +(this.options.swfPath.toLowerCase().slice(-4)!==".swf"?(this.options.swfPath&&this.options.swfPath.slice(-1)!=="/"?"/":"")+"Jplayer.swf":"")});this.internal.poster=b.extend({},{id:this.options.idPrefix+"_poster_"+this.count,jq:f});b.each(b.jPlayer.event,function(b,c){a.options[b]!==f&&(a.element.bind(c+".jPlayer",a.options[b]),a.options[b]=f)});this.require.audio=!1;this.require.video=!1;b.each(this.formats,function(b,c){a.require[a.format[c].media]=!0});this.options=this.require.video?b.extend(!0, +{},this.optionsVideo,this.options):b.extend(!0,{},this.optionsAudio,this.options);this._setSize();this.status.nativeVideoControls=this._uaBlocklist(this.options.nativeVideoControls);this.status.noFullScreen=this._uaBlocklist(this.options.noFullScreen);this.status.noVolume=this._uaBlocklist(this.options.noVolume);this._restrictNativeVideoControls();this.htmlElement.poster=document.createElement("img");this.htmlElement.poster.id=this.internal.poster.id;this.htmlElement.poster.onload=function(){(!a.status.video|| +a.status.waitForPlay)&&a.internal.poster.jq.show()};this.element.append(this.htmlElement.poster);this.internal.poster.jq=b("#"+this.internal.poster.id);this.internal.poster.jq.css({width:this.status.width,height:this.status.height});this.internal.poster.jq.hide();this.internal.poster.jq.bind("click.jPlayer",function(){a._trigger(b.jPlayer.event.click)});this.html.audio.available=!1;if(this.require.audio)this.htmlElement.audio=document.createElement("audio"),this.htmlElement.audio.id=this.internal.audio.id, +this.html.audio.available=!!this.htmlElement.audio.canPlayType&&this._testCanPlayType(this.htmlElement.audio);this.html.video.available=!1;if(this.require.video)this.htmlElement.video=document.createElement("video"),this.htmlElement.video.id=this.internal.video.id,this.html.video.available=!!this.htmlElement.video.canPlayType&&this._testCanPlayType(this.htmlElement.video);this.flash.available=this._checkForFlash(10);this.html.canPlay={};this.flash.canPlay={};b.each(this.formats,function(b,c){a.html.canPlay[c]= +a.html[a.format[c].media].available&&""!==a.htmlElement[a.format[c].media].canPlayType(a.format[c].codec);a.flash.canPlay[c]=a.format[c].flashCanPlay&&a.flash.available});this.html.desired=!1;this.flash.desired=!1;b.each(this.solutions,function(c,d){if(c===0)a[d].desired=!0;else{var e=!1,f=!1;b.each(a.formats,function(b,c){a[a.solutions[0]].canPlay[c]&&(a.format[c].media==="video"?f=!0:e=!0)});a[d].desired=a.require.audio&&!e||a.require.video&&!f}});this.html.support={};this.flash.support={};b.each(this.formats, +function(b,c){a.html.support[c]=a.html.canPlay[c]&&a.html.desired;a.flash.support[c]=a.flash.canPlay[c]&&a.flash.desired});this.html.used=!1;this.flash.used=!1;b.each(this.solutions,function(c,d){b.each(a.formats,function(b,c){if(a[d].support[c])return a[d].used=!0,!1})});this._resetActive();this._resetGate();this._cssSelectorAncestor(this.options.cssSelectorAncestor);!this.html.used&&!this.flash.used?(this._error({type:b.jPlayer.error.NO_SOLUTION,context:"{solution:'"+this.options.solution+"', supplied:'"+ +this.options.supplied+"'}",message:b.jPlayer.errorMsg.NO_SOLUTION,hint:b.jPlayer.errorHint.NO_SOLUTION}),this.css.jq.noSolution.length&&this.css.jq.noSolution.show()):this.css.jq.noSolution.length&&this.css.jq.noSolution.hide();if(this.flash.used){var c,d="jQuery="+encodeURI(this.options.noConflict)+"&id="+encodeURI(this.internal.self.id)+"&vol="+this.options.volume+"&muted="+this.options.muted;if(b.browser.msie&&Number(b.browser.version)<=8){d=['','','','',''];c=document.createElement('');for(var e=0;e0?100*d/this.status.duration:0;typeof a.seekable==="object"&&a.seekable.length>0?(g=this.status.duration>0?100*a.seekable.end(a.seekable.length-1)/this.status.duration:100,f=100*a.currentTime/a.seekable.end(a.seekable.length-1)):(g=100,f=e);b&&(e=f=d=0);this.status.seekPercent=g;this.status.currentPercentRelative=f;this.status.currentPercentAbsolute=e;this.status.currentTime=d;this.status.readyState=a.readyState;this.status.networkState=a.networkState;this.status.playbackRate= +a.playbackRate;this.status.ended=a.ended},_resetStatus:function(){this.status=b.extend({},this.status,b.jPlayer.prototype.status)},_trigger:function(a,c,d){a=b.Event(a);a.jPlayer={};a.jPlayer.version=b.extend({},this.version);a.jPlayer.options=b.extend(!0,{},this.options);a.jPlayer.status=b.extend(!0,{},this.status);a.jPlayer.html=b.extend(!0,{},this.html);a.jPlayer.flash=b.extend(!0,{},this.flash);if(c)a.jPlayer.error=b.extend({},c);if(d)a.jPlayer.warning=b.extend({},d);this.element.trigger(a)}, +jPlayerFlashEvent:function(a,c){if(a===b.jPlayer.event.ready)if(this.internal.ready){if(this.flash.gate){if(this.status.srcSet){var d=this.status.currentTime,e=this.status.paused;this.setMedia(this.status.media);d>0&&(e?this.pause(d):this.play(d))}this._trigger(b.jPlayer.event.flashreset)}}else this.internal.ready=!0,this.internal.flash.jq.css({width:"0px",height:"0px"}),this.version.flash=c.version,this.version.needFlash!==this.version.flash&&this._error({type:b.jPlayer.error.VERSION,context:this.version.flash, +message:b.jPlayer.errorMsg.VERSION+this.version.flash,hint:b.jPlayer.errorHint.VERSION}),this._trigger(b.jPlayer.event.repeat),this._trigger(a);if(this.flash.gate)switch(a){case b.jPlayer.event.progress:this._getFlashStatus(c);this._updateInterface();this._trigger(a);break;case b.jPlayer.event.timeupdate:this._getFlashStatus(c);this._updateInterface();this._trigger(a);break;case b.jPlayer.event.play:this._seeked();this._updateButtons(!0);this._trigger(a);break;case b.jPlayer.event.pause:this._updateButtons(!1); +this._trigger(a);break;case b.jPlayer.event.ended:this._updateButtons(!1);this._trigger(a);break;case b.jPlayer.event.click:this._trigger(a);break;case b.jPlayer.event.error:this.status.waitForLoad=!0;this.status.waitForPlay=!0;this.status.video&&this.internal.flash.jq.css({width:"0px",height:"0px"});this._validString(this.status.media.poster)&&this.internal.poster.jq.show();this.css.jq.videoPlay.length&&this.status.video&&this.css.jq.videoPlay.show();this.status.video?this._flash_setVideo(this.status.media): +this._flash_setAudio(this.status.media);this._updateButtons(!1);this._error({type:b.jPlayer.error.URL,context:c.src,message:b.jPlayer.errorMsg.URL,hint:b.jPlayer.errorHint.URL});break;case b.jPlayer.event.seeking:this._seeking();this._trigger(a);break;case b.jPlayer.event.seeked:this._seeked();this._trigger(a);break;case b.jPlayer.event.ready:break;default:this._trigger(a)}return!1},_getFlashStatus:function(a){this.status.seekPercent=a.seekPercent;this.status.currentPercentRelative=a.currentPercentRelative; +this.status.currentPercentAbsolute=a.currentPercentAbsolute;this.status.currentTime=a.currentTime;this.status.duration=a.duration;this.status.readyState=4;this.status.networkState=0;this.status.playbackRate=1;this.status.ended=!1},_updateButtons:function(a){if(a!==f)this.status.paused=!a,this.css.jq.play.length&&this.css.jq.pause.length&&(a?(this.css.jq.play.hide(),this.css.jq.pause.show()):(this.css.jq.play.show(),this.css.jq.pause.hide()));this.css.jq.restoreScreen.length&&this.css.jq.fullScreen.length&& +(this.status.noFullScreen?(this.css.jq.fullScreen.hide(),this.css.jq.restoreScreen.hide()):this.options.fullScreen?(this.css.jq.fullScreen.hide(),this.css.jq.restoreScreen.show()):(this.css.jq.fullScreen.show(),this.css.jq.restoreScreen.hide()));this.css.jq.repeat.length&&this.css.jq.repeatOff.length&&(this.options.loop?(this.css.jq.repeat.hide(),this.css.jq.repeatOff.show()):(this.css.jq.repeat.show(),this.css.jq.repeatOff.hide()))},_updateInterface:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.width(this.status.seekPercent+ +"%");this.css.jq.playBar.length&&this.css.jq.playBar.width(this.status.currentPercentRelative+"%");this.css.jq.currentTime.length&&this.css.jq.currentTime.text(b.jPlayer.convertTime(this.status.currentTime));this.css.jq.duration.length&&this.css.jq.duration.text(b.jPlayer.convertTime(this.status.duration))},_seeking:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.addClass("jp-seeking-bg")},_seeked:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.removeClass("jp-seeking-bg")}, +_resetGate:function(){this.html.audio.gate=!1;this.html.video.gate=!1;this.flash.gate=!1},_resetActive:function(){this.html.active=!1;this.flash.active=!1},setMedia:function(a){var c=this,d=!1,e=this.status.media.poster!==a.poster;this._resetMedia();this._resetGate();this._resetActive();b.each(this.formats,function(e,f){var i=c.format[f].media==="video";b.each(c.solutions,function(b,e){if(c[e].support[f]&&c._validString(a[f])){var g=e==="html";i?(g?(c.html.video.gate=!0,c._html_setVideo(a),c.html.active= +!0):(c.flash.gate=!0,c._flash_setVideo(a),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.show(),c.status.video=!0):(g?(c.html.audio.gate=!0,c._html_setAudio(a),c.html.active=!0):(c.flash.gate=!0,c._flash_setAudio(a),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.hide(),c.status.video=!1);d=!0;return!1}});if(d)return!1});if(d){if((!this.status.nativeVideoControls||!this.html.video.gate)&&this._validString(a.poster))e?this.htmlElement.poster.src=a.poster:this.internal.poster.jq.show(); +this.status.srcSet=!0;this.status.media=b.extend({},a);this._updateButtons(!1);this._updateInterface()}else this._error({type:b.jPlayer.error.NO_SUPPORT,context:"{supplied:'"+this.options.supplied+"'}",message:b.jPlayer.errorMsg.NO_SUPPORT,hint:b.jPlayer.errorHint.NO_SUPPORT})},_resetMedia:function(){this._resetStatus();this._updateButtons(!1);this._updateInterface();this._seeked();this.internal.poster.jq.hide();clearTimeout(this.internal.htmlDlyCmdId);this.html.active?this._html_resetMedia():this.flash.active&& +this._flash_resetMedia()},clearMedia:function(){this._resetMedia();this.html.active?this._html_clearMedia():this.flash.active&&this._flash_clearMedia();this._resetGate();this._resetActive()},load:function(){this.status.srcSet?this.html.active?this._html_load():this.flash.active&&this._flash_load():this._urlNotSetError("load")},play:function(a){a=typeof a==="number"?a:NaN;this.status.srcSet?this.html.active?this._html_play(a):this.flash.active&&this._flash_play(a):this._urlNotSetError("play")},videoPlay:function(){this.play()}, +pause:function(a){a=typeof a==="number"?a:NaN;this.status.srcSet?this.html.active?this._html_pause(a):this.flash.active&&this._flash_pause(a):this._urlNotSetError("pause")},pauseOthers:function(){var a=this;b.each(this.instances,function(b,d){a.element!==d&&d.data("jPlayer").status.srcSet&&d.jPlayer("pause")})},stop:function(){this.status.srcSet?this.html.active?this._html_pause(0):this.flash.active&&this._flash_pause(0):this._urlNotSetError("stop")},playHead:function(a){a=this._limitValue(a,0,100); +this.status.srcSet?this.html.active?this._html_playHead(a):this.flash.active&&this._flash_playHead(a):this._urlNotSetError("playHead")},_muted:function(a){this.options.muted=a;this.html.used&&this._html_mute(a);this.flash.used&&this._flash_mute(a);!this.html.video.gate&&!this.html.audio.gate&&(this._updateMute(a),this._updateVolume(this.options.volume),this._trigger(b.jPlayer.event.volumechange))},mute:function(a){a=a===f?!0:!!a;this._muted(a)},unmute:function(a){a=a===f?!0:!!a;this._muted(!a)},_updateMute:function(a){if(a=== +f)a=this.options.muted;this.css.jq.mute.length&&this.css.jq.unmute.length&&(this.status.noVolume?(this.css.jq.mute.hide(),this.css.jq.unmute.hide()):a?(this.css.jq.mute.hide(),this.css.jq.unmute.show()):(this.css.jq.mute.show(),this.css.jq.unmute.hide()))},volume:function(a){a=this._limitValue(a,0,1);this.options.volume=a;this.html.used&&this._html_volume(a);this.flash.used&&this._flash_volume(a);!this.html.video.gate&&!this.html.audio.gate&&(this._updateVolume(a),this._trigger(b.jPlayer.event.volumechange))}, +volumeBar:function(a){if(this.css.jq.volumeBar.length){var b=this.css.jq.volumeBar.offset(),d=a.pageX-b.left,e=this.css.jq.volumeBar.width(),a=this.css.jq.volumeBar.height()-a.pageY+b.top,b=this.css.jq.volumeBar.height();this.options.verticalVolume?this.volume(a/b):this.volume(d/e)}this.options.muted&&this._muted(!1)},volumeBarValue:function(a){this.volumeBar(a)},_updateVolume:function(a){if(a===f)a=this.options.volume;a=this.options.muted?0:a;this.status.noVolume?(this.css.jq.volumeBar.length&&this.css.jq.volumeBar.hide(), +this.css.jq.volumeBarValue.length&&this.css.jq.volumeBarValue.hide(),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.hide()):(this.css.jq.volumeBar.length&&this.css.jq.volumeBar.show(),this.css.jq.volumeBarValue.length&&(this.css.jq.volumeBarValue.show(),this.css.jq.volumeBarValue[this.options.verticalVolume?"height":"width"](a*100+"%")),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.show())},volumeMax:function(){this.volume(1);this.options.muted&&this._muted(!1)},_cssSelectorAncestor:function(a){var c= +this;this.options.cssSelectorAncestor=a;this._removeUiClass();this.ancestorJq=a?b(a):[];a&&this.ancestorJq.length!==1&&this._warning({type:b.jPlayer.warning.CSS_SELECTOR_COUNT,context:a,message:b.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.ancestorJq.length+" found for cssSelectorAncestor.",hint:b.jPlayer.warningHint.CSS_SELECTOR_COUNT});this._addUiClass();b.each(this.options.cssSelector,function(a,b){c._cssSelector(a,b)})},_cssSelector:function(a,c){var d=this;typeof c==="string"?b.jPlayer.prototype.options.cssSelector[a]? +(this.css.jq[a]&&this.css.jq[a].length&&this.css.jq[a].unbind(".jPlayer"),this.options.cssSelector[a]=c,this.css.cs[a]=this.options.cssSelectorAncestor+" "+c,this.css.jq[a]=c?b(this.css.cs[a]):[],this.css.jq[a].length&&this.css.jq[a].bind("click.jPlayer",function(c){d[a](c);b(this).blur();return!1}),c&&this.css.jq[a].length!==1&&this._warning({type:b.jPlayer.warning.CSS_SELECTOR_COUNT,context:this.css.cs[a],message:b.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.css.jq[a].length+" found for "+a+" method.", +hint:b.jPlayer.warningHint.CSS_SELECTOR_COUNT})):this._warning({type:b.jPlayer.warning.CSS_SELECTOR_METHOD,context:a,message:b.jPlayer.warningMsg.CSS_SELECTOR_METHOD,hint:b.jPlayer.warningHint.CSS_SELECTOR_METHOD}):this._warning({type:b.jPlayer.warning.CSS_SELECTOR_STRING,context:c,message:b.jPlayer.warningMsg.CSS_SELECTOR_STRING,hint:b.jPlayer.warningHint.CSS_SELECTOR_STRING})},seekBar:function(a){if(this.css.jq.seekBar){var b=this.css.jq.seekBar.offset(),a=a.pageX-b.left,b=this.css.jq.seekBar.width(); +this.playHead(100*a/b)}},playBar:function(a){this.seekBar(a)},repeat:function(){this._loop(!0)},repeatOff:function(){this._loop(!1)},_loop:function(a){if(this.options.loop!==a)this.options.loop=a,this._updateButtons(),this._trigger(b.jPlayer.event.repeat)},currentTime:function(){},duration:function(){},gui:function(){},noSolution:function(){},option:function(a,c){var d=a;if(arguments.length===0)return b.extend(!0,{},this.options);if(typeof a==="string"){var e=a.split(".");if(c===f){for(var d=b.extend(!0, +{},this.options),g=0;g0?this._html_load():clearTimeout(this.internal.htmlDlyCmdId);this.htmlElement.media.pause();if(!isNaN(a))try{this.htmlElement.media.currentTime=a}catch(d){this.internal.htmlDlyCmdId=setTimeout(function(){b.pause(a)},100);return}a>0&&this._html_checkWaitForPlay()},_html_playHead:function(a){var b=this;this._html_load();try{if(typeof this.htmlElement.media.seekable==="object"&&this.htmlElement.media.seekable.length>0)this.htmlElement.media.currentTime= +a*this.htmlElement.media.seekable.end(this.htmlElement.media.seekable.length-1)/100;else if(this.htmlElement.media.duration>0&&!isNaN(this.htmlElement.media.duration))this.htmlElement.media.currentTime=a*this.htmlElement.media.duration/100;else throw"e";}catch(d){this.internal.htmlDlyCmdId=setTimeout(function(){b.playHead(a)},100);return}this.status.waitForLoad||this._html_checkWaitForPlay()},_html_checkWaitForPlay:function(){if(this.status.waitForPlay)this.status.waitForPlay=!1,this.css.jq.videoPlay.length&& +this.css.jq.videoPlay.hide(),this.status.video&&(this.internal.poster.jq.hide(),this.internal.video.jq.css({width:this.status.width,height:this.status.height}))},_html_volume:function(a){if(this.html.audio.available)this.htmlElement.audio.volume=a;if(this.html.video.available)this.htmlElement.video.volume=a},_html_mute:function(a){if(this.html.audio.available)this.htmlElement.audio.muted=a;if(this.html.video.available)this.htmlElement.video.muted=a},_flash_setAudio:function(a){var c=this;try{if(b.each(this.formats, +function(b,d){if(c.flash.support[d]&&a[d]){switch(d){case "m4a":case "fla":c._getMovie().fl_setAudio_m4a(a[d]);break;case "mp3":c._getMovie().fl_setAudio_mp3(a[d])}c.status.src=a[d];c.status.format[d]=!0;c.status.formatType=d;return!1}}),this.options.preload==="auto")this._flash_load(),this.status.waitForLoad=!1}catch(d){this._flashError(d)}},_flash_setVideo:function(a){var c=this;try{if(b.each(this.formats,function(b,d){if(c.flash.support[d]&&a[d]){switch(d){case "m4v":case "flv":c._getMovie().fl_setVideo_m4v(a[d])}c.status.src= +a[d];c.status.format[d]=!0;c.status.formatType=d;return!1}}),this.options.preload==="auto")this._flash_load(),this.status.waitForLoad=!1}catch(d){this._flashError(d)}},_flash_resetMedia:function(){this.internal.flash.jq.css({width:"0px",height:"0px"});this._flash_pause(NaN)},_flash_clearMedia:function(){try{this._getMovie().fl_clearMedia()}catch(a){this._flashError(a)}},_flash_load:function(){try{this._getMovie().fl_load()}catch(a){this._flashError(a)}this.status.waitForLoad=!1},_flash_play:function(a){try{this._getMovie().fl_play(a)}catch(b){this._flashError(b)}this.status.waitForLoad= +!1;this._flash_checkWaitForPlay()},_flash_pause:function(a){try{this._getMovie().fl_pause(a)}catch(b){this._flashError(b)}if(a>0)this.status.waitForLoad=!1,this._flash_checkWaitForPlay()},_flash_playHead:function(a){try{this._getMovie().fl_play_head(a)}catch(b){this._flashError(b)}this.status.waitForLoad||this._flash_checkWaitForPlay()},_flash_checkWaitForPlay:function(){if(this.status.waitForPlay)this.status.waitForPlay=!1,this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(),this.status.video&& +(this.internal.poster.jq.hide(),this.internal.flash.jq.css({width:this.status.width,height:this.status.height}))},_flash_volume:function(a){try{this._getMovie().fl_volume(a)}catch(b){this._flashError(b)}},_flash_mute:function(a){try{this._getMovie().fl_mute(a)}catch(b){this._flashError(b)}},_getMovie:function(){return document[this.internal.flash.id]},_checkForFlash:function(a){var b=!1,d;if(window.ActiveXObject)try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+a),b=!0}catch(e){}else navigator.plugins&& +navigator.mimeTypes.length>0&&(d=navigator.plugins["Shockwave Flash"])&&navigator.plugins["Shockwave Flash"].description.replace(/.*\s(\d+\.\d+).*/,"$1")>=a&&(b=!0);return b},_validString:function(a){return a&&typeof a==="string"},_limitValue:function(a,b,d){return ad?d:a},_urlNotSetError:function(a){this._error({type:b.jPlayer.error.URL_NOT_SET,context:a,message:b.jPlayer.errorMsg.URL_NOT_SET,hint:b.jPlayer.errorHint.URL_NOT_SET})},_flashError:function(a){var c;c=this.internal.ready?"FLASH_DISABLED": +"FLASH";this._error({type:b.jPlayer.error[c],context:this.internal.flash.swf,message:b.jPlayer.errorMsg[c]+a.message,hint:b.jPlayer.errorHint[c]});this.internal.flash.jq.css({width:"1px",height:"1px"})},_error:function(a){this._trigger(b.jPlayer.event.error,a);this.options.errorAlerts&&this._alert("Error!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+a.context)},_warning:function(a){this._trigger(b.jPlayer.event.warning,f,a);this.options.warningAlerts&&this._alert("Warning!"+ +(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+a.context)},_alert:function(a){alert("jPlayer "+this.version.script+" : id='"+this.internal.self.id+"' : "+a)},_emulateHtmlBridge:function(){var a=this;b.each(b.jPlayer.emulateMethods.split(/\s+/g),function(b,d){a.internal.domNode[d]=function(b){a[d](b)}});b.each(b.jPlayer.event,function(c,d){var e=!0;b.each(b.jPlayer.reservedEvent.split(/\s+/g),function(a,b){if(b===c)return e=!1});e&&a.element.bind(d+".jPlayer.jPlayerHtml", +function(){a._emulateHtmlUpdate();var b=document.createEvent("Event");b.initEvent(c,!1,!0);a.internal.domNode.dispatchEvent(b)})})},_emulateHtmlUpdate:function(){var a=this;b.each(b.jPlayer.emulateStatus.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.status[d]});b.each(b.jPlayer.emulateOptions.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.options[d]})},_destroyHtmlBridge:function(){var a=this;this.element.unbind(".jPlayerHtml");b.each((b.jPlayer.emulateMethods+" "+b.jPlayer.emulateStatus+ +" "+b.jPlayer.emulateOptions).split(/\s+/g),function(b,d){delete a.internal.domNode[d]})}};b.jPlayer.error={FLASH:"e_flash",FLASH_DISABLED:"e_flash_disabled",NO_SOLUTION:"e_no_solution",NO_SUPPORT:"e_no_support",URL:"e_url",URL_NOT_SET:"e_url_not_set",VERSION:"e_version"};b.jPlayer.errorMsg={FLASH:"jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: ",FLASH_DISABLED:"jPlayer's Flash fallback has been disabled by the browser due to the CSS rules you have used. Details: ", +NO_SOLUTION:"No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used.",NO_SUPPORT:"It is not possible to play any media format provided in setMedia() on this browser using your current options.",URL:"Media URL could not be loaded.",URL_NOT_SET:"Attempt to issue media playback commands, while no media url is set.",VERSION:"jPlayer "+b.jPlayer.prototype.version.script+" needs Jplayer.swf version "+b.jPlayer.prototype.version.needFlash+" but found "};b.jPlayer.errorHint= +{FLASH:"Check your swfPath option and that Jplayer.swf is there.",FLASH_DISABLED:"Check that you have not display:none; the jPlayer entity or any ancestor.",NO_SOLUTION:"Review the jPlayer options: support and supplied.",NO_SUPPORT:"Video or audio formats defined in the supplied option are missing.",URL:"Check media URL is valid.",URL_NOT_SET:"Use setMedia() to set the media URL.",VERSION:"Update jPlayer files."};b.jPlayer.warning={CSS_SELECTOR_COUNT:"e_css_selector_count",CSS_SELECTOR_METHOD:"e_css_selector_method", +CSS_SELECTOR_STRING:"e_css_selector_string",OPTION_KEY:"e_option_key"};b.jPlayer.warningMsg={CSS_SELECTOR_COUNT:"The number of css selectors found did not equal one: ",CSS_SELECTOR_METHOD:"The methodName given in jPlayer('cssSelector') is not a valid jPlayer method.",CSS_SELECTOR_STRING:"The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty.",OPTION_KEY:"The option requested in jPlayer('option') is undefined."};b.jPlayer.warningHint={CSS_SELECTOR_COUNT:"Check your css selector and the ancestor.", +CSS_SELECTOR_METHOD:"Check your method name.",CSS_SELECTOR_STRING:"Check your css selector is a string.",OPTION_KEY:"Check your option name."}})(jQuery); \ No newline at end of file diff --git a/airtime_mvc/public/js/jplayer/skin/jplayer.blue.monday.css b/airtime_mvc/public/js/jplayer/skin/jplayer.blue.monday.css index 950b4ff64..981f3000f 100644 --- a/airtime_mvc/public/js/jplayer/skin/jplayer.blue.monday.css +++ b/airtime_mvc/public/js/jplayer/skin/jplayer.blue.monday.css @@ -14,6 +14,48 @@ * Date: 20th December 2010 */ +.jp-container { + background: #282828; + height: 100%; + margin: 0; + padding: 0; +} +.jp-logo { + width:380px; + height: 67px; + background:#282828 url(../../../css/images/airtime_logo_jp.png) no-repeat 120px 14px; + background: url(../../../css/images/airtime_logo_jp.png) no-repeat 120px 14px, -moz-radial-gradient(200px 0px, circle cover, rgba(70,70,70,1) 0%, rgba(40,40,40,1) 90%); + background: url(../../../css/images/airtime_logo_jp.png) no-repeat 120px 14px, -webkit-radial-gradient(170px 20px, rgba(70,70,70,1) 0%,rgba(40,40,40,1) 70%); + display:block; +} +.jp-stream { + height: 18px; + display:block; + border-top:1px solid #050505; + color:#ff5d1a; + font-size:12px; + padding:6px 4px 4px 10px; + background:#313131; + background: -moz-linear-gradient(top, #292929 0, #3a3a3a 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #292929), color-stop(100%, #3a3a3a)); + box-shadow: rgba(248,248,248,.3) 0px 1px 0px, rgba(0, 0, 0, 0.2) 0 2px 2px inset; + -moz-box-shadow: rgba(0, 0, 0, 0.7) 0 0 5px inset; + -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 0 5px inset; +} +.jp-stream-text, +.jp-stream form { + float:left; +} +.jp-stream form { + margin-left:10px; +} +.jp-stream label { + color:#ababab; + padding: 0 10px 0 0; + font-size:12px; +} +.jp-stream label input[type="radio"] { +} div.jp-audio, div.jp-video { @@ -28,7 +70,7 @@ div.jp-video { color: #666; } div.jp-audio { - width:180px; + /*width:180px;*/ } div.jp-video-270p { width:480px; @@ -38,14 +80,17 @@ div.jp-video-360p { } div.jp-interface { position: relative; - background-color:#eee; + background-color:#3D3D3D; + background: -moz-linear-gradient(top, #4e4e4e 0, #3a3a3a 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #4e4e4e), color-stop(100%, #3a3a3a)); /* width:418px; */ width:100%; - border:1px solid #009be3; + border-top:1px solid #7c7c7c; + border-bottom:1px solid #1a1a1a; } div.jp-audio div.jp-type-single div.jp-interface { - height:80px; - border-bottom:none; + height:70px; + /*border-bottom:none;*/ } div.jp-audio div.jp-type-playlist div.jp-interface { height:80px; @@ -73,13 +118,13 @@ div.jp-interface ul.jp-controls a { } a.jp-play, a.jp-pause { - width:40px; + width:75px; height:40px; z-index:1; } div.jp-audio div.jp-type-single a.jp-play, div.jp-audio div.jp-type-single a.jp-pause { - top:20px; + top:15px; left:40px; } div.jp-audio div.jp-type-playlist a.jp-play, @@ -108,17 +153,17 @@ div.jp-video-360p div.jp-type-playlist a.jp-pause { left:300px; } a.jp-play { - background: url("jplayer.blue.monday.jpg") 0 0 no-repeat; + background: url("jplayer.png") 0 0 no-repeat; } a.jp-play:hover { - background: url("jplayer.blue.monday.jpg") -41px 0 no-repeat; + background: url("jplayer.png") -75px 0 no-repeat; } a.jp-pause { - background: url("jplayer.blue.monday.jpg") 0 -42px no-repeat; + background: url("jplayer.png") 0 -40px no-repeat; display: none; } a.jp-pause:hover { - background: url("jplayer.blue.monday.jpg") -41px -42px no-repeat; + background: url("jplayer.png") -75px -40px no-repeat; } div.jp-audio div.jp-type-single a.jp-stop { top:26px; @@ -144,13 +189,13 @@ div.jp-video-360p div.jp-type-playlist a.jp-stop { left:378px; } a.jp-stop { - background: url("jplayer.blue.monday.jpg") 0 -83px no-repeat; + background: url("jplayer.png") 0 -83px no-repeat; width:28px; height:28px; z-index:1; } a.jp-stop:hover { - background: url("jplayer.blue.monday.jpg") -29px -83px no-repeat; + background: url("jplayer.png") -29px -83px no-repeat; } div.jp-audio div.jp-type-playlist a.jp-previous { left:20px; @@ -166,12 +211,12 @@ div.jp-video-360p div.jp-type-playlist a.jp-previous { left:272px; } a.jp-previous { - background: url("jplayer.blue.monday.jpg") 0 -112px no-repeat; + background: url("jplayer.png") 0 -112px no-repeat; width:28px; height:28px; } a.jp-previous:hover { - background: url("jplayer.blue.monday.jpg") -29px -112px no-repeat; + background: url("jplayer.png") -29px -112px no-repeat; } div.jp-audio div.jp-type-playlist a.jp-next { left:88px; @@ -187,12 +232,12 @@ div.jp-video-360p div.jp-type-playlist a.jp-next { left:340px; } a.jp-next { - background: url("jplayer.blue.monday.jpg") 0 -141px no-repeat; + background: url("jplayer.png") 0 -141px no-repeat; width:28px; height:28px; } a.jp-next:hover { - background: url("jplayer.blue.monday.jpg") -29px -141px no-repeat; + background: url("jplayer.png") -29px -141px no-repeat; } div.jp-progress { position: absolute; @@ -218,14 +263,14 @@ div.jp-video div.jp-progress { height:10px; } div.jp-seek-bar { - background: url("jplayer.blue.monday.jpg") 0 -202px repeat-x; + background: url("jplayer.png") 0 -202px repeat-x; width:0px; /* height:15px; */ height:100%; cursor: pointer; } div.jp-play-bar { - background: url("jplayer.blue.monday.jpg") 0 -218px repeat-x ; + background: url("jplayer.png") 0 -218px repeat-x ; width:0px; /* height:15px; */ height:100%; @@ -238,13 +283,13 @@ div.jp-seeking-bg { a.jp-mute, a.jp-unmute { - width:18px; - height:15px; + width:30px; + height:30px; } div.jp-audio div.jp-type-single a.jp-mute, div.jp-audio div.jp-type-single a.jp-unmute { - top:32px; - left:124px; + top:22px; + left:300px; } div.jp-audio div.jp-type-playlist a.jp-mute, div.jp-audio div.jp-type-playlist a.jp-unmute { @@ -272,22 +317,22 @@ div.jp-video-360p div.jp-type-playlist a.jp-unmute { left:443px; } a.jp-mute { - background: url("jplayer.blue.monday.jpg") 0 -186px no-repeat; + background: url("jplayer.png") 0 -110px no-repeat; } a.jp-mute:hover { - background: url("jplayer.blue.monday.jpg") -19px -170px no-repeat; + background: url("jplayer.png") -30px -80px no-repeat; } a.jp-unmute { - background: url("jplayer.blue.monday.jpg") 0 -170px no-repeat; + background: url("jplayer.png") 0 -80px no-repeat; display: none; } a.jp-unmute:hover { - background: url("jplayer.blue.monday.jpg") -19px -186px no-repeat; + background: url("jplayer.png") -30px -110px no-repeat; } div.jp-volume-bar { position: absolute; overflow:hidden; - background: url("jplayer.blue.monday.jpg") 0 -250px repeat-x; + background: url("jplayer.png") 0 -250px repeat-x; width:46px; height:5px; cursor: pointer; @@ -316,7 +361,7 @@ div.jp-video-360p div.jp-type-playlist div.jp-volume-bar { left:471px; } div.jp-volume-bar-value { - background: url("jplayer.blue.monday.jpg") 0 -256px repeat-x; + background: url("jplayer.png") 0 -256px repeat-x; width:0px; height:5px; } @@ -352,7 +397,7 @@ div.jp-playlist { /* width:418px; */ width:100%; background-color:#ccc; - border:1px solid #009be3; + /*border:1px solid #009be3;*/ border-top:none; } div.jp-playlist ul { diff --git a/airtime_mvc/public/js/jplayer/skin/jplayer.png b/airtime_mvc/public/js/jplayer/skin/jplayer.png new file mode 100644 index 0000000000000000000000000000000000000000..03aef17942b4926f2e8cbe7244c220ef7c67bcae GIT binary patch literal 8046 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 TIA;I;0 Date: Tue, 27 Sep 2011 15:26:40 -0400 Subject: [PATCH 13/16] CC-2724: Play Stream Icon + jPlayer popup styling -#of streams and stream bitrates now fetched from database. --- .../application/models/StreamSetting.php | 43 +++++++++++++++++-- .../scripts/dashboard/stream-player.phtml | 19 ++++---- 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/airtime_mvc/application/models/StreamSetting.php b/airtime_mvc/application/models/StreamSetting.php index 1e43b435d..eea87ba0a 100644 --- a/airtime_mvc/application/models/StreamSetting.php +++ b/airtime_mvc/application/models/StreamSetting.php @@ -1,7 +1,43 @@ getAll($sql); + $ids = array(); + + foreach ($rows as $row){ + $ids[] = substr($row["keyname"], 0, strpos($row["keyname"], "_")); + } + + //Logging::log(print_r($ids, true)); + + return $ids; + } + + /* Returns all information related to a specific stream. An example + * of a stream id is 's1' or 's2'. */ + public static function getStreamData($p_streamId){ + global $CC_DBC; + $sql = "SELECT * " + ."FROM cc_stream_setting " + ."WHERE keyname LIKE '${p_streamId}_%'"; + + $rows = $CC_DBC->getAll($sql); + $data = array(); + + foreach($rows as $row){ + $data[$row["keyname"]] = $row["value"]; + } + + return $data; } public static function getStreamSetting(){ @@ -12,6 +48,7 @@ class Application_Model_StreamSetting { $rows = $CC_DBC->getAll($sql); return $rows; } + public static function setStreamSetting($data){ global $CC_DBC; foreach($data as $key=>$d){ @@ -37,4 +74,4 @@ class Application_Model_StreamSetting { } } } -} \ No newline at end of file +} diff --git a/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml b/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml index 717072ddc..352ed6de8 100644 --- a/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml +++ b/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml @@ -15,21 +15,24 @@ $(document).ready(function(){ supplied: "oga", wmode: "window" }); + + $('.bit-rates').click(function(){console.log("click")}); }); From 5418ce46010d694296c92eeaca3dc240b94ec550 Mon Sep 17 00:00:00 2001 From: martin Date: Tue, 27 Sep 2011 16:37:03 -0400 Subject: [PATCH 14/16] CC-2724: Play Stream Icon + jPlayer popup styling -Everything looks to be working. --- .../scripts/dashboard/stream-player.phtml | 48 +++++++++++++++---- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml b/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml index 352ed6de8..9e8959a22 100644 --- a/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml +++ b/airtime_mvc/application/views/scripts/dashboard/stream-player.phtml @@ -1,22 +1,43 @@ From 1cbc098e919159e85cedfea370d5e1533e56011d Mon Sep 17 00:00:00 2001 From: martin Date: Wed, 28 Sep 2011 12:15:13 -0400 Subject: [PATCH 15/16] CC-2750: Ability to query health status for pypo, liquidsoap, media monitor, and recorder --- install_minimal/airtime-install | 18 +++++++++++------- .../media-monitor/airtime-media-monitor-init-d | 10 ++++++++++ .../install/media-monitor-install.py | 2 +- python_apps/pypo/airtime-playout-init-d | 11 +++++++++++ python_apps/pypo/install/pypo-install.py | 2 +- .../show-recorder/airtime-show-recorder-init-d | 10 ++++++++++ .../show-recorder/install/recorder-install.py | 2 +- 7 files changed, 45 insertions(+), 10 deletions(-) diff --git a/install_minimal/airtime-install b/install_minimal/airtime-install index 0255c1ae8..bb45530d5 100755 --- a/install_minimal/airtime-install +++ b/install_minimal/airtime-install @@ -42,13 +42,6 @@ elif [ "$result" -ne "0" ]; then fi set -e -# Need to ensure monit is running before Airtime daemons are run. This is -# so we can ensure they can register with monit to monitor them when they start. -# If monit is already running, this step is still useful as we need monit to -# reload its config files. -/etc/init.d/monit restart - - echo -e "\n*** API Client Installation ***" python ${SCRIPTPATH}/../python_apps/api_clients/install/api_client_install.py @@ -61,7 +54,18 @@ python ${SCRIPTPATH}/../python_apps/show-recorder/install/recorder-install.py echo -e "\n*** Media Monitor Installation ***" python ${SCRIPTPATH}/../python_apps/media-monitor/install/media-monitor-install.py +# Need to ensure monit is running before Airtime daemons are run. This is +# so we can ensure they can register with monit to monitor them when they start. +# If monit is already running, this step is still useful as we need monit to +# reload its config files. +/etc/init.d/monit restart + + set +e +monit monitor airtime-media-monitor +monit monitor airtime-liquidsoap +monit monitor airtime-playout +monit monitor airtime-show-recorder monit monitor rabbitmq-server set -e diff --git a/python_apps/media-monitor/airtime-media-monitor-init-d b/python_apps/media-monitor/airtime-media-monitor-init-d index 2780a224e..2f37a49fa 100755 --- a/python_apps/media-monitor/airtime-media-monitor-init-d +++ b/python_apps/media-monitor/airtime-media-monitor-init-d @@ -28,6 +28,10 @@ stop () { rm -f $PIDFILE } +start_no_monit() { + start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID --make-pidfile --pidfile $PIDFILE --startas $DAEMON +} + case "${1:-''}" in 'start') @@ -49,6 +53,12 @@ case "${1:-''}" in start echo "Done." ;; + 'start-no-monit') + # restart commands here + echo -n "Starting $NAME: " + start_no_monit + echo "Done." + ;; 'status') # status commands here /usr/bin/airtime-check-system diff --git a/python_apps/media-monitor/install/media-monitor-install.py b/python_apps/media-monitor/install/media-monitor-install.py index ab5324705..b5968b8ef 100644 --- a/python_apps/media-monitor/install/media-monitor-install.py +++ b/python_apps/media-monitor/install/media-monitor-install.py @@ -78,7 +78,7 @@ try: sts = os.waitpid(p.pid, 0)[1] print "Waiting for processes to start..." - p = Popen("/etc/init.d/airtime-media-monitor start", shell=True) + p = Popen("/etc/init.d/airtime-media-monitor start-no-monit", shell=True) sts = os.waitpid(p.pid, 0)[1] except Exception, e: diff --git a/python_apps/pypo/airtime-playout-init-d b/python_apps/pypo/airtime-playout-init-d index b56989f88..f873f671a 100755 --- a/python_apps/pypo/airtime-playout-init-d +++ b/python_apps/pypo/airtime-playout-init-d @@ -66,6 +66,11 @@ monit_restart() { } +start_no_monit() { + start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID --make-pidfile --pidfile $PIDFILE0 --startas $DAEMON0 + liquidsoap_start +} + case "${1:-''}" in 'start') # start commands here @@ -86,6 +91,12 @@ case "${1:-''}" in start echo "Done." ;; + 'start-no-monit') + # restart commands here + echo -n "Starting $NAME: " + start_no_monit + echo "Done." + ;; 'monit-restart') # restart commands here echo -n "Monit Restarting $NAME: " diff --git a/python_apps/pypo/install/pypo-install.py b/python_apps/pypo/install/pypo-install.py index 0ee6e9667..240525334 100644 --- a/python_apps/pypo/install/pypo-install.py +++ b/python_apps/pypo/install/pypo-install.py @@ -153,7 +153,7 @@ try: else: print "Unable to connect to the Airtime server." print "Waiting for processes to start..." - p = Popen("/etc/init.d/airtime-playout start", shell=True) + p = Popen("/etc/init.d/airtime-playout start-no-monit", shell=True) sts = os.waitpid(p.pid, 0)[1] diff --git a/python_apps/show-recorder/airtime-show-recorder-init-d b/python_apps/show-recorder/airtime-show-recorder-init-d index 8ffce4698..2fb8f4666 100755 --- a/python_apps/show-recorder/airtime-show-recorder-init-d +++ b/python_apps/show-recorder/airtime-show-recorder-init-d @@ -29,6 +29,10 @@ stop () { rm -f $PIDFILE } +start_no_monit() { + start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID --make-pidfile --pidfile $PIDFILE --startas $DAEMON +} + case "${1:-''}" in 'start') @@ -50,6 +54,12 @@ case "${1:-''}" in start echo "Done." ;; + 'start-no-monit') + # restart commands here + echo -n "Starting $NAME: " + start_no_monit + echo "Done." + ;; 'status') # status commands here /usr/bin/airtime-check-system diff --git a/python_apps/show-recorder/install/recorder-install.py b/python_apps/show-recorder/install/recorder-install.py index 762b6daed..84ace3e78 100644 --- a/python_apps/show-recorder/install/recorder-install.py +++ b/python_apps/show-recorder/install/recorder-install.py @@ -75,7 +75,7 @@ try: sts = os.waitpid(p.pid, 0)[1] print "Waiting for processes to start..." - p = Popen("/etc/init.d/airtime-show-recorder start", shell=True) + p = Popen("/etc/init.d/airtime-show-recorder start-no-monit", shell=True) sts = os.waitpid(p.pid, 0)[1] except Exception, e: From f697e475fd5b0cd35522ad04229ed29f4e015df6 Mon Sep 17 00:00:00 2001 From: martin Date: Wed, 28 Sep 2011 12:45:19 -0400 Subject: [PATCH 16/16] CC-2750: Ability to query health status for pypo, liquidsoap, media monitor, and recorder -remove icecast monitoring for now --- airtime_mvc/application/controllers/ApiController.php | 1 - .../application/controllers/SystemstatusController.php | 4 +--- utils/airtime-check-system.php | 4 ---- 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index fd246d863..62261db47 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -664,7 +664,6 @@ class ApiController extends Zend_Controller_Action "platform"=>Application_Model_Systemstatus::GetPlatformInfo(), "airtime_version"=>Application_Model_Preference::GetAirtimeVersion(), "services"=>array( - "icecast2"=>Application_Model_Systemstatus::GetIcecastStatus(), "rabbitmq"=>Application_Model_Systemstatus::GetRabbitMqStatus(), "pypo"=>Application_Model_Systemstatus::GetPypoStatus(), "liquidsoap"=>Application_Model_Systemstatus::GetLiquidsoapStatus(), diff --git a/airtime_mvc/application/controllers/SystemstatusController.php b/airtime_mvc/application/controllers/SystemstatusController.php index d78c8e6bb..b4d1c2b3f 100644 --- a/airtime_mvc/application/controllers/SystemstatusController.php +++ b/airtime_mvc/application/controllers/SystemstatusController.php @@ -18,8 +18,7 @@ class SystemstatusController extends Zend_Controller_Action "liquidsoap"=>Application_Model_Systemstatus::GetLiquidsoapStatus(), "show-recorder"=>Application_Model_Systemstatus::GetShowRecorderStatus(), "media-monitor"=>Application_Model_Systemstatus::GetMediaMonitorStatus(), - "rabbitmq-server"=>Application_Model_Systemstatus::GetRabbitMqStatus(), - "icecast2"=>Application_Model_Systemstatus::GetIcecastStatus() + "rabbitmq-server"=>Application_Model_Systemstatus::GetRabbitMqStatus() ); $partitions = Application_Model_Systemstatus::GetDiskInfo(); @@ -27,7 +26,6 @@ class SystemstatusController extends Zend_Controller_Action $this->view->status = new StdClass; $this->view->status->services = $services; $this->view->status->partitions = $partitions; - } public function getLogFileAction() diff --git a/utils/airtime-check-system.php b/utils/airtime-check-system.php index 6fc13060f..4a90dcc2c 100644 --- a/utils/airtime-check-system.php +++ b/utils/airtime-check-system.php @@ -85,10 +85,6 @@ class AirtimeCheck { self::output_status("SHOW_RECORDER_RUNNING_SECONDS", $p_status->services->show_recorder->uptime_seconds); self::output_status("SHOW_RECORDER_MEM_PERC", $p_status->services->show_recorder->memory_perc); self::output_status("SHOW_RECORDER_CPU_PERC", $p_status->services->show_recorder->cpu_perc); - self::output_status("ICECAST_PROCESS_ID", $p_status->services->icecast2->process_id); - self::output_status("ICECAST_RUNNING_SECONDS", $p_status->services->icecast2->uptime_seconds); - self::output_status("ICECAST_MEM_PERC", $p_status->services->icecast2->memory_perc); - self::output_status("ICECAST_CPU_PERC", $p_status->services->icecast2->cpu_perc); self::output_status("RABBITMQ_PROCESS_ID", $p_status->services->rabbitmq->process_id); self::output_status("RABBITMQ_RUNNING_SECONDS", $p_status->services->rabbitmq->uptime_seconds); self::output_status("RABBITMQ_MEM_PERC", $p_status->services->rabbitmq->memory_perc);