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

This commit is contained in:
James 2011-07-25 16:25:07 -04:00
commit d94357e5e5
6 changed files with 132 additions and 45 deletions

View file

@ -449,11 +449,11 @@ class ApiController extends Zend_Controller_Action
if (is_null($file)) {
$file = StoredFile::Insert($md);
} else {
}
else {
$this->view->error = "File already exists in Airtime.";
return;
}
}
else if ($mode == "modify") {
$filepath = $md['MDATA_KEY_FILEPATH'];

View file

@ -144,6 +144,40 @@ class MusicDir {
{
$res = self::addDir($p_path, "watched");
if ($res['code'] == 0){
//convert "linked" files (Airtime <= 1.8.2) to watched files.
$propel_link_dir = CcMusicDirsQuery::create()
->filterByType('link')
->findOne();
//newly added watched directory object
$propel_new_watch = CcMusicDirsQuery::create()
->filterByDirectory(realpath($p_path)."/")
->findOne();
//any files of the deprecated "link" type.
$link_files = CcFilesQuery::create()
->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)
->filterByDbDirectory($propel_link_dir->getId())
->find();
$newly_watched_dir = $propel_new_watch->getDirectory();
foreach ($link_files as $link_file) {
$link_filepath = $link_file->getDbFilepath();
//convert "link" file into a watched file.
if ((strlen($newly_watched_dir) < strlen($link_filepath)) && (substr($link_filepath, 0, strlen($newly_watched_dir)) === $newly_watched_dir)) {
//get the filepath path not including the watched directory.
$sub_link_filepath = substr($link_filepath, strlen($newly_watched_dir));
$link_file->setDbDirectory($propel_new_watch->getId());
$link_file->setDbFilepath($sub_link_filepath);
$link_file->save();
}
}
$data = array();
$data["directory"] = $p_path;
RabbitMq::SendMessageToMediaMonitor("new_watch", $data);
@ -227,6 +261,7 @@ class MusicDir {
public static function getWatchedDirFromFilepath($p_filepath)
{
$dirs = CcMusicDirsQuery::create()
->filterByType(array("watched", "stor"))
->find();
foreach($dirs as $dir) {

View file

@ -507,6 +507,7 @@ class StoredFile {
}
else if (isset($p_filepath)) {
$path_info = MusicDir::splitFilePath($p_filepath);
if (is_null($path_info)) {
return null;
}

View file

@ -16,15 +16,15 @@ class Version20110711161043 extends AbstractMigration
public function up(Schema $schema)
{
/* 1) update cc_files table to include to "directory" column */
$this->_addSql("INSERT INTO cc_music_dirs (type, directory) VALUES ('stor', '/srv/airtime/stor');");
$this->_addSql("INSERT INTO cc_music_dirs (type, directory) VALUES ('stor', '/srv/airtime/stor/');");
$this->_addSql("INSERT INTO cc_music_dirs (type, directory) VALUES ('upgrade', '');");
$this->_addSql("INSERT INTO cc_music_dirs (type, directory) VALUES ('link', '');");
$cc_music_dirs = $schema->getTable('cc_music_dirs');
/* 2) create a foreign key relationship from cc_files to cc_music_dirs */
$cc_files = $schema->getTable('cc_files');
$cc_files->addColumn('directory', 'integer', array('default'=> 2));
$cc_files->addColumn('directory', 'integer', array('notnull' => 0, 'default'=> NULL));
$cc_files->addNamedForeignKeyConstraint('cc_music_dirs_folder_fkey', $cc_music_dirs, array('directory'), array('id'), array('onDelete' => 'CASCADE'));

View file

@ -8,9 +8,13 @@
set_include_path(__DIR__.'/../../../airtime_mvc/library' . PATH_SEPARATOR . get_include_path());
set_include_path(__DIR__.'/../../../airtime_mvc/library/pear' . PATH_SEPARATOR . get_include_path());
set_include_path(__DIR__.'/../../../airtime_mvc/application/models' . PATH_SEPARATOR . get_include_path());
require_once 'conf.php';
require_once 'DB.php';
require_once 'propel/runtime/lib/Propel.php';
Propel::init(__DIR__."/../../../airtime_mvc/application/configs/airtime-conf.php");
const CONF_DIR_BINARIES = "/usr/lib/airtime";
class AirtimeInstall{
@ -583,16 +587,19 @@ class Airtime190Upgrade{
*/
public static function installMediaMonitor($values){
$propel_stor_dir = CcMusicDirsQuery::create()
->filterByType('stor')
->findOne();
$propel_link_dir = CcMusicDirsQuery::create()
->filterByType('link')
->findOne();
/* Handle Database Changes. */
$stor_dir = realpath($values['general']['base_files_dir']."/stor")."/";
echo "* Inserting stor directory location $stor_dir into music_dirs table".PHP_EOL;
$sql = "UPDATE cc_music_dirs SET directory='$stor_dir' WHERE type='stor'";
echo $sql.PHP_EOL;
Airtime190Upgrade::execSqlQuery($sql);
$sql = "SELECT id FROM cc_music_dirs WHERE type='stor'";
echo $sql.PHP_EOL;
$rows = Airtime190Upgrade::execSqlQuery($sql);
$propel_stor_dir->setDirectory($stor_dir);
$propel_stor_dir->save();
echo "Creating media-monitor log file".PHP_EOL;
mkdir("/var/log/airtime/media-monitor/", 755, true);
@ -618,13 +625,39 @@ class Airtime190Upgrade{
$oldAndNewFileNames = json_decode($output[0]);
$stor_dir_id = $propel_stor_dir->getId();
foreach ($oldAndNewFileNames as $pair){
$relPathNew = pg_escape_string(substr($pair[1], strlen($stor_dir)));
$absPathOld = pg_escape_string($pair[0]);
$sql = "UPDATE cc_files SET filepath = '$relPathNew', directory=1 WHERE filepath = '$absPathOld'";
$sql = "UPDATE cc_files SET filepath = '$relPathNew', directory=$stor_dir_id WHERE filepath = '$absPathOld'";
echo $sql.PHP_EOL;
Airtime190Upgrade::execSqlQuery($sql);
}
echo "Upgrading Linked Files".PHP_EOL;
//HANDLE LINKED FILES HERE.
$db_files = CcFilesQuery::create()
->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)
->filterByDbDirectory(NULL)
->find();
//Check to see if the file still exists. (Could have still some entries under the stor dir or linked files that don't exist)
$link_dir_id = $propel_link_dir->getId();
foreach($db_files as $db_file) {
$filepath = $db_file->getDbFilepath();
echo $filepath.PHP_EOL;
if (!file_exists($filepath)) {
$db_file->delete();
echo "Removed Missing File: ".$filepath.PHP_EOL;
}
else {
$db_file->setDbDirectory($link_dir_id);
$db_file->save();
}
}
}
}

View file

@ -7,6 +7,8 @@ import sys
import os
import json
import ConfigParser
import pwd
import grp
import os.path
@ -24,10 +26,26 @@ mmconfig = AirtimeMediaConfig(logger)
config = ConfigParser.RawConfigParser()
config.read('/etc/airtime/airtime.conf')
stor_dir = config.get('general', 'base_files_dir') + "/stor"
organize_dir = stor_dir + '/organize'
try:
os.makedirs(organize_dir)
omask = os.umask(0)
uid = pwd.getpwnam('pypo')[2]
gid = grp.getgrnam('www-data')[2]
os.chown(organize_dir, uid, gid)
os.chmod(organize_dir, 02777)
except Exception, e:
print e
finally:
os.umask(omask)
mmconfig.storage_directory = os.path.normpath(stor_dir)
mmconfig.imported_directory = os.path.normpath(stor_dir + '/imported')
mmconfig.organize_directory = os.path.normpath(stor_dir + '/organize')
mmconfig.organize_directory = os.path.normpath(organize_dir)
mmc = MediaMonitorCommon(mmconfig)