Merge branch 'devel' of dev.sourcefabric.org:airtime into devel
This commit is contained in:
commit
1aa1500d0c
|
@ -124,22 +124,9 @@ class PreferenceController extends Zend_Controller_Action
|
||||||
$element = $this->getRequest()->getParam("element");
|
$element = $this->getRequest()->getParam("element");
|
||||||
$watched_dirs_form = new Application_Form_WatchedDirPreferences();
|
$watched_dirs_form = new Application_Form_WatchedDirPreferences();
|
||||||
$watched_dirs_form->populate(array('storageFolder' => $chosen));
|
$watched_dirs_form->populate(array('storageFolder' => $chosen));
|
||||||
$bool = $watched_dirs_form->verifyChosenFolder($element);
|
$res = MusicDir::setStorDir($chosen);
|
||||||
|
if($res['code'] != 0){
|
||||||
// it has error checking in two part. It checks is_dir above, and
|
$watched_dirs_form->getElement($element)->setErrors(array($res['error']));
|
||||||
// check uniqueness in DB below. We should put is_dir checking into
|
|
||||||
// MusicDir class.
|
|
||||||
if ($bool === true) {
|
|
||||||
$res = MusicDir::setStorDir($chosen);
|
|
||||||
if($res['code'] == 0){
|
|
||||||
$dirId = MusicDir::getStorDir()->getId();
|
|
||||||
$data = array();
|
|
||||||
$data["directory"] = $chosen;
|
|
||||||
$data["dir_id"] = $dirId;
|
|
||||||
RabbitMq::SendMessageToMediaMonitor("change_stor", $data);
|
|
||||||
}else{
|
|
||||||
$watched_dirs_form->getElement($element)->setErrors(array($res['error']));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->view->subform = $watched_dirs_form->render();
|
$this->view->subform = $watched_dirs_form->render();
|
||||||
|
@ -151,20 +138,9 @@ class PreferenceController extends Zend_Controller_Action
|
||||||
$element = $this->getRequest()->getParam("element");
|
$element = $this->getRequest()->getParam("element");
|
||||||
$watched_dirs_form = new Application_Form_WatchedDirPreferences();
|
$watched_dirs_form = new Application_Form_WatchedDirPreferences();
|
||||||
$watched_dirs_form->populate(array('watchedFolder' => $chosen));
|
$watched_dirs_form->populate(array('watchedFolder' => $chosen));
|
||||||
$bool = $watched_dirs_form->verifyChosenFolder($element);
|
$res = MusicDir::addWatchedDir($chosen);
|
||||||
|
if($res['code'] != 0){
|
||||||
// it has error checking in two part. It checks is_dir above, and
|
$watched_dirs_form->getElement($element)->setErrors(array($res['error']));
|
||||||
// check uniqueness in DB below. We should put is_dir checking into
|
|
||||||
// MusicDir class.
|
|
||||||
if ($bool === true) {
|
|
||||||
$res = MusicDir::addWatchedDir($chosen);
|
|
||||||
if($res['code'] == 0){
|
|
||||||
$data = array();
|
|
||||||
$data["directory"] = $chosen;
|
|
||||||
RabbitMq::SendMessageToMediaMonitor("new_watch", $data);
|
|
||||||
}else{
|
|
||||||
$watched_dirs_form->getElement($element)->setErrors(array($res['error']));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->view->subform = $watched_dirs_form->render();
|
$this->view->subform = $watched_dirs_form->render();
|
||||||
|
@ -174,12 +150,7 @@ class PreferenceController extends Zend_Controller_Action
|
||||||
{
|
{
|
||||||
$chosen = $this->getRequest()->getParam("dir");
|
$chosen = $this->getRequest()->getParam("dir");
|
||||||
|
|
||||||
$dir = MusicDir::getDirByPath($chosen);
|
$dir = MusicDir::removeWatchedDir($chosen);
|
||||||
$dir->remove();
|
|
||||||
|
|
||||||
$data = array();
|
|
||||||
$data["directory"] = $chosen;
|
|
||||||
RabbitMq::SendMessageToMediaMonitor("remove_watch", $data);
|
|
||||||
|
|
||||||
$watched_dirs_form = new Application_Form_WatchedDirPreferences();
|
$watched_dirs_form = new Application_Form_WatchedDirPreferences();
|
||||||
$this->view->subform = $watched_dirs_form->render();
|
$this->view->subform = $watched_dirs_form->render();
|
||||||
|
|
|
@ -12,7 +12,7 @@ class Application_Form_GeneralPreferences extends Zend_Form_SubForm
|
||||||
//Station name
|
//Station name
|
||||||
$this->addElement('text', 'stationName', array(
|
$this->addElement('text', 'stationName', array(
|
||||||
'class' => 'input_text',
|
'class' => 'input_text',
|
||||||
'label' => 'Station Name:',
|
'label' => 'Station Name',
|
||||||
'required' => true,
|
'required' => true,
|
||||||
'filters' => array('StringTrim'),
|
'filters' => array('StringTrim'),
|
||||||
'validators' => array('NotEmpty'),
|
'validators' => array('NotEmpty'),
|
||||||
|
|
|
@ -45,6 +45,9 @@ class MusicDir {
|
||||||
|
|
||||||
public static function addDir($p_path, $p_type)
|
public static function addDir($p_path, $p_type)
|
||||||
{
|
{
|
||||||
|
if(!is_dir($p_path)){
|
||||||
|
return array("code"=>2, "error"=>"'$p_path' is not a valid directory.");
|
||||||
|
}
|
||||||
$dir = new CcMusicDirs();
|
$dir = new CcMusicDirs();
|
||||||
$dir->setType($p_type);
|
$dir->setType($p_type);
|
||||||
$p_path = realpath($p_path)."/";
|
$p_path = realpath($p_path)."/";
|
||||||
|
@ -55,14 +58,20 @@ class MusicDir {
|
||||||
}
|
}
|
||||||
catch(Exception $e){
|
catch(Exception $e){
|
||||||
//echo $e->getMessage();
|
//echo $e->getMessage();
|
||||||
return array("code"=>1, "error"=>"$p_path is already set as the current storage dir or in the watched folders list");
|
return array("code"=>1, "error"=>"'$p_path' is already set as the current storage dir or in the watched folders list");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function addWatchedDir($p_path)
|
public static function addWatchedDir($p_path)
|
||||||
{
|
{
|
||||||
return self::addDir($p_path, "watched");
|
$res = self::addDir($p_path, "watched");
|
||||||
|
if($res['code'] == 0){
|
||||||
|
$data = array();
|
||||||
|
$data["directory"] = $p_path;
|
||||||
|
RabbitMq::SendMessageToMediaMonitor("new_watch", $data);
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getDirByPK($pk)
|
public static function getDirByPK($pk)
|
||||||
|
@ -118,15 +127,23 @@ class MusicDir {
|
||||||
|
|
||||||
public static function setStorDir($p_dir)
|
public static function setStorDir($p_dir)
|
||||||
{
|
{
|
||||||
|
if(!is_dir($p_dir)){
|
||||||
|
return array("code"=>2, "error"=>"'$p_dir' is not a valid directory.");
|
||||||
|
}
|
||||||
$dir = self::getStorDir();
|
$dir = self::getStorDir();
|
||||||
// if $p_dir doesn't exist in DB
|
// if $p_dir doesn't exist in DB
|
||||||
$p_dir = realpath($p_dir)."/";
|
$p_dir = realpath($p_dir)."/";
|
||||||
$exist = $dir->getDirByPath($p_dir);
|
$exist = $dir->getDirByPath($p_dir);
|
||||||
if($exist == NULL){
|
if($exist == NULL){
|
||||||
$dir->setDirectory($p_dir);
|
$dir->setDirectory($p_dir);
|
||||||
|
$dirId = $dir->getId();
|
||||||
|
$data = array();
|
||||||
|
$data["directory"] = $p_dir;
|
||||||
|
$data["dir_id"] = $dirId;
|
||||||
|
RabbitMq::SendMessageToMediaMonitor("change_stor", $data);
|
||||||
return array("code"=>0);
|
return array("code"=>0);
|
||||||
}else{
|
}else{
|
||||||
return array("code"=>1, "error"=>"$p_dir is already set as the current storage dir or in the watched folders list");
|
return array("code"=>1, "error"=>"'$p_dir' is already set as the current storage dir or in the watched folders list.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,9 +167,12 @@ class MusicDir {
|
||||||
$p_dir = realpath($p_dir)."/";
|
$p_dir = realpath($p_dir)."/";
|
||||||
$dir = MusicDir::getDirByPath($p_dir);
|
$dir = MusicDir::getDirByPath($p_dir);
|
||||||
if($dir == NULL){
|
if($dir == NULL){
|
||||||
return array("code"=>1,"error"=>"$p_dir doesn't exist in the watched list");
|
return array("code"=>1,"error"=>"'$p_dir' doesn't exist in the watched list.");
|
||||||
}else{
|
}else{
|
||||||
$dir->remove();
|
$dir->remove();
|
||||||
|
$data = array();
|
||||||
|
$data["directory"] = $p_dir;
|
||||||
|
RabbitMq::SendMessageToMediaMonitor("remove_watch", $data);
|
||||||
return array("code"=>0);
|
return array("code"=>0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
<dl class="zend_form">
|
<dl class="zend_form">
|
||||||
|
|
||||||
<dt id="stationName-label" class="block-display">
|
<dt id="stationName-label" class="block-display">
|
||||||
<label class="required" for="stationName"><?php echo $this->element->getElement('stationName')->getLabel() ?></label>
|
<label class="required" for="stationName"><?php echo $this->element->getElement('stationName')->getLabel() ?>
|
||||||
|
<span class="info-text-small">(Required)</span> :
|
||||||
|
</label>
|
||||||
</dt>
|
</dt>
|
||||||
<dd id="stationName-element" class="block-display">
|
<dd id="stationName-element" class="block-display">
|
||||||
<?php echo $this->element->getElement('stationName') ?>
|
<?php echo $this->element->getElement('stationName') ?>
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
<dl id="public-info" style="display:none;">
|
<dl id="public-info" style="display:none;">
|
||||||
<dt id="Phone-label" class="block-display">
|
<dt id="Phone-label" class="block-display">
|
||||||
<label class="optional" for="Phone"><?php echo $this->element->getElement('Phone')->getLabel() ?></label>
|
<label class="optional" for="Phone"><?php echo $this->element->getElement('Phone')->getLabel() ?></label>
|
||||||
|
<span class="info-text-small">(for verification purposes only, will not be published)</span>
|
||||||
</dt>
|
</dt>
|
||||||
<dd id="Phone-element" class="block-display">
|
<dd id="Phone-element" class="block-display">
|
||||||
<?php echo $this->element->getElement('Phone') ?>
|
<?php echo $this->element->getElement('Phone') ?>
|
||||||
|
@ -49,6 +50,7 @@
|
||||||
</dd>
|
</dd>
|
||||||
<dt id="Email-label" class="block-display">
|
<dt id="Email-label" class="block-display">
|
||||||
<label class="optional" for="Email"><?php echo $this->element->getElement('Email')->getLabel() ?></label>
|
<label class="optional" for="Email"><?php echo $this->element->getElement('Email')->getLabel() ?></label>
|
||||||
|
<span class="info-text-small">(for verification purposes only, will not be published)</span>
|
||||||
</dt>
|
</dt>
|
||||||
<dd id="Email-element" class="block-display">
|
<dd id="Email-element" class="block-display">
|
||||||
<?php echo $this->element->getElement('Email') ?>
|
<?php echo $this->element->getElement('Email') ?>
|
||||||
|
|
|
@ -33,6 +33,6 @@ class Version20110629143017 extends AbstractMigration
|
||||||
|
|
||||||
public function down(Schema $schema)
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
|
$schema->dropTable('cc_music_dirs');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,6 @@ class Version20110713161043 extends AbstractMigration
|
||||||
|
|
||||||
public function down(Schema $schema)
|
public function down(Schema $schema)
|
||||||
{
|
{
|
||||||
|
$schema->dropTable('cc_country');
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -76,9 +76,12 @@ def checkOtherOption(args):
|
||||||
if('-' in i):
|
if('-' in i):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def errorIfMultipleOption(args):
|
def errorIfMultipleOption(args, msg=''):
|
||||||
if(checkOtherOption(args)):
|
if(checkOtherOption(args)):
|
||||||
raise OptionValueError("This option cannot be combined with other options")
|
if(msg != ''):
|
||||||
|
raise OptionValueError(msg)
|
||||||
|
else:
|
||||||
|
raise OptionValueError("This option cannot be combined with other options")
|
||||||
|
|
||||||
def printHelp():
|
def printHelp():
|
||||||
storage_dir = helper_get_stor_dir()
|
storage_dir = helper_get_stor_dir()
|
||||||
|
@ -87,26 +90,26 @@ def printHelp():
|
||||||
else:
|
else:
|
||||||
storage_dir += "imported/"
|
storage_dir += "imported/"
|
||||||
print """
|
print """
|
||||||
========================
|
========================
|
||||||
Airtime Import Script
|
Airtime Import Script
|
||||||
========================
|
========================
|
||||||
There are two ways to import audio files into Airtime:
|
There are two ways to import audio files into Airtime:
|
||||||
|
|
||||||
1) Copy or move files into the storage folder
|
1) Copy or move files into the storage folder
|
||||||
|
|
||||||
Copied or moved files will be placed into the folder:
|
Copied or moved files will be placed into the folder:
|
||||||
%s
|
%s
|
||||||
|
|
||||||
Files will be automatically organized into the structure
|
Files will be automatically organized into the structure
|
||||||
"Artist/Album/TrackNumber-TrackName-Bitrate.file_extension".
|
"Artist/Album/TrackNumber-TrackName-Bitrate.file_extension".
|
||||||
|
|
||||||
2) Add a folder to the Airtime library("watch" a folder)
|
2) Add a folder to the Airtime library("watch" a folder)
|
||||||
|
|
||||||
All the files in the watched folder will be imported to Airtime and the
|
All the files in the watched folder will be imported to Airtime and the
|
||||||
folder will be monitored to automatically detect any changes. Hence any
|
folder will be monitored to automatically detect any changes. Hence any
|
||||||
changes done in the folder(add, delete, edit a file) will trigger
|
changes done in the folder(add, delete, edit a file) will trigger
|
||||||
updates in Airtime libarary.
|
updates in Airtime libarary.
|
||||||
""" % storage_dir
|
""" % storage_dir
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
print ""
|
print ""
|
||||||
|
|
||||||
|
@ -130,6 +133,8 @@ def WatchAddAction(option, opt, value, parser):
|
||||||
errorIfMultipleOption(parser.rargs)
|
errorIfMultipleOption(parser.rargs)
|
||||||
if(len(parser.rargs) > 1):
|
if(len(parser.rargs) > 1):
|
||||||
raise OptionValueError("Too many arguments. This option need exactly one argument.")
|
raise OptionValueError("Too many arguments. This option need exactly one argument.")
|
||||||
|
elif(len(parser.rargs) == 0 ):
|
||||||
|
raise OptionValueError("No argument found. This option need exactly one argument.")
|
||||||
path = parser.rargs[0]
|
path = parser.rargs[0]
|
||||||
if(os.path.isdir(path)):
|
if(os.path.isdir(path)):
|
||||||
res = api_client.add_watched_dir(path)
|
res = api_client.add_watched_dir(path)
|
||||||
|
@ -163,6 +168,8 @@ def WatchRemoveAction(option, opt, value, parser):
|
||||||
errorIfMultipleOption(parser.rargs)
|
errorIfMultipleOption(parser.rargs)
|
||||||
if(len(parser.rargs) > 1):
|
if(len(parser.rargs) > 1):
|
||||||
raise OptionValueError("Too many arguments. This option need exactly one argument.")
|
raise OptionValueError("Too many arguments. This option need exactly one argument.")
|
||||||
|
elif(len(parser.rargs) == 0 ):
|
||||||
|
raise OptionValueError("No argument found. This option need exactly one argument.")
|
||||||
path = parser.rargs[0]
|
path = parser.rargs[0]
|
||||||
if(os.path.isdir(path)):
|
if(os.path.isdir(path)):
|
||||||
res = api_client.remove_watched_dir(path)
|
res = api_client.remove_watched_dir(path)
|
||||||
|
@ -177,27 +184,51 @@ def WatchRemoveAction(option, opt, value, parser):
|
||||||
print "Given path is not a directory: %s" % path
|
print "Given path is not a directory: %s" % path
|
||||||
|
|
||||||
def StorageSetAction(option, opt, value, parser):
|
def StorageSetAction(option, opt, value, parser):
|
||||||
errorIfMultipleOption(parser.rargs)
|
bypass = False
|
||||||
|
isF = '-f' in parser.rargs
|
||||||
|
isForce = '--force' in parser.rargs
|
||||||
|
if(isF or isForce ):
|
||||||
|
bypass = True
|
||||||
|
if(isF):
|
||||||
|
parser.rargs.remove('-f')
|
||||||
|
if(isForce):
|
||||||
|
parser.rargs.remove('--force')
|
||||||
|
if(not bypass):
|
||||||
|
errorIfMultipleOption(parser.rargs, "Only [-f] and [--force] option is allowed with this option.")
|
||||||
|
confirm = raw_input("Are you sure you want to change the storage direcory? (Y/n)")
|
||||||
|
confirm = confirm or 'Y'
|
||||||
|
if(confirm != 'Y'):
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
if(len(parser.rargs) > 1):
|
if(len(parser.rargs) > 1):
|
||||||
raise OptionValueError("Too many arguments. This option need exactly one argument.")
|
raise OptionValueError("Too many arguments. This option need exactly one argument.")
|
||||||
if(os.path.isdir(values)):
|
elif(len(parser.rargs) == 0 ):
|
||||||
res = api_client.set_storage_dir(values)
|
raise OptionValueError("No argument found. This option need exactly one argument.")
|
||||||
|
|
||||||
|
path = parser.rargs[0]
|
||||||
|
if(os.path.isdir(path)):
|
||||||
|
res = api_client.set_storage_dir(path)
|
||||||
if(res is None):
|
if(res is None):
|
||||||
exit("Unable to connect to the server.")
|
exit("Unable to connect to the server.")
|
||||||
# sucess
|
# sucess
|
||||||
if(res['msg']['code'] == 0):
|
if(res['msg']['code'] == 0):
|
||||||
print "Successfully set storage folder to %s" % values
|
print "Successfully set storage folder to %s" % path
|
||||||
else:
|
else:
|
||||||
print "Setting storage folder to failed.: %s" % res['msg']['error']
|
print "Setting storage folder to failed.: %s" % res['msg']['error']
|
||||||
else:
|
else:
|
||||||
print "Given path is not a directory: %s" % values
|
print "Given path is not a directory: %s" % path
|
||||||
|
|
||||||
def StorageGetAction(option, opt, value, parser):
|
def StorageGetAction(option, opt, value, parser):
|
||||||
errorIfMultipleOption(parser.rargs)
|
errorIfMultipleOption(parser.rargs)
|
||||||
if(len(parser.rargs) > 0):
|
if(len(parser.rargs) > 0):
|
||||||
raise OptionValueError("This option doesn't take any argument.")
|
raise OptionValueError("This option doesn't take any argument.")
|
||||||
print helper_get_stor_dir()
|
print helper_get_stor_dir()
|
||||||
|
|
||||||
|
usage = """[-c|--copy FILE/DIR [FILE/DIR...]] [-m|--move FILE/DIR [FILE/DIR...]]
|
||||||
|
[--watch-add DIR] [--watch-list] [--watch-remve DIR]
|
||||||
|
[--storage-dir-set DIR] [--storage-dir-get]"""
|
||||||
|
|
||||||
parser = OptionParser(add_help_option=False)
|
parser = OptionParser(usage=usage, add_help_option=False)
|
||||||
parser.add_option('-c','--copy', action='callback', callback=CopyAction, metavar='FILE', help='Copy FILE(s) into the storage directory.\nYou can specify multiple files or directories.')
|
parser.add_option('-c','--copy', action='callback', callback=CopyAction, metavar='FILE', help='Copy FILE(s) into the storage directory.\nYou can specify multiple files or directories.')
|
||||||
parser.add_option('-m','--move', action='callback', callback=MoveAction, metavar='FILE', help='Move FILE(s) into the storage directory.\nYou can specify multiple files or directories.')
|
parser.add_option('-m','--move', action='callback', callback=MoveAction, metavar='FILE', help='Move FILE(s) into the storage directory.\nYou can specify multiple files or directories.')
|
||||||
parser.add_option('--watch-add', action='callback', callback=WatchAddAction, help='Add DIR to the watched folders list.')
|
parser.add_option('--watch-add', action='callback', callback=WatchAddAction, help='Add DIR to the watched folders list.')
|
||||||
|
|
Loading…
Reference in New Issue