From 3f1ea46d3d2fce573e1b5f9f8fb3259917564860 Mon Sep 17 00:00:00 2001 From: martin <martin@martin-ThinkPad-T410.(none)> 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 <martin@martin-ThinkPad-T410.(none)> 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 <martin@martin-ThinkPad-T410.(none)> 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 <martin@martin-ThinkPad-T410.(none)> 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 = "<div class='success'>Stream Setting Updated.</div>"; } } 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 <martin@martin-ThinkPad-T410.(none)> 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 <martin@martin-ThinkPad-T410.(none)> 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 @@ <?php -class DateHelper +class Application_Model_DateHelper { private $_dateTime; diff --git a/airtime_mvc/application/models/Nowplaying.php b/airtime_mvc/application/models/Nowplaying.php index 9f42aa895..17c531fec 100644 --- a/airtime_mvc/application/models/Nowplaying.php +++ b/airtime_mvc/application/models/Nowplaying.php @@ -14,10 +14,10 @@ class Application_Model_Nowplaying foreach ($p_dbRows as $dbRow){ - $showStartDateTime = DateHelper::ConvertToLocalDateTime($dbRow['show_starts']); - $showEndDateTime = DateHelper::ConvertToLocalDateTime($dbRow['show_ends']); - $itemStartDateTime = DateHelper::ConvertToLocalDateTime($dbRow['item_starts']); - $itemEndDateTime = DateHelper::ConvertToLocalDateTime($dbRow['item_ends']); + $showStartDateTime = Application_Model_DateHelper::ConvertToLocalDateTime($dbRow['show_starts']); + $showEndDateTime = Application_Model_DateHelper::ConvertToLocalDateTime($dbRow['show_ends']); + $itemStartDateTime = Application_Model_DateHelper::ConvertToLocalDateTime($dbRow['item_starts']); + $itemEndDateTime = Application_Model_DateHelper::ConvertToLocalDateTime($dbRow['item_ends']); $showStarts = $showStartDateTime->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 <martin@martin-ThinkPad-T410.(none)> 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 @@ <?php require_once 'php-amqplib/amqp.inc'; -class RabbitMq +class Application_Model_RabbitMq { static public $doPush = FALSE; From fb9ab448b74e9f50f0771774c8adaa1dd5ae9735 Mon Sep 17 00:00:00 2001 From: martin <martin@martin-ThinkPad-T410.(none)> 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 <martin@martin-ThinkPad-T410.(none)> 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 <martin@martin-ThinkPad-T410.(none)> 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 <martin@martin-ThinkPad-T410.(none)> 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 <martin@martin-ThinkPad-T410.(none)> 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 @@ +<div id="content" class="jp-container"> <script> $(document).ready(function(){ - $("#jquery_jplayer_1").jPlayer({ - ready: function () { - $(this).jPlayer("setMedia", { - oga: "http://localhost:8000/airtime_128" - }).jPlayer("play"); - }, - ended: function (event) { - $(this).jPlayer("play"); - }, - swfPath: "js", - supplied: "oga" - }); + $("#jquery_jplayer_1").jPlayer({ + ready: function () { + $(this).jPlayer("setMedia", { + oga: "http://localhost:8000/airtime_128" + }).jPlayer("play"); + }, + ended: function (event) { + $(this).jPlayer("play"); + }, + swfPath: "js", + supplied: "oga", + wmode: "window" + }); }); </script> + <div class="jp-logo"></div> + <div class="jp-stream"> + <div class="jp-stream-text">Select stream:</div> + <form id="form1" method="post" action=""> + <label> + <input type="radio" name="select-stream" value="radio" id="select-stream_0" checked="checked" /> + 48 Kbit/s</label> + <label> + <input type="radio" name="select-stream" value="radio" id="select-stream_1" /> + 96 Kbit/s</label> + <label> + <input type="radio" name="select-stream" value="radio" id="select-stream_2" /> + 192 Kbit/s</label> + </form> + </div> + <div id="jquery_jplayer_1" class="jp-jplayer"></div> - <div id="jquery_jplayer_1" class="jp-jplayer"></div> + <div id="jp_container_1" class="jp-audio"> + <div class="jp-type-single"> + <div id="jp_interface_1" class="jp-gui jp-interface"> + <ul class="jp-controls"> + <li><a href="javascript:;" class="jp-play" tabindex="1">play</a></li> + <li><a href="javascript:;" class="jp-pause" tabindex="1">pause</a></li> + <li><a href="javascript:;" class="jp-mute" tabindex="1">mute</a></li> + <li><a href="javascript:;" class="jp-unmute" tabindex="1">unmute</a></li> + </ul> + </div> + <div id="jp_playlist_1" class="jp-playlist"> + </div> - <div class="jp-audio"> - <div class="jp-type-single"> - <div id="jp_interface_1" class="jp-interface"> - <ul class="jp-controls"> - <li><a href="#" class="jp-play" tabindex="1">play</a></li> - <li><a href="#" class="jp-pause" tabindex="1">pause</a></li> - <li><a href="#" class="jp-mute" tabindex="1">mute</a></li> - <li><a href="#" class="jp-unmute" tabindex="1">unmute</a></li> - </ul> - </div> - <div id="jp_playlist_1" class="jp-playlist"> - </div> - </div> - </div> + </div> + </div> +</div> 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 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 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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 diff --git a/airtime_mvc/public/js/jplayer/jquery.jplayer.min.js b/airtime_mvc/public/js/jplayer/jquery.jplayer.min.js index 1bcbb530d..bcf7901a0 100644 --- a/airtime_mvc/public/js/jplayer/jquery.jplayer.min.js +++ b/airtime_mvc/public/js/jplayer/jquery.jplayer.min.js @@ -1,78 +1,97 @@ /* * jPlayer Plugin for jQuery JavaScript Library - * http://www.happyworm.com/jquery/jplayer + * http://www.jplayer.org * - * Copyright (c) 2009 - 2010 Happyworm Ltd + * Copyright (c) 2009 - 2011 Happyworm Ltd * Dual licensed under the MIT and GPL licenses. * - http://www.opensource.org/licenses/mit-license.php * - http://www.gnu.org/copyleft/gpl.html * * Author: Mark J Panaghiston - * Version: 2.0.0 - * Date: 20th December 2010 + * Version: 2.1.0 + * Date: 1st September 2011 */ -(function(c,h){c.fn.jPlayer=function(a){var b=typeof a==="string",d=Array.prototype.slice.call(arguments,1),f=this;a=!b&&d.length?c.extend.apply(null,[true,a].concat(d)):a;if(b&&a.charAt(0)==="_")return f;b?this.each(function(){var e=c.data(this,"jPlayer"),g=e&&c.isFunction(e[a])?e[a].apply(e,d):e;if(g!==e&&g!==h){f=g;return false}}):this.each(function(){var e=c.data(this,"jPlayer");if(e){e.option(a||{})._init();e.option(a||{})}else c.data(this,"jPlayer",new c.jPlayer(a,this))});return f};c.jPlayer= -function(a,b){if(arguments.length){this.element=c(b);this.options=c.extend(true,{},this.options,a);var d=this;this.element.bind("remove.jPlayer",function(){d.destroy()});this._init()}};c.jPlayer.event={ready:"jPlayer_ready",resize:"jPlayer_resize",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"};c.jPlayer.htmlEvent=["loadstart","abort","emptied","stalled","loadedmetadata","loadeddata","canplaythrough","ratechange"];c.jPlayer.pause= -function(){c.each(c.jPlayer.prototype.instances,function(a,b){b.data("jPlayer").status.srcSet&&b.jPlayer("pause")})};c.jPlayer.timeFormat={showHour:false,showMin:true,showSec:true,padHour:false,padMin:true,padSec:true,sepHour:":",sepMin:":",sepSec:""};c.jPlayer.convertTime=function(a){a=new Date(a*1E3);var b=a.getUTCHours(),d=a.getUTCMinutes();a=a.getUTCSeconds();b=c.jPlayer.timeFormat.padHour&&b<10?"0"+b:b;d=c.jPlayer.timeFormat.padMin&&d<10?"0"+d:d;a=c.jPlayer.timeFormat.padSec&&a<10?"0"+a:a;return(c.jPlayer.timeFormat.showHour? -b+c.jPlayer.timeFormat.sepHour:"")+(c.jPlayer.timeFormat.showMin?d+c.jPlayer.timeFormat.sepMin:"")+(c.jPlayer.timeFormat.showSec?a+c.jPlayer.timeFormat.sepSec:"")};c.jPlayer.uaMatch=function(a){a=a.toLowerCase();var b=/(opera)(?:.*version)?[ \/]([\w.]+)/,d=/(msie) ([\w.]+)/,f=/(mozilla)(?:.*? rv:([\w.]+))?/;a=/(webkit)[ \/]([\w.]+)/.exec(a)||b.exec(a)||d.exec(a)||a.indexOf("compatible")<0&&f.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}};c.jPlayer.browser={};var m=c.jPlayer.uaMatch(navigator.userAgent); -if(m.browser){c.jPlayer.browser[m.browser]=true;c.jPlayer.browser.version=m.version}c.jPlayer.prototype={count:0,version:{script:"2.0.0",needFlash:"2.0.0",flash:"unknown"},options:{swfPath:"js",solution:"html, flash",supplied:"mp3",preload:"metadata",volume:0.8,muted:false,backgroundColor:"#000000",cssSelectorAncestor:"#jp_interface_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",currentTime:".jp-current-time",duration:".jp-duration"},idPrefix:"jp",errorAlerts:false,warningAlerts:false},instances:{},status:{src:"",media:{},paused:true,format:{},formatType:"",waitForPlay:true,waitForLoad:true,srcSet:false,video:false,seekPercent:0,currentPercentRelative:0,currentPercentAbsolute:0,currentTime:0,duration:0},_status:{volume:h,muted:false,width:0,height:0},internal:{ready:false,instance:h,htmlDlyCmdId:h},solution:{html:true, -flash:true},format:{mp3:{codec:'audio/mpeg; codecs="mp3"',flashCanPlay:true,media:"audio"},m4a:{codec:'audio/mp4; codecs="mp4a.40.2"',flashCanPlay:true,media:"audio"},oga:{codec:'audio/ogg; codecs="vorbis"',flashCanPlay:false,media:"audio"},wav:{codec:'audio/wav; codecs="1"',flashCanPlay:false,media:"audio"},webma:{codec:'audio/webm; codecs="vorbis"',flashCanPlay:false,media:"audio"},m4v:{codec:'video/mp4; codecs="avc1.42E01E, mp4a.40.2"',flashCanPlay:true,media:"video"},ogv:{codec:'video/ogg; codecs="theora, vorbis"', -flashCanPlay:false,media:"video"},webmv:{codec:'video/webm; codecs="vorbis, vp8"',flashCanPlay:false,media:"video"}},_init:function(){var a=this;this.element.empty();this.status=c.extend({},this.status,this._status);this.internal=c.extend({},this.internal);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.status.volume=this._limitValue(this.options.volume,0,1);this.status.muted= -this.options.muted;this.status.width=this.element.css("width");this.status.height=this.element.css("height");this.element.css({"background-color":this.options.backgroundColor});c.each(this.options.supplied.toLowerCase().split(","),function(e,g){var i=g.replace(/^\s+|\s+$/g,"");if(a.format[i]){var j=false;c.each(a.formats,function(n,k){if(i===k){j=true;return false}});j||a.formats.push(i)}});c.each(this.options.solution.toLowerCase().split(","),function(e,g){var i=g.replace(/^\s+|\s+$/g,"");if(a.solution[i]){var j= -false;c.each(a.solutions,function(n,k){if(i===k){j=true;return false}});j||a.solutions.push(i)}});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=c.extend({},{id:this.element.attr("id"),jq:this.element});this.internal.audio=c.extend({},{id:this.options.idPrefix+"_audio_"+this.count,jq:h});this.internal.video=c.extend({},{id:this.options.idPrefix+ -"_video_"+this.count,jq:h});this.internal.flash=c.extend({},{id:this.options.idPrefix+"_flash_"+this.count,jq:h,swf:this.options.swfPath+(this.options.swfPath!==""&&this.options.swfPath.slice(-1)!=="/"?"/":"")+"Jplayer.swf"});this.internal.poster=c.extend({},{id:this.options.idPrefix+"_poster_"+this.count,jq:h});c.each(c.jPlayer.event,function(e,g){if(a.options[e]!==h){a.element.bind(g+".jPlayer",a.options[e]);a.options[e]=h}});this.htmlElement.poster=document.createElement("img");this.htmlElement.poster.id= -this.internal.poster.id;this.htmlElement.poster.onload=function(){if(!a.status.video||a.status.waitForPlay)a.internal.poster.jq.show()};this.element.append(this.htmlElement.poster);this.internal.poster.jq=c("#"+this.internal.poster.id);this.internal.poster.jq.css({width:this.status.width,height:this.status.height});this.internal.poster.jq.hide();this.require.audio=false;this.require.video=false;c.each(this.formats,function(e,g){a.require[a.format[g].media]=true});this.html.audio.available=false;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.html.video.available=false;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.flash.available=this._checkForFlash(10);this.html.canPlay={};this.flash.canPlay={};c.each(this.formats,function(e,g){a.html.canPlay[g]= -a.html[a.format[g].media].available&&""!==a.htmlElement[a.format[g].media].canPlayType(a.format[g].codec);a.flash.canPlay[g]=a.format[g].flashCanPlay&&a.flash.available});this.html.desired=false;this.flash.desired=false;c.each(this.solutions,function(e,g){if(e===0)a[g].desired=true;else{var i=false,j=false;c.each(a.formats,function(n,k){if(a[a.solutions[0]].canPlay[k])if(a.format[k].media==="video")j=true;else i=true});a[g].desired=a.require.audio&&!i||a.require.video&&!j}});this.html.support={}; -this.flash.support={};c.each(this.formats,function(e,g){a.html.support[g]=a.html.canPlay[g]&&a.html.desired;a.flash.support[g]=a.flash.canPlay[g]&&a.flash.desired});this.html.used=false;this.flash.used=false;c.each(this.solutions,function(e,g){c.each(a.formats,function(i,j){if(a[g].support[j]){a[g].used=true;return false}})});this.html.used||this.flash.used||this._error({type:c.jPlayer.error.NO_SOLUTION,context:"{solution:'"+this.options.solution+"', supplied:'"+this.options.supplied+"'}",message:c.jPlayer.errorMsg.NO_SOLUTION, -hint:c.jPlayer.errorHint.NO_SOLUTION});this.html.active=false;this.html.audio.gate=false;this.html.video.gate=false;this.flash.active=false;this.flash.gate=false;if(this.flash.used){var b="id="+escape(this.internal.self.id)+"&vol="+this.status.volume+"&muted="+this.status.muted;if(c.browser.msie&&Number(c.browser.version)<=8){var d='<object id="'+this.internal.flash.id+'"';d+=' classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"';d+=' codebase="'+document.URL.substring(0,document.URL.indexOf(":"))+ -'://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"';d+=' type="application/x-shockwave-flash"';d+=' width="0" height="0">';d+="</object>";var f=[];f[0]='<param name="movie" value="'+this.internal.flash.swf+'" />';f[1]='<param name="quality" value="high" />';f[2]='<param name="FlashVars" value="'+b+'" />';f[3]='<param name="allowScriptAccess" value="always" />';f[4]='<param name="bgcolor" value="'+this.options.backgroundColor+'" />';b=document.createElement(d);for(d=0;d<f.length;d++)b.appendChild(document.createElement(f[d])); -this.element.append(b)}else{f='<embed name="'+this.internal.flash.id+'" id="'+this.internal.flash.id+'" src="'+this.internal.flash.swf+'"';f+=' width="0" height="0" bgcolor="'+this.options.backgroundColor+'"';f+=' quality="high" FlashVars="'+b+'"';f+=' allowScriptAccess="always"';f+=' type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />';this.element.append(f)}this.internal.flash.jq=c("#"+this.internal.flash.id);this.internal.flash.jq.css({width:"0px", -height:"0px"})}if(this.html.used){if(this.html.audio.available){this._addHtmlEventListeners(this.htmlElement.audio,this.html.audio);this.element.append(this.htmlElement.audio);this.internal.audio.jq=c("#"+this.internal.audio.id)}if(this.html.video.available){this._addHtmlEventListeners(this.htmlElement.video,this.html.video);this.element.append(this.htmlElement.video);this.internal.video.jq=c("#"+this.internal.video.id);this.internal.video.jq.css({width:"0px",height:"0px"})}}this.html.used&&!this.flash.used&& -window.setTimeout(function(){a.internal.ready=true;a.version.flash="n/a";a._trigger(c.jPlayer.event.ready)},100);c.each(this.options.cssSelector,function(e,g){a._cssSelector(e,g)});this._updateInterface();this._updateButtons(false);this._updateVolume(this.status.volume);this._updateMute(this.status.muted);this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide();c.jPlayer.prototype.count++},destroy:function(){this._resetStatus();this._updateInterface();this._seeked();this.css.jq.currentTime.length&& -this.css.jq.currentTime.text("");this.css.jq.duration.length&&this.css.jq.duration.text("");this.status.srcSet&&this.pause();c.each(this.css.jq,function(a,b){b.unbind(".jPlayer")});this.element.removeData("jPlayer");this.element.unbind(".jPlayer");this.element.empty();this.instances[this.internal.instance]=h},enable:function(){},disable:function(){},_addHtmlEventListeners:function(a,b){var d=this;a.preload=this.options.preload;a.muted=this.options.muted;a.addEventListener("progress",function(){if(b.gate&& -!d.status.waitForLoad){d._getHtmlStatus(a);d._updateInterface();d._trigger(c.jPlayer.event.progress)}},false);a.addEventListener("timeupdate",function(){if(b.gate&&!d.status.waitForLoad){d._getHtmlStatus(a);d._updateInterface();d._trigger(c.jPlayer.event.timeupdate)}},false);a.addEventListener("durationchange",function(){if(b.gate&&!d.status.waitForLoad){d.status.duration=this.duration;d._getHtmlStatus(a);d._updateInterface();d._trigger(c.jPlayer.event.durationchange)}},false);a.addEventListener("play", -function(){if(b.gate&&!d.status.waitForLoad){d._updateButtons(true);d._trigger(c.jPlayer.event.play)}},false);a.addEventListener("playing",function(){if(b.gate&&!d.status.waitForLoad){d._updateButtons(true);d._seeked();d._trigger(c.jPlayer.event.playing)}},false);a.addEventListener("pause",function(){if(b.gate&&!d.status.waitForLoad){d._updateButtons(false);d._trigger(c.jPlayer.event.pause)}},false);a.addEventListener("waiting",function(){if(b.gate&&!d.status.waitForLoad){d._seeking();d._trigger(c.jPlayer.event.waiting)}}, -false);a.addEventListener("canplay",function(){if(b.gate&&!d.status.waitForLoad){a.volume=d._volumeFix(d.status.volume);d._trigger(c.jPlayer.event.canplay)}},false);a.addEventListener("seeking",function(){if(b.gate&&!d.status.waitForLoad){d._seeking();d._trigger(c.jPlayer.event.seeking)}},false);a.addEventListener("seeked",function(){if(b.gate&&!d.status.waitForLoad){d._seeked();d._trigger(c.jPlayer.event.seeked)}},false);a.addEventListener("suspend",function(){if(b.gate&&!d.status.waitForLoad){d._seeked(); -d._trigger(c.jPlayer.event.suspend)}},false);a.addEventListener("ended",function(){if(b.gate&&!d.status.waitForLoad){if(!c.jPlayer.browser.webkit)d.htmlElement.media.currentTime=0;d.htmlElement.media.pause();d._updateButtons(false);d._getHtmlStatus(a,true);d._updateInterface();d._trigger(c.jPlayer.event.ended)}},false);a.addEventListener("error",function(){if(b.gate&&!d.status.waitForLoad){d._updateButtons(false);d._seeked();if(d.status.srcSet){d.status.waitForLoad=true;d.status.waitForPlay=true; -d.status.video&&d.internal.video.jq.css({width:"0px",height:"0px"});d._validString(d.status.media.poster)&&d.internal.poster.jq.show();d.css.jq.videoPlay.length&&d.css.jq.videoPlay.show();d._error({type:c.jPlayer.error.URL,context:d.status.src,message:c.jPlayer.errorMsg.URL,hint:c.jPlayer.errorHint.URL})}}},false);c.each(c.jPlayer.htmlEvent,function(f,e){a.addEventListener(this,function(){b.gate&&!d.status.waitForLoad&&d._trigger(c.jPlayer.event[e])},false)})},_getHtmlStatus:function(a,b){var d=0, -f=0,e=0,g=0;d=a.currentTime;f=this.status.duration>0?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<f.length;g++)if(e[f[g]]!==h)e=e[f[g]];else{this._warning({type:c.jPlayer.warning.OPTION_KEY,context:a,message:c.jPlayer.warningMsg.OPTION_KEY,hint:c.jPlayer.warningHint.OPTION_KEY});return h}return e}e=d={};for(g=0;g<f.length;g++)if(g<f.length-1){e[f[g]]={};e=e[f[g]]}else e[f[g]]=b}this._setOptions(d);return this},_setOptions:function(a){var b=this;c.each(a,function(d,f){b._setOption(d,f)});return this},_setOption:function(a,b){var d=this;switch(a){case "cssSelectorAncestor":this.options[a]= -b;c.each(d.options.cssSelector,function(f,e){d._cssSelector(f,e)});break;case "cssSelector":c.each(b,function(f,e){d._cssSelector(f,e)})}return this},resize:function(a){this.html.active&&this._resizeHtml(a);this.flash.active&&this._resizeFlash(a);this._trigger(c.jPlayer.event.resize)},_resizePoster:function(){},_resizeHtml:function(){},_resizeFlash:function(a){this.internal.flash.jq.css({width:a.width,height:a.height})},_html_initMedia:function(){this.status.srcSet&&!this.status.waitForPlay&&this.htmlElement.media.pause(); -this.options.preload!=="none"&&this._html_load();this._trigger(c.jPlayer.event.timeupdate)},_html_setAudio:function(a){var b=this;c.each(this.formats,function(d,f){if(b.html.support[f]&&a[f]){b.status.src=a[f];b.status.format[f]=true;b.status.formatType=f;return false}});this.htmlElement.media=this.htmlElement.audio;this._html_initMedia()},_html_setVideo:function(a){var b=this;c.each(this.formats,function(d,f){if(b.html.support[f]&&a[f]){b.status.src=a[f];b.status.format[f]=true;b.status.formatType= -f;return false}});this.htmlElement.media=this.htmlElement.video;this._html_initMedia()},_html_clearMedia:function(){if(this.htmlElement.media){this.htmlElement.media.id===this.internal.video.id&&this.internal.video.jq.css({width:"0px",height:"0px"});this.htmlElement.media.pause();this.htmlElement.media.src="";c.browser.msie&&Number(c.browser.version)>=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 a<b?b:a>d?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=['<param name="movie" value="'+this.internal.flash.swf+ +'" />','<param name="FlashVars" value="'+d+'" />','<param name="allowScriptAccess" value="always" />','<param name="bgcolor" value="'+this.options.backgroundColor+'" />','<param name="wmode" value="'+this.options.wmode+'" />'];c=document.createElement('<object id="'+this.internal.flash.id+'" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="0" height="0"></object>');for(var e=0;e<d.length;e++)c.appendChild(document.createElement(d[e]))}else e=function(a,b,c){var d=document.createElement("param"); +d.setAttribute("name",b);d.setAttribute("value",c);a.appendChild(d)},c=document.createElement("object"),c.setAttribute("id",this.internal.flash.id),c.setAttribute("data",this.internal.flash.swf),c.setAttribute("type","application/x-shockwave-flash"),c.setAttribute("width","1"),c.setAttribute("height","1"),e(c,"flashvars",d),e(c,"allowscriptaccess","always"),e(c,"bgcolor",this.options.backgroundColor),e(c,"wmode",this.options.wmode);this.element.append(c);this.internal.flash.jq=b(c)}if(this.html.used){if(this.html.audio.available)this._addHtmlEventListeners(this.htmlElement.audio, +this.html.audio),this.element.append(this.htmlElement.audio),this.internal.audio.jq=b("#"+this.internal.audio.id);if(this.html.video.available)this._addHtmlEventListeners(this.htmlElement.video,this.html.video),this.element.append(this.htmlElement.video),this.internal.video.jq=b("#"+this.internal.video.id),this.status.nativeVideoControls?this.internal.video.jq.css({width:this.status.width,height:this.status.height}):this.internal.video.jq.css({width:"0px",height:"0px"}),this.internal.video.jq.bind("click.jPlayer", +function(){a._trigger(b.jPlayer.event.click)})}this.options.emulateHtml&&this._emulateHtmlBridge();this.html.used&&!this.flash.used&&setTimeout(function(){a.internal.ready=!0;a.version.flash="n/a";a._trigger(b.jPlayer.event.repeat);a._trigger(b.jPlayer.event.ready)},100);this._updateNativeVideoControls();this._updateInterface();this._updateButtons(!1);this._updateAutohide();this._updateVolume(this.options.volume);this._updateMute(this.options.muted);this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(); +b.jPlayer.prototype.count++},destroy:function(){this.clearMedia();this._removeUiClass();this.css.jq.currentTime.length&&this.css.jq.currentTime.text("");this.css.jq.duration.length&&this.css.jq.duration.text("");b.each(this.css.jq,function(a,b){b.length&&b.unbind(".jPlayer")});this.internal.poster.jq.unbind(".jPlayer");this.internal.video.jq&&this.internal.video.jq.unbind(".jPlayer");this.options.emulateHtml&&this._destroyHtmlBridge();this.element.removeData("jPlayer");this.element.unbind(".jPlayer"); +this.element.empty();delete this.instances[this.internal.instance]},enable:function(){},disable:function(){},_testCanPlayType:function(a){try{return a.canPlayType(this.format.mp3.codec),!0}catch(b){return!1}},_uaBlocklist:function(a){var c=navigator.userAgent.toLowerCase(),d=!1;b.each(a,function(a,b){if(b&&b.test(c))return d=!0,!1});return d},_restrictNativeVideoControls:function(){if(this.require.audio&&this.status.nativeVideoControls)this.status.nativeVideoControls=!1,this.status.noFullScreen=!0}, +_updateNativeVideoControls:function(){if(this.html.video.available&&this.html.used)this.htmlElement.video.controls=this.status.nativeVideoControls,this._updateAutohide(),this.status.nativeVideoControls&&this.require.video?(this.internal.poster.jq.hide(),this.internal.video.jq.css({width:this.status.width,height:this.status.height})):this.status.waitForPlay&&this.status.video&&(this.internal.poster.jq.show(),this.internal.video.jq.css({width:"0px",height:"0px"}))},_addHtmlEventListeners:function(a, +c){var d=this;a.preload=this.options.preload;a.muted=this.options.muted;a.volume=this.options.volume;a.addEventListener("progress",function(){c.gate&&(d._getHtmlStatus(a),d._updateInterface(),d._trigger(b.jPlayer.event.progress))},!1);a.addEventListener("timeupdate",function(){c.gate&&(d._getHtmlStatus(a),d._updateInterface(),d._trigger(b.jPlayer.event.timeupdate))},!1);a.addEventListener("durationchange",function(){if(c.gate)d.status.duration=this.duration,d._getHtmlStatus(a),d._updateInterface(), +d._trigger(b.jPlayer.event.durationchange)},!1);a.addEventListener("play",function(){c.gate&&(d._updateButtons(!0),d._html_checkWaitForPlay(),d._trigger(b.jPlayer.event.play))},!1);a.addEventListener("playing",function(){c.gate&&(d._updateButtons(!0),d._seeked(),d._trigger(b.jPlayer.event.playing))},!1);a.addEventListener("pause",function(){c.gate&&(d._updateButtons(!1),d._trigger(b.jPlayer.event.pause))},!1);a.addEventListener("waiting",function(){c.gate&&(d._seeking(),d._trigger(b.jPlayer.event.waiting))}, +!1);a.addEventListener("seeking",function(){c.gate&&(d._seeking(),d._trigger(b.jPlayer.event.seeking))},!1);a.addEventListener("seeked",function(){c.gate&&(d._seeked(),d._trigger(b.jPlayer.event.seeked))},!1);a.addEventListener("volumechange",function(){if(c.gate)d.options.volume=a.volume,d.options.muted=a.muted,d._updateMute(),d._updateVolume(),d._trigger(b.jPlayer.event.volumechange)},!1);a.addEventListener("suspend",function(){c.gate&&(d._seeked(),d._trigger(b.jPlayer.event.suspend))},!1);a.addEventListener("ended", +function(){if(c.gate){if(!b.jPlayer.browser.webkit)d.htmlElement.media.currentTime=0;d.htmlElement.media.pause();d._updateButtons(!1);d._getHtmlStatus(a,!0);d._updateInterface();d._trigger(b.jPlayer.event.ended)}},!1);a.addEventListener("error",function(){if(c.gate&&(d._updateButtons(!1),d._seeked(),d.status.srcSet))clearTimeout(d.internal.htmlDlyCmdId),d.status.waitForLoad=!0,d.status.waitForPlay=!0,d.status.video&&!d.status.nativeVideoControls&&d.internal.video.jq.css({width:"0px",height:"0px"}), +d._validString(d.status.media.poster)&&!d.status.nativeVideoControls&&d.internal.poster.jq.show(),d.css.jq.videoPlay.length&&d.css.jq.videoPlay.show(),d._error({type:b.jPlayer.error.URL,context:d.status.src,message:b.jPlayer.errorMsg.URL,hint:b.jPlayer.errorHint.URL})},!1);b.each(b.jPlayer.htmlEvent,function(e,g){a.addEventListener(this,function(){c.gate&&d._trigger(b.jPlayer.event[g])},!1)})},_getHtmlStatus:function(a,b){var d=0,e=0,g=0,f=0;if(a.duration)this.status.duration=a.duration;d=a.currentTime; +e=this.status.duration>0?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;g<e.length;g++)if(d[e[g]]!==f)d=d[e[g]];else return this._warning({type:b.jPlayer.warning.OPTION_KEY,context:a,message:b.jPlayer.warningMsg.OPTION_KEY,hint:b.jPlayer.warningHint.OPTION_KEY}),f;return d}for(var g=d={},h=0;h<e.length;h++)h<e.length-1?(g[e[h]]={},g=g[e[h]]):g[e[h]]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,c){var d=this;switch(a){case "volume":this.volume(c); +break;case "muted":this._muted(c);break;case "cssSelectorAncestor":this._cssSelectorAncestor(c);break;case "cssSelector":b.each(c,function(a,b){d._cssSelector(a,b)});break;case "fullScreen":this.options[a]!==c&&(this._removeUiClass(),this.options[a]=c,this._refreshSize());break;case "size":!this.options.fullScreen&&this.options[a].cssClass!==c.cssClass&&this._removeUiClass();this.options[a]=b.extend({},this.options[a],c);this._refreshSize();break;case "sizeFull":this.options.fullScreen&&this.options[a].cssClass!== +c.cssClass&&this._removeUiClass();this.options[a]=b.extend({},this.options[a],c);this._refreshSize();break;case "autohide":this.options[a]=b.extend({},this.options[a],c);this._updateAutohide();break;case "loop":this._loop(c);break;case "nativeVideoControls":this.options[a]=b.extend({},this.options[a],c);this.status.nativeVideoControls=this._uaBlocklist(this.options.nativeVideoControls);this._restrictNativeVideoControls();this._updateNativeVideoControls();break;case "noFullScreen":this.options[a]= +b.extend({},this.options[a],c);this.status.nativeVideoControls=this._uaBlocklist(this.options.nativeVideoControls);this.status.noFullScreen=this._uaBlocklist(this.options.noFullScreen);this._restrictNativeVideoControls();this._updateButtons();break;case "noVolume":this.options[a]=b.extend({},this.options[a],c);this.status.noVolume=this._uaBlocklist(this.options.noVolume);this._updateVolume();this._updateMute();break;case "emulateHtml":this.options[a]!==c&&((this.options[a]=c)?this._emulateHtmlBridge(): +this._destroyHtmlBridge())}return this},_refreshSize:function(){this._setSize();this._addUiClass();this._updateSize();this._updateButtons();this._updateAutohide();this._trigger(b.jPlayer.event.resize)},_setSize:function(){this.options.fullScreen?(this.status.width=this.options.sizeFull.width,this.status.height=this.options.sizeFull.height,this.status.cssClass=this.options.sizeFull.cssClass):(this.status.width=this.options.size.width,this.status.height=this.options.size.height,this.status.cssClass= +this.options.size.cssClass);this.element.css({width:this.status.width,height:this.status.height})},_addUiClass:function(){this.ancestorJq.length&&this.ancestorJq.addClass(this.status.cssClass)},_removeUiClass:function(){this.ancestorJq.length&&this.ancestorJq.removeClass(this.status.cssClass)},_updateSize:function(){this.internal.poster.jq.css({width:this.status.width,height:this.status.height});!this.status.waitForPlay&&this.html.active&&this.status.video||this.html.video.available&&this.html.used&& +this.status.nativeVideoControls?this.internal.video.jq.css({width:this.status.width,height:this.status.height}):!this.status.waitForPlay&&this.flash.active&&this.status.video&&this.internal.flash.jq.css({width:this.status.width,height:this.status.height})},_updateAutohide:function(){var a=this,b=function(){a.css.jq.gui.fadeIn(a.options.autohide.fadeIn,function(){clearTimeout(a.internal.autohideId);a.internal.autohideId=setTimeout(function(){a.css.jq.gui.fadeOut(a.options.autohide.fadeOut)},a.options.autohide.hold)})}; +this.css.jq.gui.length&&(this.css.jq.gui.stop(!0,!0),clearTimeout(this.internal.autohideId),this.element.unbind(".jPlayerAutohide"),this.css.jq.gui.unbind(".jPlayerAutohide"),this.status.nativeVideoControls?this.css.jq.gui.hide():this.options.fullScreen&&this.options.autohide.full||!this.options.fullScreen&&this.options.autohide.restored?(this.element.bind("mousemove.jPlayer.jPlayerAutohide",b),this.css.jq.gui.bind("mousemove.jPlayer.jPlayerAutohide",b),this.css.jq.gui.hide()):this.css.jq.gui.show())}, +fullScreen:function(){this._setOption("fullScreen",!0)},restoreScreen:function(){this._setOption("fullScreen",!1)},_html_initMedia:function(){this.htmlElement.media.src=this.status.src;this.options.preload!=="none"&&this._html_load();this._trigger(b.jPlayer.event.timeupdate)},_html_setAudio:function(a){var c=this;b.each(this.formats,function(b,e){if(c.html.support[e]&&a[e])return c.status.src=a[e],c.status.format[e]=!0,c.status.formatType=e,!1});this.htmlElement.media=this.htmlElement.audio;this._html_initMedia()}, +_html_setVideo:function(a){var c=this;b.each(this.formats,function(b,e){if(c.html.support[e]&&a[e])return c.status.src=a[e],c.status.format[e]=!0,c.status.formatType=e,!1});if(this.status.nativeVideoControls)this.htmlElement.video.poster=this._validString(a.poster)?a.poster:"";this.htmlElement.media=this.htmlElement.video;this._html_initMedia()},_html_resetMedia:function(){this.htmlElement.media&&(this.htmlElement.media.id===this.internal.video.id&&!this.status.nativeVideoControls&&this.internal.video.jq.css({width:"0px", +height:"0px"}),this.htmlElement.media.pause())},_html_clearMedia:function(){if(this.htmlElement.media)this.htmlElement.media.src="",this.htmlElement.media.load()},_html_load:function(){if(this.status.waitForLoad)this.status.waitForLoad=!1,this.htmlElement.media.load();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=!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 a<b?b:a>d?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<Na4rBtb45%RwP-U<KO literal 0 HcmV?d00001 From 3dbedc3a56b523d131d33acac39262d7b7743bc3 Mon Sep 17 00:00:00 2001 From: martin <martin@martin-ThinkPad-T410.(none)> 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 @@ <?php class Application_Model_StreamSetting { - public function __construct(){ - + + /* Returns the id's of all streams that are enabled in an array. An + * example of the array returned in JSON notation is ["s1", "s2", "s3"] */ + public static function getEnabledStreamIds(){ + global $CC_DBC; + $sql = "SELECT * " + ."FROM cc_stream_setting " + ."WHERE keyname LIKE '%_output' " + ."AND value != 'disabled'"; + + $rows = $CC_DBC->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")}); }); </script> <div class="jp-logo"></div> <div class="jp-stream"> <div class="jp-stream-text">Select stream:</div> <form id="form1" method="post" action=""> + + <?php $ids = Application_Model_StreamSetting::getEnabledStreamIds(); + foreach($ids as $id): + $streamData = Application_Model_StreamSetting::getStreamData($id); + Logging::log("id: ".print_r($streamData, true)); + ?> <label> - <input type="radio" name="select-stream" value="radio" id="select-stream_0" checked="checked" /> - 48 Kbit/s</label> - <label> - <input type="radio" name="select-stream" value="radio" id="select-stream_1" /> - 96 Kbit/s</label> - <label> - <input type="radio" name="select-stream" value="radio" id="select-stream_2" /> - 192 Kbit/s</label> + <input class='bit-rates' type="radio" name="select-stream" value="radio" id="select-stream_<?php echo $id ?>" checked="checked" /> + <?php echo "Stream ".substr($id, 1)." (".$streamData["${id}_bitrate"]; ?> Kbit/s)</label> + <?php endforeach; ?> </form> </div> <div id="jquery_jplayer_1" class="jp-jplayer"></div> From 5418ce46010d694296c92eeaca3dc240b94ec550 Mon Sep 17 00:00:00 2001 From: martin <martin@martin-ThinkPad-T410.(none)> 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 @@ <div id="content" class="jp-container"> +<?php $ids = Application_Model_StreamSetting::getEnabledStreamIds(); ?> <script> -$(document).ready(function(){ - +function setjPlayer(url, type){ + var obj = new Object(); + obj[type] = url; + + $("#jquery_jplayer_1").jPlayer("destroy"); $("#jquery_jplayer_1").jPlayer({ ready: function () { - $(this).jPlayer("setMedia", { - oga: "http://localhost:8000/airtime_128" - }).jPlayer("play"); + $(this).jPlayer("setMedia", obj).jPlayer("play"); }, ended: function (event) { $(this).jPlayer("play"); }, swfPath: "js", - supplied: "oga", + supplied: type, wmode: "window" }); +} + +$(document).ready(function(){ - $('.bit-rates').click(function(){console.log("click")}); + $('.bit-rates').click(function(eventObject){ + var elem = $(eventObject.target); + + setjPlayer(elem.attr("data-url"), elem.attr("data-type")); + }); + + <?php + if (count($ids) > 0){ + $id = $ids[0]; + $streamData = Application_Model_StreamSetting::getStreamData($id); + $url = "http://".$streamData["${id}_host"].":".$streamData["${id}_port"]."/".$streamData["${id}_mount"]; + $type = $streamData["${id}_type"]; + if ($type == "ogg") + $type = "oga"; + echo "setjPlayer('$url', '$type');"; + } + ?> }); </script> <div class="jp-logo"></div> @@ -24,15 +45,22 @@ $(document).ready(function(){ <div class="jp-stream-text">Select stream:</div> <form id="form1" method="post" action=""> - <?php $ids = Application_Model_StreamSetting::getEnabledStreamIds(); + <?php + $i=0; foreach($ids as $id): $streamData = Application_Model_StreamSetting::getStreamData($id); Logging::log("id: ".print_r($streamData, true)); + + $url = "http://".$streamData["${id}_host"].":".$streamData["${id}_port"]."/".$streamData["${id}_mount"]; + $type = $streamData["${id}_type"]; + + if ($type == "ogg") + $type = "oga"; ?> <label> - <input class='bit-rates' type="radio" name="select-stream" value="radio" id="select-stream_<?php echo $id ?>" checked="checked" /> + <input class='bit-rates' type="radio" name="select-stream" value="radio" data-url="<?php echo $url ?>" data-type="<?php echo $type ?>" id="select-stream_<?php echo $id ?>" <?php echo $i==0 ? "checked=\"checked\"": ""; ?>/> <?php echo "Stream ".substr($id, 1)." (".$streamData["${id}_bitrate"]; ?> Kbit/s)</label> - <?php endforeach; ?> + <?php $i++; endforeach; ?> </form> </div> <div id="jquery_jplayer_1" class="jp-jplayer"></div> From 1cbc098e919159e85cedfea370d5e1533e56011d Mon Sep 17 00:00:00 2001 From: martin <martin@martin-ThinkPad-T410.(none)> 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 <martin@martin-ThinkPad-T410.(none)> 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);