From 6adce1ba4561d70b2915524f09b5862ca0f0db7c Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Tue, 21 Jun 2011 14:58:38 +0200 Subject: [PATCH] CC-1799 Put Airtime Storage into a Human Readable File Naming Convention adding ability to move stor directory. --- .../controllers/PreferenceController.php | 24 ++++++- .../forms/WatchedDirPreferences.php | 15 ++++- airtime_mvc/application/models/MusicDir.php | 7 +++ .../form/preferences_watched_dirs.phtml | 24 +++++-- .../js/airtime/preferences/musicdirs.js | 63 +++++++++++++++---- python_apps/media-monitor/MediaMonitor.py | 31 +++++---- 6 files changed, 132 insertions(+), 32 deletions(-) diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index 475f3917e..702d1cf25 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -10,6 +10,7 @@ class PreferenceController extends Zend_Controller_Action $ajaxContext->addActionContext('register', 'json') ->addActionContext('remindme', 'json') ->addActionContext('server-browse', 'json') + ->addActionContext('change-stor-directory', 'json') ->addActionContext('reload-watch-directory', 'json') ->addActionContext('remove-watch-directory', 'json') ->initContext(); @@ -175,12 +176,33 @@ class PreferenceController extends Zend_Controller_Action die(json_encode($result)); } + public function changeStorDirectoryAction() + { + $chosen = $this->getRequest()->getParam("dir"); + $element = $this->getRequest()->getParam("element"); + $watched_dirs_form = new Application_Form_WatchedDirPreferences(); + $watched_dirs_form->populate(array('storageFolder' => $chosen)); + $bool = $watched_dirs_form->verifyChosenFolder($element); + + if ($bool === true) { + MusicDir::setStorDir($chosen); + $data = array(); + $data["directory"] = $chosen; + RabbitMq::SendMessageToMediaMonitor("change_stor", $data); + } + + $watched_dirs_form->setWatchedDirs(); + + $this->view->subform = $watched_dirs_form->render(); + } + public function reloadWatchDirectoryAction() { $chosen = $this->getRequest()->getParam("dir"); + $element = $this->getRequest()->getParam("element"); $watched_dirs_form = new Application_Form_WatchedDirPreferences(); $watched_dirs_form->populate(array('watchedFolder' => $chosen)); - $bool = $watched_dirs_form->verifyChosenFolder(); + $bool = $watched_dirs_form->verifyChosenFolder($element); if ($bool === true) { MusicDir::addWatchedDir($chosen); diff --git a/airtime_mvc/application/forms/WatchedDirPreferences.php b/airtime_mvc/application/forms/WatchedDirPreferences.php index dc7f64a91..8f074e277 100644 --- a/airtime_mvc/application/forms/WatchedDirPreferences.php +++ b/airtime_mvc/application/forms/WatchedDirPreferences.php @@ -9,6 +9,17 @@ class Application_Form_WatchedDirPreferences extends Zend_Form_SubForm array('ViewScript', array('viewScript' => 'form/preferences_watched_dirs.phtml')) )); + $this->addElement('text', 'storageFolder', array( + 'class' => 'input_text', + 'label' => 'Airtime\'s Storage Folder:', + 'required' => false, + 'filters' => array('StringTrim'), + 'value' => '', + 'decorators' => array( + 'ViewHelper' + ) + )); + $this->addElement('text', 'watchedFolder', array( 'class' => 'input_text', 'label' => 'Choose a Folder to Watch:', @@ -21,9 +32,9 @@ class Application_Form_WatchedDirPreferences extends Zend_Form_SubForm )); } - public function verifyChosenFolder() { + public function verifyChosenFolder($p_form_element_id) { - $element = $this->getElement('watchedFolder'); + $element = $this->getElement($p_form_element_id); if (!is_dir($element->getValue())) { $element->setErrors(array('Not a valid Directory')); diff --git a/airtime_mvc/application/models/MusicDir.php b/airtime_mvc/application/models/MusicDir.php index bb748b885..4021f2829 100644 --- a/airtime_mvc/application/models/MusicDir.php +++ b/airtime_mvc/application/models/MusicDir.php @@ -35,6 +35,7 @@ class MusicDir { public function setDirectory($dir) { $this->_dir->setDirectory($dir); + $this->_dir->save(); } public function remove() @@ -112,6 +113,12 @@ class MusicDir { return $mus_dir; } + public static function setStorDir($p_dir) + { + $dir = self::getStorDir(); + $dir->setDirectory($p_dir); + } + public static function getWatchedDirFromFilepath($p_filepath) { $dirs = CcMusicDirsQuery::create() diff --git a/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml b/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml index a993fb0cd..b99c598d3 100644 --- a/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml +++ b/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml @@ -1,11 +1,29 @@
-
+
+ +
+
+ element->getElement('storageFolder') ?> + + + element->getElement('storageFolder')->hasErrors()) : ?> +
    + element->getElement('storageFolder')->getMessages() as $error): ?> +
  • + +
+ +
+
Current Storage Folder: getDirectory(); ?>
+ +
element->getElement('watchedFolder') ?> + element->getElement('watchedFolder')->hasErrors()) : ?>
    element->getElement('watchedFolder')->getMessages() as $error): ?> @@ -14,9 +32,7 @@
-
- -
+
element->getElement("watched_dir_$i"); ?> diff --git a/airtime_mvc/public/js/airtime/preferences/musicdirs.js b/airtime_mvc/public/js/airtime/preferences/musicdirs.js index 8d52c3c35..f4228a26a 100644 --- a/airtime_mvc/public/js/airtime/preferences/musicdirs.js +++ b/airtime_mvc/public/js/airtime/preferences/musicdirs.js @@ -1,5 +1,26 @@ function setWatchedDirEvents() { - $('#watchedFolder-selection').serverBrowser({ + + $('#storageFolder-selection').serverBrowser({ + onSelect: function(path) { + $('#storageFolder').val(path); + }, + onLoad: function() { + return $('#storageFolder').val(); + }, + width: 500, + height: 250, + position: ['center', 'center'], + //knownPaths: [{text:'Desktop', image:'desktop.png', path:'/home'}], + knownPaths: [], + imageUrl: 'img/icons/', + systemImageUrl: 'img/browser/', + handlerUrl: '/Preference/server-browse/format/json', + title: 'Choose Storage Folder', + basePath: '/home', + requestMethod: 'POST', + }); + + $('#watchedFolder-selection').serverBrowser({ onSelect: function(path) { $('#watchedFolder').val(path); }, @@ -19,20 +40,36 @@ function setWatchedDirEvents() { requestMethod: 'POST', }); - $('#watchedFolder-ok').click(function(){ + $('#storageFolder-ok').click(function(){ var url, chosen; - url = "/Preference/reload-watch-directory"; - chosen = $('#watchedFolder').val(); + url = "/Preference/change-stor-directory"; + chosen = $('#storageFolder').val(); - $.post(url, - {format: "json", dir: chosen}, + $.post(url, + {format: "json", dir: chosen, element: "storageFolder"}, - function(json) { + function(json) { $("#watched-folder-section").empty(); $("#watched-folder-section").append(json.subform); setWatchedDirEvents(); - }); + }); + }); + + $('#watchedFolder-ok').click(function(){ + var url, chosen; + + url = "/Preference/reload-watch-directory"; + chosen = $('#watchedFolder').val(); + + $.post(url, + {format: "json", dir: chosen, element: "watchedFolder"}, + + function(json) { + $("#watched-folder-section").empty(); + $("#watched-folder-section").append(json.subform); + setWatchedDirEvents(); + }); }); $('#watchedFolder-table').find('.ui-icon-close').click(function(){ @@ -41,12 +78,12 @@ function setWatchedDirEvents() { url = "/Preference/remove-watch-directory"; - $.post(url, - {format: "json", dir: folder}, + $.post(url, + {format: "json", dir: folder}, - function(json) { - row.remove(); - }); + function(json) { + row.remove(); + }); }); } diff --git a/python_apps/media-monitor/MediaMonitor.py b/python_apps/media-monitor/MediaMonitor.py index a00ab89fa..2e1cd4686 100644 --- a/python_apps/media-monitor/MediaMonitor.py +++ b/python_apps/media-monitor/MediaMonitor.py @@ -215,6 +215,7 @@ class AirtimeNotifier(Notifier): if m['event_type'] == "md_update": self.logger.info("AIRTIME NOTIFIER md update event") self.md_manager.save_md_to_file(m) + elif m['event_type'] == "new_watch": self.logger.info("AIRTIME NOTIFIER add watched folder event " + m['directory']) #start a new process to walk through this folder and add the files to Airtime. @@ -223,8 +224,23 @@ class AirtimeNotifier(Notifier): self.import_processes[m['directory']] = p #add this new folder to our list of watched folders self.watched_folders.append(m['directory']) + elif m['event_type'] == "remove_watch": - self.watches_to_remove.append(m['directory']) + watched_directory = m['directory'].encode('utf-8') + + mm = self.proc_fun() + wd = mm.wm.get_wd(watched_directory) + self.logger.info("Removing watch on: %s wd %s", watched_directory, wd) + mm.wm.rm_watch(wd, rec=True) + + elif m['event_type'] == "change_stor": + global storage_directory + new_storage_directory = m['directory'].encode('utf-8') + + mm = self.proc_fun() + mm.set_needed_file_permissions(new_storage_directory, True) + mm.move_file(storage_directory, new_storage_directory) + storage_directory = new_storage_directory def update_airtime(self, d): @@ -521,15 +537,6 @@ class MediaMonitor(ProcessEvent): def notifier_loop_callback(self, notifier): - #recursively unwatch any directories. - for watched_directory in notifier.watches_to_remove: - wd = self.wm.get_wd(watched_directory) - self.logger.info("Removing watch on: %s wdd %s", watched_directory, wd) - self.wm.rm_watch(wd, rec=True) - - notifier.watches_to_remove = [] - - for watched_directory in notifier.import_processes.keys(): process = notifier.import_processes[watched_directory] if not process.is_alive(): @@ -560,8 +567,8 @@ if __name__ == '__main__': response = mm.api_client.setup_media_monitor() time.sleep(5) - storage_directory = response["stor"] - plupload_directory = response["plupload"] + storage_directory = response["stor"].encode('utf-8') + plupload_directory = response["plupload"].encode('utf-8') wdd = mm.watch_directory(storage_directory) logger.info("Added watch to %s", storage_directory)