Merge branch 'devel' of dev.sourcefabric.org:airtime into devel
This commit is contained in:
commit
d94357e5e5
6 changed files with 132 additions and 45 deletions
|
@ -449,11 +449,11 @@ class ApiController extends Zend_Controller_Action
|
||||||
|
|
||||||
if (is_null($file)) {
|
if (is_null($file)) {
|
||||||
$file = StoredFile::Insert($md);
|
$file = StoredFile::Insert($md);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
$this->view->error = "File already exists in Airtime.";
|
$this->view->error = "File already exists in Airtime.";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else if ($mode == "modify") {
|
else if ($mode == "modify") {
|
||||||
$filepath = $md['MDATA_KEY_FILEPATH'];
|
$filepath = $md['MDATA_KEY_FILEPATH'];
|
||||||
|
|
|
@ -144,6 +144,40 @@ class MusicDir {
|
||||||
{
|
{
|
||||||
$res = self::addDir($p_path, "watched");
|
$res = self::addDir($p_path, "watched");
|
||||||
if ($res['code'] == 0){
|
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 = array();
|
||||||
$data["directory"] = $p_path;
|
$data["directory"] = $p_path;
|
||||||
RabbitMq::SendMessageToMediaMonitor("new_watch", $data);
|
RabbitMq::SendMessageToMediaMonitor("new_watch", $data);
|
||||||
|
@ -227,6 +261,7 @@ class MusicDir {
|
||||||
public static function getWatchedDirFromFilepath($p_filepath)
|
public static function getWatchedDirFromFilepath($p_filepath)
|
||||||
{
|
{
|
||||||
$dirs = CcMusicDirsQuery::create()
|
$dirs = CcMusicDirsQuery::create()
|
||||||
|
->filterByType(array("watched", "stor"))
|
||||||
->find();
|
->find();
|
||||||
|
|
||||||
foreach($dirs as $dir) {
|
foreach($dirs as $dir) {
|
||||||
|
|
|
@ -507,6 +507,7 @@ class StoredFile {
|
||||||
}
|
}
|
||||||
else if (isset($p_filepath)) {
|
else if (isset($p_filepath)) {
|
||||||
$path_info = MusicDir::splitFilePath($p_filepath);
|
$path_info = MusicDir::splitFilePath($p_filepath);
|
||||||
|
|
||||||
if (is_null($path_info)) {
|
if (is_null($path_info)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,15 +16,15 @@ class Version20110711161043 extends AbstractMigration
|
||||||
public function up(Schema $schema)
|
public function up(Schema $schema)
|
||||||
{
|
{
|
||||||
/* 1) update cc_files table to include to "directory" column */
|
/* 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');
|
$cc_music_dirs = $schema->getTable('cc_music_dirs');
|
||||||
|
|
||||||
/* 2) create a foreign key relationship from cc_files to cc_music_dirs */
|
/* 2) create a foreign key relationship from cc_files to cc_music_dirs */
|
||||||
$cc_files = $schema->getTable('cc_files');
|
$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'));
|
$cc_files->addNamedForeignKeyConstraint('cc_music_dirs_folder_fkey', $cc_music_dirs, array('directory'), array('id'), array('onDelete' => 'CASCADE'));
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,13 @@
|
||||||
|
|
||||||
set_include_path(__DIR__.'/../../../airtime_mvc/library' . PATH_SEPARATOR . get_include_path());
|
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/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 'conf.php';
|
||||||
require_once 'DB.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";
|
const CONF_DIR_BINARIES = "/usr/lib/airtime";
|
||||||
|
|
||||||
class AirtimeInstall{
|
class AirtimeInstall{
|
||||||
|
@ -583,16 +587,19 @@ class Airtime190Upgrade{
|
||||||
*/
|
*/
|
||||||
public static function installMediaMonitor($values){
|
public static function installMediaMonitor($values){
|
||||||
|
|
||||||
|
$propel_stor_dir = CcMusicDirsQuery::create()
|
||||||
|
->filterByType('stor')
|
||||||
|
->findOne();
|
||||||
|
|
||||||
|
$propel_link_dir = CcMusicDirsQuery::create()
|
||||||
|
->filterByType('link')
|
||||||
|
->findOne();
|
||||||
|
|
||||||
/* Handle Database Changes. */
|
/* Handle Database Changes. */
|
||||||
$stor_dir = realpath($values['general']['base_files_dir']."/stor")."/";
|
$stor_dir = realpath($values['general']['base_files_dir']."/stor")."/";
|
||||||
echo "* Inserting stor directory location $stor_dir into music_dirs table".PHP_EOL;
|
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'";
|
$propel_stor_dir->setDirectory($stor_dir);
|
||||||
echo $sql.PHP_EOL;
|
$propel_stor_dir->save();
|
||||||
Airtime190Upgrade::execSqlQuery($sql);
|
|
||||||
|
|
||||||
$sql = "SELECT id FROM cc_music_dirs WHERE type='stor'";
|
|
||||||
echo $sql.PHP_EOL;
|
|
||||||
$rows = Airtime190Upgrade::execSqlQuery($sql);
|
|
||||||
|
|
||||||
echo "Creating media-monitor log file".PHP_EOL;
|
echo "Creating media-monitor log file".PHP_EOL;
|
||||||
mkdir("/var/log/airtime/media-monitor/", 755, true);
|
mkdir("/var/log/airtime/media-monitor/", 755, true);
|
||||||
|
@ -618,13 +625,39 @@ class Airtime190Upgrade{
|
||||||
|
|
||||||
$oldAndNewFileNames = json_decode($output[0]);
|
$oldAndNewFileNames = json_decode($output[0]);
|
||||||
|
|
||||||
|
$stor_dir_id = $propel_stor_dir->getId();
|
||||||
foreach ($oldAndNewFileNames as $pair){
|
foreach ($oldAndNewFileNames as $pair){
|
||||||
$relPathNew = pg_escape_string(substr($pair[1], strlen($stor_dir)));
|
$relPathNew = pg_escape_string(substr($pair[1], strlen($stor_dir)));
|
||||||
$absPathOld = pg_escape_string($pair[0]);
|
$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;
|
echo $sql.PHP_EOL;
|
||||||
Airtime190Upgrade::execSqlQuery($sql);
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@ import sys
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import ConfigParser
|
import ConfigParser
|
||||||
|
import pwd
|
||||||
|
import grp
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
|
@ -24,10 +26,26 @@ mmconfig = AirtimeMediaConfig(logger)
|
||||||
config = ConfigParser.RawConfigParser()
|
config = ConfigParser.RawConfigParser()
|
||||||
config.read('/etc/airtime/airtime.conf')
|
config.read('/etc/airtime/airtime.conf')
|
||||||
stor_dir = config.get('general', 'base_files_dir') + "/stor"
|
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.storage_directory = os.path.normpath(stor_dir)
|
||||||
mmconfig.imported_directory = os.path.normpath(stor_dir + '/imported')
|
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)
|
mmc = MediaMonitorCommon(mmconfig)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue