Merge branch 'devel' of dev.sourcefabric.org:airtime into devel

This commit is contained in:
Martin Konecny 2012-09-10 15:35:42 -04:00
commit e85ea5c683
12 changed files with 58 additions and 44 deletions

View File

@ -32,7 +32,9 @@ class Application_Model_Datatables
} }
if (!empty($sub)) { if (!empty($sub)) {
$where['clause'][$dbname] = "(".implode(' AND ', $sub).")"; $where['clause'][$dbname] = "(".implode(' AND ', $sub).")";
$where['params'][$dbname."1"] = $input1; if ($input1 != null) {
$where['params'][$dbname."1"] = $input1;
}
if ($input2 != null) { if ($input2 != null) {
$where['params'][$dbname."2"] = $input2; $where['params'][$dbname."2"] = $input2;
} }
@ -44,7 +46,6 @@ class Application_Model_Datatables
} }
} }
} }
return $where; return $where;
} }
/* /*

View File

@ -79,16 +79,29 @@ class Application_Model_MusicDir
$music_dir_id = $this->getId(); $music_dir_id = $this->getId();
$sql = "SELECT DISTINCT s.instance_id from cc_music_dirs as md " $sql = <<<SQL
." LEFT JOIN cc_files as f on f.directory = md.id" SELECT DISTINCT s.instance_id
." RIGHT JOIN cc_schedule as s on s.file_id = f.id WHERE md.id = $music_dir_id"; FROM cc_music_dirs AS md
LEFT JOIN cc_files AS f ON f.directory = md.id
$show_instances = $con->query($sql)->fetchAll(); RIGHT JOIN cc_schedule AS s ON s.file_id = f.id
WHERE md.id = :musicDirId;
SQL;
$show_instances = Application_Common_Database::prepareAndExecute($sql,
array( ':musicDirId' => $music_dir_id ), 'all' );
// get all the files on this dir // get all the files on this dir
$sql = "UPDATE cc_files SET file_exists = 'f' WHERE id IN (SELECT f.id FROM cc_music_dirs as md " $sql = <<<SQL
." LEFT JOIN cc_files as f on f.directory = md.id WHERE md.id = $music_dir_id)"; UPDATE cc_files
$affected = $con->exec($sql); SET file_exists = 'f'
WHERE id IN
(SELECT f.id
FROM cc_music_dirs AS md
LEFT JOIN cc_files AS f ON f.directory = md.id
WHERE md.id = :musicDirId);
SQL;
$affected = Application_Common_Database::prepareAndExecute($sql,
array( ':musicDirId' => $music_dir_id ), 'all');
// set RemovedFlag to true // set RemovedFlag to true
if ($userAddedWatchedDir) { if ($userAddedWatchedDir) {

View File

@ -1117,12 +1117,6 @@ SQL;
*/ */
//$se = $show_end->format('Y-m-d H:i:s'); //$se = $show_end->format('Y-m-d H:i:s');
if ($update) { if ($update) {
$sql = "SELECT id, starts, ends FROM ".$CC_CONFIG["showInstances"]."
where (ends <= '{$show_end->format('Y-m-d H:i:s')}'
or starts <= '{$show_end->format('Y-m-d H:i:s')}')
and date(starts) >= (date('{$show_end->format('Y-m-d H:i:s')}') - INTERVAL '2 days')
and modified_instance = false and id != ".$instanceId. " order by ends";
$stmt = $con->prepare("SELECT id, starts, ends FROM {$CC_CONFIG['showInstances']} $stmt = $con->prepare("SELECT id, starts, ends FROM {$CC_CONFIG['showInstances']}
where (ends <= :show_end1 where (ends <= :show_end1
or starts <= :show_end2) or starts <= :show_end2)
@ -1136,13 +1130,6 @@ SQL;
':instanceId' => $instanceId ':instanceId' => $instanceId
)); ));
} else { } else {
// TODO : Remove raw sql later
$sql = "SELECT id, starts, ends FROM ".$CC_CONFIG["showInstances"]."
where (ends <= '{$show_end->format('Y-m-d H:i:s')}'
or starts <= '{$show_end->format('Y-m-d H:i:s')}')
and date(starts) >= (date('{$show_end->format('Y-m-d H:i:s')}') - INTERVAL '2 days')
and modified_instance = false order by ends";
$stmt = $con->prepare("SELECT id, starts, ends FROM $stmt = $con->prepare("SELECT id, starts, ends FROM
{$CC_CONFIG['showInstances']} {$CC_CONFIG['showInstances']}
where (ends <= :show_end1 or starts <= :show_end2) where (ends <= :show_end1 or starts <= :show_end2)
@ -1155,7 +1142,6 @@ SQL;
':show_end3' => $show_end->format('Y-m-d H:i:s') ':show_end3' => $show_end->format('Y-m-d H:i:s')
)); ));
} }
//$rows = $con->query($sql);
$rows = $stmt->fetchAll(); $rows = $stmt->fetchAll();
foreach ($rows as $row) { foreach ($rows as $row) {

View File

@ -816,7 +816,7 @@ SQL;
$sql = <<<SQL $sql = <<<SQL
SELECT count(*) AS cnt SELECT count(*) AS cnt
FROM cc_show_instances FROM cc_show_instances
WHERE ends < '$day' WHERE ends < :day
SQL; SQL;
return Application_Common_Database::prepareAndExecute( $sql, return Application_Common_Database::prepareAndExecute( $sql,
array( ':day' => $day ), 'column' ); array( ':day' => $day ), 'column' );

View File

@ -652,7 +652,7 @@ class Application_Model_StoredFile
$displayColumns = array("id", "track_title", "artist_name", "album_title", "genre", "length", $displayColumns = array("id", "track_title", "artist_name", "album_title", "genre", "length",
"year", "utime", "mtime", "ftype", "track_number", "mood", "bpm", "composer", "info_url", "year", "utime", "mtime", "ftype", "track_number", "mood", "bpm", "composer", "info_url",
"bit_rate", "sample_rate", "isrc_number", "encoded_by", "label", "copyright", "mime", "bit_rate", "sample_rate", "isrc_number", "encoded_by", "label", "copyright", "mime",
"language", "filepath","owner","conductor" "language", "filepath", "owner", "conductor", "replay_gain"
); );
//Logging::info($datatables); //Logging::info($datatables);
@ -688,6 +688,11 @@ class Application_Model_StoredFile
$blSelect[] = "login AS ".$key; $blSelect[] = "login AS ".$key;
$fileSelect[] = "sub.login AS $key"; $fileSelect[] = "sub.login AS $key";
$streamSelect[] = "login AS ".$key; $streamSelect[] = "login AS ".$key;
} elseif ($key === "replay_gain") {
$plSelect[] = "NULL::NUMERIC AS ".$key;
$blSelect[] = "NULL::NUMERIC AS ".$key;
$fileSelect[] = "replay_gain AS $key";
$streamSelect[] = "NULL::NUMERIC AS ".$key;
} }
//same columns in each table. //same columns in each table.
else if (in_array($key, array("length", "utime", "mtime"))) { else if (in_array($key, array("length", "utime", "mtime"))) {

View File

@ -100,7 +100,7 @@ class CcFilesTableMap extends TableMap {
$this->addColumn('SOUNDCLOUD_ERROR_MSG', 'DbSoundcloudErrorMsg', 'VARCHAR', false, 512, null); $this->addColumn('SOUNDCLOUD_ERROR_MSG', 'DbSoundcloudErrorMsg', 'VARCHAR', false, 512, null);
$this->addColumn('SOUNDCLOUD_LINK_TO_FILE', 'DbSoundcloudLinkToFile', 'VARCHAR', false, 4096, null); $this->addColumn('SOUNDCLOUD_LINK_TO_FILE', 'DbSoundcloudLinkToFile', 'VARCHAR', false, 4096, null);
$this->addColumn('SOUNDCLOUD_UPLOAD_TIME', 'DbSoundCloundUploadTime', 'TIMESTAMP', false, 6, null); $this->addColumn('SOUNDCLOUD_UPLOAD_TIME', 'DbSoundCloundUploadTime', 'TIMESTAMP', false, 6, null);
$this->addColumn('REPLAY_GAIN', 'DbReplayGain', 'VARCHAR', false, 16, null); $this->addColumn('REPLAY_GAIN', 'DbReplayGain', 'NUMERIC', false, null, null);
$this->addForeignKey('OWNER_ID', 'DbOwnerId', 'INTEGER', 'cc_subjs', 'ID', false, null, null); $this->addForeignKey('OWNER_ID', 'DbOwnerId', 'INTEGER', 'cc_subjs', 'ID', false, null, null);
// validators // validators
} // initialize() } // initialize()

View File

@ -1892,20 +1892,29 @@ abstract class BaseCcFilesQuery extends ModelCriteria
/** /**
* Filter the query on the replay_gain column * Filter the query on the replay_gain column
* *
* @param string $dbReplayGain The value to use as filter. * @param string|array $dbReplayGain The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE) * Accepts an associative array('min' => $minValue, 'max' => $maxValue)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
* *
* @return CcFilesQuery The current query, for fluid interface * @return CcFilesQuery The current query, for fluid interface
*/ */
public function filterByDbReplayGain($dbReplayGain = null, $comparison = null) public function filterByDbReplayGain($dbReplayGain = null, $comparison = null)
{ {
if (null === $comparison) { if (is_array($dbReplayGain)) {
if (is_array($dbReplayGain)) { $useMinMax = false;
if (isset($dbReplayGain['min'])) {
$this->addUsingAlias(CcFilesPeer::REPLAY_GAIN, $dbReplayGain['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($dbReplayGain['max'])) {
$this->addUsingAlias(CcFilesPeer::REPLAY_GAIN, $dbReplayGain['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN; $comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $dbReplayGain)) {
$dbReplayGain = str_replace('*', '%', $dbReplayGain);
$comparison = Criteria::LIKE;
} }
} }
return $this->addUsingAlias(CcFilesPeer::REPLAY_GAIN, $dbReplayGain, $comparison); return $this->addUsingAlias(CcFilesPeer::REPLAY_GAIN, $dbReplayGain, $comparison);

View File

@ -74,7 +74,7 @@
<column name="soundcloud_error_msg" phpName="DbSoundcloudErrorMsg" type="VARCHAR" size="512" required="false"/> <column name="soundcloud_error_msg" phpName="DbSoundcloudErrorMsg" type="VARCHAR" size="512" required="false"/>
<column name="soundcloud_link_to_file" phpName="DbSoundcloudLinkToFile" type="VARCHAR" size="4096" required="false"/> <column name="soundcloud_link_to_file" phpName="DbSoundcloudLinkToFile" type="VARCHAR" size="4096" required="false"/>
<column name="soundcloud_upload_time" phpName="DbSoundCloundUploadTime" type="TIMESTAMP" size="6" required="false"/> <column name="soundcloud_upload_time" phpName="DbSoundCloundUploadTime" type="TIMESTAMP" size="6" required="false"/>
<column name="replay_gain" phpName="DbReplayGain" type="VARCHAR" size="16" required="false"/> <column name="replay_gain" phpName="DbReplayGain" type="NUMERIC" required="false"/>
<column name="owner_id" phpName="DbOwnerId" type="INTEGER" required="false"/> <column name="owner_id" phpName="DbOwnerId" type="INTEGER" required="false"/>
<foreign-key foreignTable="cc_subjs" phpName="FkOwner" name="cc_files_owner_fkey"> <foreign-key foreignTable="cc_subjs" phpName="FkOwner" name="cc_files_owner_fkey">
<reference local="owner_id" foreign="id"/> <reference local="owner_id" foreign="id"/>

View File

@ -92,7 +92,7 @@ CREATE TABLE "cc_files"
"soundcloud_error_msg" VARCHAR(512), "soundcloud_error_msg" VARCHAR(512),
"soundcloud_link_to_file" VARCHAR(4096), "soundcloud_link_to_file" VARCHAR(4096),
"soundcloud_upload_time" TIMESTAMP(6), "soundcloud_upload_time" TIMESTAMP(6),
"replay_gain" VARCHAR(16), "replay_gain" NUMERIC,
"owner_id" INTEGER, "owner_id" INTEGER,
PRIMARY KEY ("id") PRIMARY KEY ("id")
); );
@ -633,7 +633,7 @@ CREATE TABLE "cc_webstream"
"id" serial NOT NULL, "id" serial NOT NULL,
"name" VARCHAR(255) NOT NULL, "name" VARCHAR(255) NOT NULL,
"description" VARCHAR(255) NOT NULL, "description" VARCHAR(255) NOT NULL,
"url" VARCHAR(255) NOT NULL, "url" VARCHAR(512) NOT NULL,
"length" interval default '00:00:00' NOT NULL, "length" interval default '00:00:00' NOT NULL,
"creator_id" INTEGER NOT NULL, "creator_id" INTEGER NOT NULL,
"mtime" TIMESTAMP(6) NOT NULL, "mtime" TIMESTAMP(6) NOT NULL,

View File

@ -36,7 +36,8 @@ var AIRTIME = (function(AIRTIME) {
"track_title" : "s", "track_title" : "s",
"track_num" : "n", "track_num" : "n",
"year" : "n", "year" : "n",
"owner" : "s" "owner" : "s",
"replay_gain" : "n"
}; };
if (AIRTIME.library === undefined) { if (AIRTIME.library === undefined) {
@ -414,7 +415,8 @@ var AIRTIME = (function(AIRTIME) {
/* Mime */ { "sTitle" : "Mime" , "mDataProp" : "mime" , "bVisible" : false , "sClass" : "library_mime" , "sWidth" : "80px" } , /* Mime */ { "sTitle" : "Mime" , "mDataProp" : "mime" , "bVisible" : false , "sClass" : "library_mime" , "sWidth" : "80px" } ,
/* Language */ { "sTitle" : "Language" , "mDataProp" : "language" , "bVisible" : false , "sClass" : "library_language" , "sWidth" : "125px" } , /* Language */ { "sTitle" : "Language" , "mDataProp" : "language" , "bVisible" : false , "sClass" : "library_language" , "sWidth" : "125px" } ,
/* Owner */ { "sTitle" : "Owner" , "mDataProp" : "owner" , "bVisible" : false , "sClass" : "library_language" , "sWidth" : "125px" } , /* Owner */ { "sTitle" : "Owner" , "mDataProp" : "owner" , "bVisible" : false , "sClass" : "library_language" , "sWidth" : "125px" } ,
/* Conductor */ { "sTitle" : "Conductor" , "mDataProp" : "conductor" , "bVisible" : false , "sClass" : "library_conductor" , "sWidth" : "125px" } /* Conductor */ { "sTitle" : "Conductor" , "mDataProp" : "conductor" , "bVisible" : false , "sClass" : "library_conductor" , "sWidth" : "125px" },
/* Replay Gain */ { "sTitle" : "Replay Gain" , "mDataProp" : "replay_gain" , "bVisible" : false , "sClass" : "library_language" , "sWidth" : "125px" }
], ],
"bProcessing": true, "bProcessing": true,

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from kombu.messaging import Exchange, Queue, Consumer from kombu.messaging import Exchange, Queue, Consumer
from kombu.connection import BrokerConnection from kombu.connection import BrokerConnection
from os.path import normpath
import json import json
import os import os
@ -133,7 +134,7 @@ class AirtimeMessageReceiver(Loggable):
def remove_watch(self, msg): def remove_watch(self, msg):
self.logger.info("Removing watch from directory: '%s'" % self.logger.info("Removing watch from directory: '%s'" %
msg['directory']) msg['directory'])
self.manager.remove_watch_directory(msg['directory']) self.manager.remove_watch_directory(normpath(msg['directory']))
def rescan_watch(self, msg): def rescan_watch(self, msg):
self.logger.info("Trying to rescan watched directory: '%s'" % self.logger.info("Trying to rescan watched directory: '%s'" %

View File

@ -28,8 +28,6 @@ class Manager(Loggable):
include adding watched,store, organize directories, etc. Basically include adding watched,store, organize directories, etc. Basically
composes over WatchManager from pyinotify composes over WatchManager from pyinotify
""" """
global_inst = None
all_signals = set(['add_watch', 'remove_watch'])
def __init__(self): def __init__(self):
self.wm = pyinotify.WatchManager() self.wm = pyinotify.WatchManager()
# These two instance variables are assumed to be constant # These two instance variables are assumed to be constant
@ -66,7 +64,6 @@ class Manager(Loggable):
# The following set isn't really necessary anymore. Should be # The following set isn't really necessary anymore. Should be
# removed... # removed...
self.watched_directories = set([]) self.watched_directories = set([])
Manager.global_inst = self
# This is the only event that we are unable to process "normally". I.e. # This is the only event that we are unable to process "normally". I.e.
# through dedicated handler objects. Because we must have access to a # through dedicated handler objects. Because we must have access to a