From c73328e2974d7357a3e798dcefac7dda16126477 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 9 Aug 2012 16:49:20 -0400 Subject: [PATCH] CC-1665: Scheduled stream rebroadcasting and recording -ability to preview webstreams inside of playlists --- .../controllers/AudiopreviewController.php | 114 ++++++++++-------- .../airtime/audiopreview/preview_jplayer.js | 34 ++++-- 2 files changed, 85 insertions(+), 63 deletions(-) diff --git a/airtime_mvc/application/controllers/AudiopreviewController.php b/airtime_mvc/application/controllers/AudiopreviewController.php index af8b8c283..7e8150914 100644 --- a/airtime_mvc/application/controllers/AudiopreviewController.php +++ b/airtime_mvc/application/controllers/AudiopreviewController.php @@ -101,49 +101,49 @@ class AudiopreviewController extends Zend_Controller_Action public function blockPreviewAction() { - global $CC_CONFIG; - - $blockIndex = $this->_getParam('blockIndex'); - $blockId = $this->_getParam('blockId'); - - $request = $this->getRequest(); - $baseUrl = $request->getBaseUrl(); - - $baseDir = dirname($_SERVER['SCRIPT_FILENAME']); - - $this->view->headScript()->appendFile($baseUrl.'/js/airtime/audiopreview/preview_jplayer.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'/js/jplayer/jplayer.playlist.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headLink()->appendStylesheet($baseUrl.'/js/jplayer/skin/jplayer.airtime.audio.preview.css?'.$CC_CONFIG['airtime_version']); - $this->_helper->layout->setLayout('audioPlayer'); - - $logo = Application_Model_Preference::GetStationLogo(); - if ($logo) { - $this->view->logo = "data:image/png;base64,$logo"; - } else { - $this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png"; - } - $this->view->blockIndex= $blockIndex; - $this->view->blockId = $blockId; - + global $CC_CONFIG; + + $blockIndex = $this->_getParam('blockIndex'); + $blockId = $this->_getParam('blockId'); + + $request = $this->getRequest(); + $baseUrl = $request->getBaseUrl(); + + $baseDir = dirname($_SERVER['SCRIPT_FILENAME']); + + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/audiopreview/preview_jplayer.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/jplayer/jplayer.playlist.min.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + $this->view->headLink()->appendStylesheet($baseUrl.'/js/jplayer/skin/jplayer.airtime.audio.preview.css?'.$CC_CONFIG['airtime_version']); + $this->_helper->layout->setLayout('audioPlayer'); + + $logo = Application_Model_Preference::GetStationLogo(); + if ($logo) { + $this->view->logo = "data:image/png;base64,$logo"; + } else { + $this->view->logo = "$baseUrl/css/images/airtime_logo_jp.png"; + } + $this->view->blockIndex= $blockIndex; + $this->view->blockId = $blockId; + $this->_helper->viewRenderer->setRender('audio-preview'); } public function getBlockAction() { - // disable the view and the layout - $this->view->layout()->disableLayout(); - $this->_helper->viewRenderer->setNoRender(true); - - $blockId = $this->_getParam('blockId'); - - if (!isset($blockId)) { - return; - } - + // disable the view and the layout + $this->view->layout()->disableLayout(); + $this->_helper->viewRenderer->setNoRender(true); + + $blockId = $this->_getParam('blockId'); + + if (!isset($blockId)) { + return; + } + $bl = new Application_Model_Block($blockId); - $result = array(); + $result = array(); foreach ($bl->getContents(true) as $ele) { $result[] = $this->createElementMap($ele); - } + } $this->_helper->json($result); } /** @@ -173,26 +173,40 @@ class AudiopreviewController extends Zend_Controller_Action $result[] = $this->createElementMap($track); } } - }else{ + } else { $result[] = $this->createElementMap($ele); } } $this->_helper->json($result); } - function createElementMap($track){ - $elementMap = array( 'element_title' => isset($track['track_title'])?$track['track_title']:"", - 'element_artist' => isset($track['artist_name'])?$track['artist_name']:"", - 'element_id' => isset($track['id'])?$track['id']:"", - 'element_position' => isset($track['position'])?$track['position']:"", - ); - $fileExtension = pathinfo($track['path'], PATHINFO_EXTENSION); - if (strtolower($fileExtension) === 'mp3') { - $elementMap['element_mp3'] = $track['item_id']; - } else if (strtolower($fileExtension) === 'ogg') { - $elementMap['element_oga'] = $track['item_id']; - } else { - //the media was neither mp3 or ogg + private function createElementMap($track) + { + $elementMap = array( 'element_title' => isset($track['track_title'])?$track['track_title']:"", + 'element_artist' => isset($track['artist_name'])?$track['artist_name']:"", + 'element_id' => isset($track['id'])?$track['id']:"", + 'element_position' => isset($track['position'])?$track['position']:"", + ); + + + $elementMap['type'] = $track['type']; + + if ($track['type'] == 0) { + $fileExtension = pathinfo($track['path'], PATHINFO_EXTENSION); + //type is file + //TODO: use MIME type for this + if (strtolower($fileExtension) === 'mp3') { + $elementMap['element_mp3'] = $track['item_id']; + } else if (strtolower($fileExtension) === 'ogg') { + $elementMap['element_oga'] = $track['item_id']; + } else { + //the media was neither mp3 or ogg + throw new Exception("Unknown file type"); + } + + $elementMap['uri'] = "/api/get-media/file/".$track['item_id']; + } else { + $elementMap['uri'] = $track['path']; } return $elementMap; } diff --git a/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js b/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js index 2feca14a1..6e0538ada 100644 --- a/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js +++ b/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js @@ -76,7 +76,7 @@ function playAllPlaylist(p_playlistID, p_playlistIndex) { if ( _idToPostionLookUp !== undefined && viewsPlaylistID == p_playlistID ) { play(p_playlistIndex); - }else { + } else { buildplaylist("/audiopreview/get-playlist/playlistID/"+p_playlistID, p_playlistIndex); } } @@ -87,7 +87,7 @@ function playBlock(p_blockId, p_blockIndex) if ( _idToPostionLookUp !== undefined && viewsBlockId == p_blockId ) { play(p_blockIndex); - }else { + } else { buildplaylist("/audiopreview/get-block/blockId/"+p_blockId, p_blockIndex); } } @@ -124,20 +124,28 @@ function buildplaylist(p_url, p_playIndex) { var index; var total = 0; for(index in data){ - - if (data[index]['element_mp3'] != undefined){ - media = {title: data[index]['element_title'], + + if (data[index]['type'] == 0) { + if (data[index]['element_mp3'] != undefined){ + media = {title: data[index]['element_title'], + artist: data[index]['element_artist'], + mp3:data[index]['uri'] + }; + } else if (data[index]['element_oga'] != undefined) { + media = {title: data[index]['element_title'], + artist: data[index]['element_artist'], + oga:data[index]['uri'] + }; + } + } else if (data[index]['type'] == 1) { + media = {title: data[index]['element_title'], artist: data[index]['element_artist'], - mp3:"/api/get-media/file/"+data[index]['element_mp3'] - }; - }else if (data[index]['element_oga'] != undefined) { - media = {title: data[index]['element_title'], - artist: data[index]['element_artist'], - oga:"/api/get-media/file/"+data[index]['element_oga'] + mp3:data[index]['uri'] }; } - myPlaylist[index] = media; - + if (media) { + myPlaylist[index] = media; + } // we should create a map according to the new position in the player itself // total is the index on the player _idToPostionLookUp[data[index]['element_id']] = total;