diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index c241599d7..2102a662e 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -356,7 +356,6 @@ class LibraryController extends Zend_Controller_Action if (isset($file)) { try { - Application_Model_Preference::updateDiskUsage(-1 * abs(filesize($file->getFilePath()))); $res = $file->delete(); } catch (FileNoPermissionException $e) { $message = $noPermissionMsg; diff --git a/airtime_mvc/application/models/MusicDir.php b/airtime_mvc/application/models/MusicDir.php index 08b2b2649..80f6cbe25 100644 --- a/airtime_mvc/application/models/MusicDir.php +++ b/airtime_mvc/application/models/MusicDir.php @@ -301,7 +301,9 @@ SQL; public static function getDirByPK($pk) { $dir = CcMusicDirsQuery::create()->findPK($pk); - + if (!$dir) { + return null; + } $mus_dir = new Application_Model_MusicDir($dir); return $mus_dir; diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 7f1aa7d69..23247522c 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -346,6 +346,21 @@ SQL; return array(); } } + + /** + * Check if the file (on disk) corresponding to this class exists or not. + * @return boolean true if the file exists, false otherwise. + */ + public function existsOnDisk() + { + $exists = false; + try { + $exists = file_exists($this->getFilePath()); + } catch (Exception $e) { + return false; + } + return $exists; + } /** * Delete stored virtual file @@ -355,8 +370,11 @@ SQL; */ public function delete() { - $filepath = $this->getFilePath(); + + //Update the user's disk usage + Application_Model_Preference::updateDiskUsage(-1 * abs(filesize($filepath))); + // Check if the file is scheduled to be played in the future if (Application_Model_Schedule::IsFileScheduledInTheFuture($this->getId())) { throw new DeleteScheduledFileException(); @@ -370,8 +388,10 @@ SQL; } $music_dir = Application_Model_MusicDir::getDirByPK($this->_file->getDbDirectory()); + assert($music_dir); $type = $music_dir->getType(); - + + if (file_exists($filepath) && $type == "stor") { $data = array("filepath" => $filepath, "delete" => 1); try { @@ -473,8 +493,13 @@ SQL; */ public function getFilePath() { + assert($this->_file); + $music_dir = Application_Model_MusicDir::getDirByPK($this-> _file->getDbDirectory()); + if (!$music_dir) { + throw new Exception("Invalid music_dir for file in database."); + } $directory = $music_dir->getDirectory(); $filepath = $this->_file->getDbFilepath(); diff --git a/airtime_mvc/application/modules/rest/controllers/MediaController.php b/airtime_mvc/application/modules/rest/controllers/MediaController.php index 63d60d4b1..f092574b3 100644 --- a/airtime_mvc/application/modules/rest/controllers/MediaController.php +++ b/airtime_mvc/application/modules/rest/controllers/MediaController.php @@ -198,8 +198,9 @@ class Rest_MediaController extends Zend_Rest_Controller if ($file) { $con = Propel::getConnection(); $storedFile = new Application_Model_StoredFile($file, $con); - Application_Model_Preference::updateDiskUsage(-1 * abs(filesize($storedFile->getFilePath()))); - $storedFile->delete(); //TODO: This checks your session permissions... Make it work without a session? + if ($storedFile->existsOnDisk()) { + $storedFile->delete(); //TODO: This checks your session permissions... Make it work without a session? + } $file->delete(); $this->getResponse() ->setHttpResponseCode(204); diff --git a/airtime_mvc/public/js/airtime/library/plupload.js b/airtime_mvc/public/js/airtime/library/plupload.js index 6d50a2598..9e67f7ad2 100644 --- a/airtime_mvc/public/js/airtime/library/plupload.js +++ b/airtime_mvc/public/js/airtime/library/plupload.js @@ -149,7 +149,7 @@ $(document).ready(function() { if (self.isRecentUploadsRefreshTimerActive()) { //Prevent multiple timers from running return; } - self.recentUploadsRefreshTimer = setTimeout("self.recentUploadsTable.fnDraw()", 3000); + self.recentUploadsRefreshTimer = setInterval("self.recentUploadsTable.fnDraw()", 3000); }; self.isRecentUploadsRefreshTimerActive = function() @@ -159,7 +159,7 @@ $(document).ready(function() { self.stopRefreshingRecentUploads = function() { - clearTimeout(self.recentUploadsRefreshTimer); + clearInterval(self.recentUploadsRefreshTimer); self.recentUploadsRefreshTimer = null; };