diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 48f667c84..c6d7dfc13 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -370,8 +370,15 @@ class ApiController extends Zend_Controller_Action exit; } + $plupload_dir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload"; + + //need to make sure plupload dir exists so we can watch it. + if(!file_exists($plupload_dir)) { + @mkdir($plupload_dir, 0755); + } + $this->view->stor = $CC_CONFIG['storageDir']; - $this->view->plupload = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload"; + $this->view->plupload = $plupload_dir; } public function mediaItemStatusAction() { @@ -414,7 +421,6 @@ class ApiController extends Zend_Controller_Action if ($mode == "create") { $md5 = $md['MDATA_KEY_MD5']; - $file = StoredFile::RecallByMd5($md5); if (is_null($file)) { @@ -441,16 +447,15 @@ class ApiController extends Zend_Controller_Action } } else if ($mode == "moved") { - $filepath = $md['MDATA_KEY_FILEPATH']; - $filepath = str_replace("\\", "", $filepath); - $file = StoredFile::RecallByFilepath($filepath); + $md5 = $md['MDATA_KEY_MD5']; + $file = StoredFile::RecallByMd5($md5); if (is_null($file)) { $this->view->error = "File doesn't exist in Airtime."; return; } else { - $file->setMetadataValue('MDATA_KEY_FILEPATH', $md['new_filepath']); + $file->setMetadata($md); } } else if ($mode == "delete") { diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 87366138e..a9a5d82ff 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -737,7 +737,6 @@ class StoredFile { global $CC_CONFIG; $stor = $CC_CONFIG["storageDir"]; $audio_stor = $stor . DIRECTORY_SEPARATOR . $fileName; - $r = @rename($audio_file, $audio_stor); $md = array(); $md['MDATA_KEY_MD5'] = $md5; @@ -745,6 +744,7 @@ class StoredFile { $md['MDATA_KEY_TITLE'] = $fileName; StoredFile::Insert($md); + $r = @rename($audio_file, $audio_stor); } } diff --git a/python_apps/media-monitor/MediaMonitor.py b/python_apps/media-monitor/MediaMonitor.py index e7fcdc86d..02fd21b71 100644 --- a/python_apps/media-monitor/MediaMonitor.py +++ b/python_apps/media-monitor/MediaMonitor.py @@ -266,10 +266,10 @@ class MediaMonitor(ProcessEvent): return md - def update_airtime(self, **kwargs): + def update_airtime(self, d): - filepath = kwargs['filepath'] - mode = kwargs['mode'] + filepath = d['filepath'] + mode = d['mode'] data = None md = {} @@ -284,7 +284,8 @@ class MediaMonitor(ProcessEvent): md.update(mutagen) data = {'md': md} elif (mode == MODE_MOVED): - md['new_filepath'] = kwargs['new_filepath'] + mutagen = self.get_mutagen_info(filepath) + md.update(mutagen) data = {'md': md} elif (mode == MODE_DELETE): data = {'md': md} @@ -322,7 +323,7 @@ class MediaMonitor(ProcessEvent): else : global plupload_directory #files that have been added through plupload have a placeholder already put in Airtime's database. - if not self.is_parent_directory(event.pathname, plupload_directory) + if not self.is_parent_directory(event.pathname, plupload_directory): md5 = self.get_md5(event.pathname) response = self.api_client.check_media_status(md5) @@ -334,8 +335,11 @@ class MediaMonitor(ProcessEvent): def process_IN_MODIFY(self, event): if not event.dir: self.logger.info("%s: %s", event.maskname, event.pathname) - if self.is_audio_file(event.name) : - self.file_events.append({'filepath': event.pathname, 'mode': MODE_MODIFY}) + global plupload_directory + #files that have been added through plupload have a placeholder already put in Airtime's database. + if not self.is_parent_directory(event.pathname, plupload_directory): + if self.is_audio_file(event.name) : + self.file_events.append({'filepath': event.pathname, 'mode': MODE_MODIFY}) def process_IN_MOVED_FROM(self, event): self.logger.info("%s: %s", event.maskname, event.pathname) @@ -353,11 +357,22 @@ class MediaMonitor(ProcessEvent): elif event.cookie in self.moved_files: old_filepath = self.moved_files[event.cookie] del self.moved_files[event.cookie] - self.file_events.append({'filepath': old_filepath,'new_filepath': event.pathname, 'mode': MODE_MOVED}) + + global plupload_directory + #add a modify event to send md to Airtime for the plupload file. + if self.is_parent_directory(old_filepath, plupload_directory): + #file renamed from /tmp/plupload does not have a path in our naming scheme yet. + md_filepath = self.create_file_path(event.pathname) + #move the file a second time to its correct Airtime naming schema. + os.rename(event.pathname, md_filepath) + self.file_events.append({'filepath': md_filepath, 'mode': MODE_MOVED}) + else: + self.file_events.append({'filepath': event.pathname, 'mode': MODE_MOVED}) def process_IN_DELETE(self, event): - self.logger.info("%s: %s", event.maskname, event.pathname) - self.file_events.append({'filepath': event.pathname, 'mode': MODE_DELETE}) + if not event.dir: + self.logger.info("%s: %s", event.maskname, event.pathname) + self.file_events.append({'filepath': event.pathname, 'mode': MODE_DELETE}) def process_default(self, event): self.logger.info("%s: %s", event.maskname, event.pathname)