From 2feac41af729de29049cdf67599781cdc54eb59d Mon Sep 17 00:00:00 2001 From: Naomi Date: Mon, 3 Feb 2014 18:33:11 -0500 Subject: [PATCH] CC-5450 : Refactor Media Management (Classes/DB) in Airtime creating context menus for the media in their own services. --- .../application/controllers/ApiController.php | 16 ++------ .../controllers/LibraryController.php | 20 +-------- .../application/services/AudioFileService.php | 24 +++++++++++ .../application/services/MediaService.php | 10 +++++ .../application/services/WebstreamService.php | 16 ++++++++ .../js/airtime/library/lib_separate_table.js | 41 ++++++------------- 6 files changed, 67 insertions(+), 60 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 060c56a85..f3b9547ba 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -94,25 +94,15 @@ class ApiController extends Zend_Controller_Action clearstatcache(); if (is_file($filepath)) { - //$full_path = $media->getPropelOrm()->getDbFilepath(); - - //$file_base_name = strrchr($full_path, '/'); - /* If $full_path does not contain a '/', strrchr will return false, - * in which case we can use $full_path as the base name. - */ - //if (!$file_base_name) { - // $file_base_name = $full_path; - //} else { - // $file_base_name = substr($file_base_name, 1); - //} - + //Download user left clicks a track and selects Download. if ("true" == $this->_getParam('download')) { //path_info breaks up a file path into seperate pieces of informaiton. //We just want the basename which is the file name with the path //information stripped away. We are using Content-Disposition to specify //to the browser what name the file should be saved as. - header('Content-Disposition: attachment; filename="'.$info.'"'); + $filename = basename($filepath); + header('Content-Disposition: attachment; filename="'.$filename.'"'); } else { //user clicks play button for track and downloads it. header('Content-Disposition: inline; filename="'.$info.'"'); diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 837755833..5788ad6ca 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -75,24 +75,8 @@ class LibraryController extends Zend_Controller_Action $baseUrl = Application_Common_OsPath::getBaseDir(); $id = intval($this->_getParam('id')); - $menu = array(); - - /* - $menu["pl_add"] = array( - "name" => _("Add to Playlist"), - "requestUrl" => $baseUrl."playlist/add-items", - "requestType" => "POST", - "requestData" => array("ids" => array($id)), - "callback" => "AIRTIME.playlist.redrawPlaylist" - ); - */ - - $menu["preview"] = array( - "name" => _("Preview"), - "icon" => "play", - "id" => $id, - "callback" => "previewMedia" - ); + $mediaService = new Application_Service_MediaService(); + $menu = $mediaService->createContextMenu($id); if (empty($menu)) { $menu["noaction"] = array("name"=>_("No action available")); diff --git a/airtime_mvc/application/services/AudioFileService.php b/airtime_mvc/application/services/AudioFileService.php index a929dec6a..79a0b964f 100644 --- a/airtime_mvc/application/services/AudioFileService.php +++ b/airtime_mvc/application/services/AudioFileService.php @@ -464,4 +464,28 @@ class Application_Service_AudioFileService return ($rv == 0 && !$isError); } + + public function createContextMenu($audioFile) { + + $id = $audioFile->getId(); + + $menu = array(); + + $menu["preview"] = array( + "name" => _("Preview"), + "icon" => "play", + "id" => $id, + "callback" => "previewMedia" + ); + + $url = $audioFile->getFileUrl().'/download/true'; + $menu["download"] = array( + "name" => _("Download"), + "icon" => "download", + "url" => $url, + "callback" => "downloadMedia" + ); + + return $menu; + } } \ No newline at end of file diff --git a/airtime_mvc/application/services/MediaService.php b/airtime_mvc/application/services/MediaService.php index c1c0ab641..c0e216786 100644 --- a/airtime_mvc/application/services/MediaService.php +++ b/airtime_mvc/application/services/MediaService.php @@ -734,6 +734,16 @@ class Application_Service_MediaService return new $serviceClass(); } + public function createContextMenu($mediaId) { + + $mediaItem = MediaItemQuery::create()->findPK($mediaId); + $obj = $mediaItem->getChildObject(); + + $service = self::locateServiceType($mediaItem); + + return $service->createContextMenu($obj); + } + public function getJPlayerPreviewPlaylist($mediaId) { $mediaItem = MediaItemQuery::create()->findPK($mediaId); diff --git a/airtime_mvc/application/services/WebstreamService.php b/airtime_mvc/application/services/WebstreamService.php index 6d6f2d5e7..49417ec72 100644 --- a/airtime_mvc/application/services/WebstreamService.php +++ b/airtime_mvc/application/services/WebstreamService.php @@ -90,4 +90,20 @@ class Application_Service_WebstreamService WebstreamQuery::create()->findPks($ids)->delete(); } + + public function createContextMenu($webstream) { + + $id = $webstream->getId(); + + $menu = array(); + + $menu["preview"] = array( + "name" => _("Preview"), + "icon" => "play", + "id" => $id, + "callback" => "previewMedia" + ); + + return $menu; + } } \ No newline at end of file diff --git a/airtime_mvc/public/js/airtime/library/lib_separate_table.js b/airtime_mvc/public/js/airtime/library/lib_separate_table.js index 8dc66547d..cfb8f7814 100644 --- a/airtime_mvc/public/js/airtime/library/lib_separate_table.js +++ b/airtime_mvc/public/js/airtime/library/lib_separate_table.js @@ -55,7 +55,15 @@ var AIRTIME = (function(AIRTIME) { table.fnSetFilteringDelay(350); } - mod.previewMedia = function(mediaId) { + mod.downloadMedia = function(data) { + console.log("downloading media " + data.id); + + document.location.href = data.url; + }; + + mod.previewMedia = function(data) { + var mediaId = data.id; + console.log("previewing media " + mediaId); AIRTIME.playerPreview.previewMedia(mediaId); @@ -64,35 +72,10 @@ var AIRTIME = (function(AIRTIME) { function sendContextMenuRequest(data) { console.log(data); - mod[data.callback](data.id); - /* - var callback = data.callback; - - data.requestData["format"] = "json"; - - $.ajax({ - url: data.requestUrl, - type: data.requestType, - data: data.requestData, - dataType: "json", - async: false, - success: function(json) { - - var f = callback.split("."), - i, - len, - obj = window; - - for (i = 0, len = f.length; i < len; i++) { - - obj = obj[f[i]]; - } - - obj(json); - } - }); - */ + if (data.callback !== undefined) { + mod[data.callback](data); + } } function getActiveTabId() {