diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index fcac1a8db..3270000d2 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -45,7 +45,9 @@ class Application_Model_StoredFile { "mime" => "DbMime", "md5" => "DbMd5", "ftype" => "DbFtype", - "language" => "DbLanguage" + "language" => "DbLanguage", + "filepath" => "DbFilepath", + "directory" => "DbDirectory" ); public function __construct() @@ -223,7 +225,19 @@ class Application_Model_StoredFile { foreach ($c['user'] as $constant => $value) { if (preg_match('/^MDATA_KEY/', $constant)) { if (isset($this->_dbMD[$value])) { - $md[$constant] = $this->getDbColMetadataValue($value); + if ($value == 'filepath') { + $directoryPK = $this->getDbColMetadataValue('directory'); + if ($directoryPK == 1) { + $musicDir = Application_Model_MusicDir::getDirByPK($directoryPK); + $md[$constant] = $musicDir->getDirectory() . $this->getDbColMetadataValue($value); + } + else { + $md[$constant] = $this->getDbColMetadataValue($value); + } + } + else { + $md[$constant] = $this->getDbColMetadataValue($value); + } } } } @@ -686,7 +700,7 @@ Logging::log("getting media! - 2"); if($type == "au"){//&& isset( $audioResults )) { $row['audioFile'] = $row['gunid'].".".pathinfo($row['filepath'], PATHINFO_EXTENSION); - $row['image'] = ''; + $row['image'] = ''; } else { $row['image'] = ''; diff --git a/airtime_mvc/application/views/scripts/library/get-file-meta-data.ajax.phtml b/airtime_mvc/application/views/scripts/library/get-file-meta-data.ajax.phtml index 4e0caf69d..76f62b86a 100644 --- a/airtime_mvc/application/views/scripts/library/get-file-meta-data.ajax.phtml +++ b/airtime_mvc/application/views/scripts/library/get-file-meta-data.ajax.phtml @@ -17,6 +17,7 @@
Isrc Number:md["MDATA_KEY_ISRC"]);?>
Website:md["MDATA_KEY_URL"]);?>
Language:md["MDATA_KEY_LANGUAGE"]);?>
+
File Path:md["MDATA_KEY_FILEPATH"]);?>
diff --git a/airtime_mvc/public/js/airtime/dashboard/playlist.js b/airtime_mvc/public/js/airtime/dashboard/playlist.js index c61254857..a2d3d184e 100644 --- a/airtime_mvc/public/js/airtime/dashboard/playlist.js +++ b/airtime_mvc/public/js/airtime/dashboard/playlist.js @@ -91,7 +91,7 @@ function updateProgressBarValue(){ songPercentDone = 0; currentSong = null; } else { - if (currentSong.media_item_played == true && currentShow.length > 0){ + if (currentShow.length > 0){ scheduled_play_line_to_switch.attr("class", "line-to-switch on"); scheduled_play_div.addClass("ready") scheduled_play_source = true; diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index 4a115b120..19cc42d9c 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -409,7 +409,7 @@ var AIRTIME = (function(AIRTIME){ $image = $(nRow).find('td.sb-image'); //check if the file exists. if (aData.image === true) { - $image.html('') + $image.html('') .click(function() { open_show_preview(aData.instance, aData.pos); return false; diff --git a/install_full/ubuntu/airtime-full-install b/install_full/ubuntu/airtime-full-install index 7f2892500..613f9ba5b 100755 --- a/install_full/ubuntu/airtime-full-install +++ b/install_full/ubuntu/airtime-full-install @@ -35,7 +35,7 @@ apt-get update # Updated package list apt-get -y install tar gzip curl apache2 php5-pgsql libapache2-mod-php5 \ -php-pear php5-gd postgresql odbc-postgresql python2.6 libsoundtouch-ocaml \ +php-pear php5-gd postgresql odbc-postgresql python libsoundtouch-ocaml \ libtaglib-ocaml libao-ocaml libmad-ocaml ecasound \ libesd0 libportaudio2 libsamplerate0 rabbitmq-server patch \ php5-curl mpg123 monit python-virtualenv multitail libcamomile-ocaml-data \ diff --git a/install_full/ubuntu/airtime-full-install-nginx b/install_full/ubuntu/airtime-full-install-nginx index 049168739..c474f255d 100755 --- a/install_full/ubuntu/airtime-full-install-nginx +++ b/install_full/ubuntu/airtime-full-install-nginx @@ -38,7 +38,7 @@ apt-get update # Updated package list apt-get -y install tar gzip curl nginx php5-pgsql php5-fpm \ -php-pear php5-gd postgresql odbc-postgresql python2.6 libsoundtouch-ocaml \ +php-pear php5-gd postgresql odbc-postgresql python libsoundtouch-ocaml \ libtaglib-ocaml libao-ocaml libmad-ocaml ecasound \ libesd0 libportaudio2 libsamplerate0 rabbitmq-server patch \ php5-curl mpg123 monit python-virtualenv multitail libcamomile-ocaml-data \ diff --git a/install_minimal/include/airtime-copy-files.sh b/install_minimal/include/airtime-copy-files.sh index 62ac6524a..e173842d9 100755 --- a/install_minimal/include/airtime-copy-files.sh +++ b/install_minimal/include/airtime-copy-files.sh @@ -35,7 +35,9 @@ AIRTIMEROOT=$SCRIPTPATH/../../ echo "* Creating /etc/airtime" mkdir -p /etc/airtime -if [ ! -e /etc/airtime/airtime.conf ]; then +#if [ ! -e /etc/airtime/airtime.conf ]; then +if [ "$DO_UPGRADE" -eq "0" ]; then + #We aren't doing an upgrade so simply overwrite the config files. cp $AIRTIMEROOT/airtime_mvc/build/airtime.conf /etc/airtime fi @@ -62,9 +64,6 @@ if [ "$python_service" -eq "0" ]; then if [ "$pypo" = "t" ]; then python $AIRTIMEROOT/python_apps/pypo/install/pypo-copy-files.py fi - #if [ "$showrecorder" = "t" ]; then - # python $AIRTIMEROOT/python_apps/show-recorder/install/recorder-copy-files.py - #fi fi mkdir -p /usr/lib/airtime diff --git a/install_minimal/include/airtime-initialize.sh b/install_minimal/include/airtime-initialize.sh index 5383ff311..d3d6cdfed 100755 --- a/install_minimal/include/airtime-initialize.sh +++ b/install_minimal/include/airtime-initialize.sh @@ -36,10 +36,6 @@ fi if [ "$pypo" = "t" ]; then python $AIRTIMEROOT/python_apps/pypo/install/pypo-initialize.py fi -#if [ "$showrecorder" = "t" ]; then -# python $AIRTIMEROOT/python_apps/show-recorder/install/recorder-initialize.py -#fi - # Start monit if it is not running, or restart if it is. # Need to ensure monit is running before Airtime daemons are run. This is diff --git a/install_minimal/include/airtime-installed-check.php b/install_minimal/include/airtime-installed-check.php index e4ad0bbf9..f65f44bbf 100644 --- a/install_minimal/include/airtime-installed-check.php +++ b/install_minimal/include/airtime-installed-check.php @@ -15,6 +15,8 @@ require_once(__DIR__.'/airtime-constants.php'); AirtimeInstall::ExitIfNotRoot(); if (!file_exists('/etc/airtime/airtime.conf')) { + #airtime.conf doesn't exist, and we need it to connect to database + #Assume Airtime is not installed. return 0; } diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index c98b0358c..b2aa1d586 100755 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python2.6 -# -*- coding: utf-8 -*- - ############################################################################### # This file holds the implementations for all the API clients. # diff --git a/python_apps/media-monitor/airtimefilemonitor/mediamonitorcommon.py b/python_apps/media-monitor/airtimefilemonitor/mediamonitorcommon.py index 7a6e833c1..b28b1dfcd 100644 --- a/python_apps/media-monitor/airtimefilemonitor/mediamonitorcommon.py +++ b/python_apps/media-monitor/airtimefilemonitor/mediamonitorcommon.py @@ -64,7 +64,6 @@ class MediaMonitorCommon: except IOError: self.logger.warn("File does not have correct permissions: '%s'", filepath) readable = False - self.logger.error("traceback: %s", traceback.format_exc()) except Exception, e: self.logger.error("Unexpected exception thrown: %s", e) readable = False diff --git a/python_apps/pypo/airtime-playout-init-d b/python_apps/pypo/airtime-playout-init-d index a640cd312..8cecf7c36 100755 --- a/python_apps/pypo/airtime-playout-init-d +++ b/python_apps/pypo/airtime-playout-init-d @@ -28,7 +28,7 @@ liquidsoap_start () { liquidsoap_stop () { monit unmonitor airtime-liquidsoap >/dev/null 2>&1 - /usr/lib/airtime/airtime_virtualenv/bin/python2.6 /usr/lib/airtime/pypo/bin/liquidsoap_scripts/liquidsoap_prepare_terminate.py + /usr/lib/airtime/airtime_virtualenv/bin/python /usr/lib/airtime/pypo/bin/liquidsoap_scripts/liquidsoap_prepare_terminate.py # Send TERM after 5 seconds, wait at most 30 seconds. start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE1 @@ -65,7 +65,7 @@ monit_restart() { start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE0 rm -f $PIDFILE0 - /usr/lib/airtime/airtime_virtualenv/bin/python2.6 /usr/lib/airtime/pypo/bin/liquidsoap_scripts/liquidsoap_prepare_terminate.py + /usr/lib/airtime/airtime_virtualenv/bin/python /usr/lib/airtime/pypo/bin/liquidsoap_scripts/liquidsoap_prepare_terminate.py start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE1 rm -f $PIDFILE1 diff --git a/python_apps/pypo/install/pypo-initialize.py b/python_apps/pypo/install/pypo-initialize.py index 10d9d9bcd..daccc8d9c 100644 --- a/python_apps/pypo/install/pypo-initialize.py +++ b/python_apps/pypo/install/pypo-initialize.py @@ -7,6 +7,8 @@ sys.path.append('/usr/lib/airtime/') from api_clients import api_client from configobj import ConfigObj +import logging + if os.geteuid() != 0: print "Please run this as root." sys.exit(1) @@ -100,10 +102,11 @@ try: print e sys.exit(1) + logging.basicConfig(format='%(message)s') #generate liquidsoap config file #access the DB and generate liquidsoap.cfg under /etc/airtime/ - ac = api_client.api_client_factory(config) + ac = api_client.api_client_factory(config, logging.getLogger()) ss = ac.get_stream_setting() if ss is not None: diff --git a/python_apps/pypo/pypopush.py b/python_apps/pypo/pypopush.py index 0b66e7a08..6e8592c68 100644 --- a/python_apps/pypo/pypopush.py +++ b/python_apps/pypo/pypopush.py @@ -57,6 +57,7 @@ class PypoPush(Thread): next_media_item_chain = None media_schedule = None time_until_next_play = None + chains = None while True: try: @@ -65,10 +66,11 @@ class PypoPush(Thread): else: media_schedule = self.queue.get(block=True, timeout=time_until_next_play) + chains = self.get_all_chains(media_schedule) + #We get to the following lines only if a schedule was received. liquidsoap_queue_approx = self.get_queue_items_from_liquidsoap() - chains = self.get_all_chains(media_schedule) current_event_chain = self.get_current_chain(chains) if len(current_event_chain) > 0 and len(liquidsoap_queue_approx) == 0: #Something is scheduled but Liquidsoap is not playing anything! @@ -79,8 +81,10 @@ class PypoPush(Thread): else: media_chain = filter(lambda item: (item["type"] == "file"), current_event_chain) self.handle_new_media_schedule(media_schedule, liquidsoap_queue_approx, media_chain) - chains = self.get_all_chains(media_schedule) + + #chains = self.get_all_chains(media_schedule) next_media_item_chain = self.get_next_schedule_chain(chains) + self.logger.debug("Next schedule chain: %s", next_media_item_chain) if next_media_item_chain is not None: tnow = datetime.utcnow() @@ -93,11 +97,9 @@ class PypoPush(Thread): except Empty, e: #We only get here when a new chain of tracks are ready to be played. self.push_to_liquidsoap(next_media_item_chain) + + chains.remove(next_media_item_chain) - #TODO - time.sleep(2) - - chains = self.get_all_chains(media_schedule) next_media_item_chain = self.get_next_schedule_chain(chains) if next_media_item_chain is not None: tnow = datetime.utcnow() diff --git a/python_apps/python-virtualenv/virtualenv-install.sh b/python_apps/python-virtualenv/virtualenv-install.sh index 757d22008..0d9a2e2b8 100755 --- a/python_apps/python-virtualenv/virtualenv-install.sh +++ b/python_apps/python-virtualenv/virtualenv-install.sh @@ -38,27 +38,30 @@ echo -e "\n*** Creating Virtualenv for Airtime ***" EXTRAOPTION=$(virtualenv --help | grep extra-search-dir) if [ "$?" -eq "0" ]; then - virtualenv --extra-search-dir=${SCRIPTPATH}/3rd_party --no-site-package -p /usr/bin/python2.6 /usr/lib/airtime/airtime_virtualenv 2>/dev/null || exit 1 + virtualenv --extra-search-dir=${SCRIPTPATH}/3rd_party --no-site-package -p /usr/bin/python /usr/lib/airtime/airtime_virtualenv 2>/dev/null || exit 1 else # copy distribute-0.6.10.tar.gz to /usr/share/python-virtualenv/ # this is due to the bug in virtualenv 1.4.9 if [ -d "$VIRTUAL_ENV_SHARE" ]; then cp ${SCRIPTPATH}/3rd_party/distribute-0.6.10.tar.gz /usr/share/python-virtualenv/ fi - virtualenv --no-site-package -p /usr/bin/python2.6 /usr/lib/airtime/airtime_virtualenv 2>/dev/null || exit 1 + virtualenv --no-site-package -p /usr/bin/python /usr/lib/airtime/airtime_virtualenv 2>/dev/null || exit 1 fi echo -e "\n*** Installing Python Libraries ***" -/usr/lib/airtime/airtime_virtualenv/bin/pip install ${SCRIPTPATH}/airtime_virtual_env.pybundle -E /usr/lib/airtime/airtime_virtualenv || exit 1 +/usr/lib/airtime/airtime_virtualenv/bin/pip install ${SCRIPTPATH}/airtime_virtual_env.pybundle || exit 1 + +PYTHON_VERSION=$(python -c "import sys; print 'python%s.%s' % (sys.version_info[0], sys.version_info[1])") echo -e "\n*** Patching Python Libraries ***" +echo " * Patching virtualenv libraries in /usr/lib/airtime/airtime_virtualenv/lib/$PYTHON_VERSION" PATCHES=${SCRIPTPATH}/patches/* for file in $(find $PATCHES -print); do if [ -d $file ]; then DIRNAME=$(basename $file) echo -e "\n ---Applying Patches for $DIRNAME---" else - patch -N -p0 -i $file + patch -N -p7 -i $file -d /usr/lib/airtime/airtime_virtualenv/lib/$PYTHON_VERSION fi done exit 0