diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php
index 9ce53ca02..9df1ddca2 100644
--- a/airtime_mvc/application/controllers/ScheduleController.php
+++ b/airtime_mvc/application/controllers/ScheduleController.php
@@ -909,7 +909,17 @@ class ScheduleController extends Zend_Controller_Action
$duration = $UTCEndDateTime->diff($UTCStartDateTime);
- $result = $duration->format('%r%Hh %Im');
+ $day = intval($duration->format('%d'));
+ if($day > 0){
+ $hour = intval($duration->format('%h'));
+ $min = intval($duration->format('%i'));
+ $hour += $day * 24;
+ $hour = min($hour, 99);
+ $sign = $duration->format('%r');
+ $result = sprintf('%s%02dh %02dm', $sign, $hour, $min);
+ }else{
+ $result = $duration->format('%r%Hh %Im');
+ }
}catch (Exception $e){
$result = "Invalid Date";
}
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 70031fa51..4bd962691 100644
--- a/airtime_mvc/public/js/airtime/showbuilder/builder.js
+++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js
@@ -414,7 +414,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..b46b1d621 100755
--- a/install_minimal/include/airtime-copy-files.sh
+++ b/install_minimal/include/airtime-copy-files.sh
@@ -35,6 +35,7 @@ AIRTIMEROOT=$SCRIPTPATH/../../
echo "* Creating /etc/airtime"
mkdir -p /etc/airtime
+#if [ "$DO_UPGRADE" -eq "0" ]; then
if [ ! -e /etc/airtime/airtime.conf ]; then
cp $AIRTIMEROOT/airtime_mvc/build/airtime.conf /etc/airtime
fi
@@ -62,9 +63,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/install_minimal/include/airtime-upgrade.php b/install_minimal/include/airtime-upgrade.php
index 6eef3441c..fdbe4c175 100644
--- a/install_minimal/include/airtime-upgrade.php
+++ b/install_minimal/include/airtime-upgrade.php
@@ -5,8 +5,6 @@
* @copyright 2010 Sourcefabric O.P.S.
* @license http://www.gnu.org/licenses/gpl.txt
*/
-
-require_once('DB.php');
require_once(__DIR__.'/airtime-constants.php');
require_once(dirname(__FILE__).'/AirtimeIni.php');
require_once(dirname(__FILE__).'/AirtimeInstall.php');
diff --git a/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php b/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php
index f3b00b8d9..9c08f51e0 100644
--- a/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php
+++ b/install_minimal/upgrades/airtime-2.1.0/DbUpgrade.php
@@ -15,7 +15,7 @@ class AirtimeDatabaseUpgrade{
UpgradeCommon::MigrateTablesToVersion(__DIR__, '20120411174904');
$sql = "INSERT INTO cc_pref(\"keystr\", \"valstr\") VALUES('scheduled_play_switch', 'on')";
- UpgradeCommon::nonSelectQueryDb($sql);
+ UpgradeCommon::queryDb($sql);
}
/*
diff --git a/install_minimal/upgrades/airtime-2.1.0/airtime-upgrade.php b/install_minimal/upgrades/airtime-2.1.0/airtime-upgrade.php
index da60de58f..6ed58eb87 100644
--- a/install_minimal/upgrades/airtime-2.1.0/airtime-upgrade.php
+++ b/install_minimal/upgrades/airtime-2.1.0/airtime-upgrade.php
@@ -23,6 +23,9 @@ function get_conf_location(){
$conf_path = get_conf_location();
require_once $conf_path;
+set_include_path(__DIR__.'/../../../airtime_mvc/library' . PATH_SEPARATOR . get_include_path());
+
+require_once 'propel/runtime/lib/Propel.php';
require_once 'common/UpgradeCommon.php';
require_once 'ConfFileUpgrade.php';
require_once 'DbUpgrade.php';
diff --git a/install_minimal/upgrades/airtime-2.1.0/common/UpgradeCommon.php b/install_minimal/upgrades/airtime-2.1.0/common/UpgradeCommon.php
index cc8ee35e0..07e63db99 100644
--- a/install_minimal/upgrades/airtime-2.1.0/common/UpgradeCommon.php
+++ b/install_minimal/upgrades/airtime-2.1.0/common/UpgradeCommon.php
@@ -1,7 +1,4 @@
getMessage().PHP_EOL;
- echo $CC_DBC->getUserInfo().PHP_EOL;
+ try {
+ $con = Propel::getConnection();
+ } catch (Exception $e) {
+ echo $e->getMessage().PHP_EOL;
echo "Database connection problem.".PHP_EOL;
- echo "Check if database '{$CC_CONFIG['dsn']['database']}' exists".
- " with corresponding permissions.".PHP_EOL;
+ echo "Check if database exists with corresponding permissions.".PHP_EOL;
if ($p_exitOnError) {
exit(1);
}
- } else {
- $CC_DBC->setFetchMode(DB_FETCHMODE_ASSOC);
+ return false;
}
+ return true;
}
public static function DbTableExists($p_name)
{
- global $CC_DBC;
- $sql = "SELECT * FROM ".$p_name;
- $result = $CC_DBC->GetOne($sql);
- if (PEAR::isError($result)) {
+ $con = Propel::getConnection();
+ try {
+ $sql = "SELECT * FROM ".$p_name." LIMIT 1";
+ $con->query($sql);
+ } catch (PDOException $e){
return false;
}
return true;
@@ -238,27 +234,16 @@ class UpgradeCommon{
fclose($fp);
}
- public static function selectQueryDb($p_sql){
- global $CC_DBC;
+ public static function queryDb($p_sql){
+ $con = Propel::getConnection();
- $result = $CC_DBC->getRow($p_sql, $fetchmode=DB_FETCHMODE_ASSOC);
- if (PEAR::isError($result)) {
- echo "Error executing $sql. Exiting.";
+ try {
+ $result = $con->exec($p_sql);
+ } catch (Exception $e) {
+ echo "Error executing $p_sql. Exiting.";
exit(1);
}
-
- return $result;
- }
-
- public static function nonSelectQueryDb($p_sql){
- global $CC_DBC;
- $result = $CC_DBC->query($p_sql);
- if (PEAR::isError($result)) {
- echo "Error executing $sql. Exiting.";
- exit(1);
- }
-
return $result;
}
}
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