From 4129900858e81cf776475db9489ffe4ec064d360 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 9 Aug 2012 17:42:25 -0400 Subject: [PATCH] CC-1665: Scheduled stream rebroadcasting and recording -step 1 of getting stream preview on show builder working --- .../controllers/AudiopreviewController.php | 20 ++- airtime_mvc/application/models/Playlist.php | 115 +++++++++--------- .../application/models/ShowInstance.php | 3 +- .../airtime/audiopreview/preview_jplayer.js | 12 +- 4 files changed, 81 insertions(+), 69 deletions(-) diff --git a/airtime_mvc/application/controllers/AudiopreviewController.php b/airtime_mvc/application/controllers/AudiopreviewController.php index 7e8150914..c0aafd4e2 100644 --- a/airtime_mvc/application/controllers/AudiopreviewController.php +++ b/airtime_mvc/application/controllers/AudiopreviewController.php @@ -272,13 +272,21 @@ class AudiopreviewController extends Zend_Controller_Action 'element_id' => ++$position, ); - $fileExtension = pathinfo($track['filepath'], PATHINFO_EXTENSION); - if (strtolower($fileExtension) === 'mp3') { - $elementMap['element_mp3'] = $track['item_id']; - } elseif (strtolower($fileExtension) === 'ogg') { - $elementMap['element_oga'] = $track['item_id']; + $elementMap['type'] = $track['type']; + if ($track['type'] == 0) { + $fileExtension = pathinfo($track['filepath'], PATHINFO_EXTENSION); + if (strtolower($fileExtension) === 'mp3') { + $elementMap['element_mp3'] = $track['item_id']; + } elseif (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 { - //the media was neither mp3 or ogg + $elementMap['uri'] = $track['path']; } $result[] = $elementMap; } diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index a6d540784..23ca9d2c2 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -154,40 +154,67 @@ class Application_Model_Playlist public function getContents($filterFiles=false) { Logging::log("Getting contents for playlist {$this->id}"); - $files = array(); - /* - $query = CcPlaylistcontentsQuery::create() - ->filterByDbPlaylistId($this->id); - if ($filterFiles) { - $query->useCcFilesQuery() - ->filterByDbFileExists(true) - ->endUse(); - } - $query->orderByDbPosition() - ->filterByDbType(0) - ->leftJoinWith('CcFiles'); - $rows = $query->find($this->con); - */ - $sql = <<<"EOT" -(SELECT * FROM -((SELECT pc.id as id, pc.type, pc.position, pc.cliplength as length, pc.cuein, pc.cueout, pc.fadein, pc.fadeout, - f.id as item_id, f.track_title, f.artist_name as creator, f.file_exists as exists, f.filepath as path FROM cc_playlistcontents AS pc - JOIN cc_files AS f ON pc.file_id=f.id WHERE pc.playlist_id = {$this->id} AND type = 0) -UNION ALL -(SELECT pc.id as id, pc.type, pc.position, pc.cliplength as length, pc.cuein, pc.cueout, pc.fadein, pc.fadeout, -ws.id as item_id, (ws.name || ': ' || ws.url) as title, sub.login as creator, 't'::boolean as exists, ws.url as path FROM cc_playlistcontents AS pc -JOIN cc_webstream AS ws on pc.stream_id=ws.id -LEFT JOIN cc_subjs as sub on sub.id = ws.creator_id -WHERE pc.playlist_id = {$this->id} AND pc.type = 1) -UNION ALL -(SELECT pc.id as id, pc.type, pc.position, pc.cliplength as length, pc.cuein, pc.cueout, pc.fadein, pc.fadeout, -bl.id as item_id, bl.name as title, sbj.login as creator, 't'::boolean as exists, NULL::text as path FROM cc_playlistcontents AS pc -JOIN cc_block AS bl on pc.block_id=bl.id -JOIN cc_subjs as sbj ON bl.creator_id=sbj.id WHERE pc.playlist_id = {$this->id} AND pc.type = 2)) as temp -ORDER BY temp.position); -EOT; + $sql = <<id} + AND TYPE = 0) + UNION ALL + (SELECT pc.id AS id, + pc.TYPE, pc.position, + pc.cliplength AS LENGTH, + pc.cuein, + pc.cueout, + pc.fadein, + pc.fadeout, + ws.id AS item_id, + (ws.name || ': ' || ws.url) AS title, + sub.login AS creator, + 't'::boolean AS EXISTS, + ws.url AS path + FROM cc_playlistcontents AS pc + JOIN cc_webstream AS ws ON pc.stream_id=ws.id + LEFT JOIN cc_subjs AS sub ON sub.id = ws.creator_id + WHERE pc.playlist_id = {$this->id} + AND pc.TYPE = 1) + UNION ALL + (SELECT pc.id AS id, + pc.TYPE, pc.position, + pc.cliplength AS LENGTH, + pc.cuein, + pc.cueout, + pc.fadein, + pc.fadeout, + bl.id AS item_id, + bl.name AS title, + sbj.login AS creator, + 't'::boolean AS EXISTS, + NULL::text AS path + FROM cc_playlistcontents AS pc + JOIN cc_block AS bl ON pc.block_id=bl.id + JOIN cc_subjs AS sbj ON bl.creator_id=sbj.id + WHERE pc.playlist_id = {$this->id} + AND pc.TYPE = 2)) AS temp + ORDER BY temp.position); +SQL; + $con = Propel::getConnection(); $rows = $con->query($sql)->fetchAll(); @@ -198,7 +225,7 @@ EOT; $offset_cliplength = Application_Common_DateHelper::secondsToPlaylistTime($offset); //format the length for UI. - if ($row['type'] == 2){ + if ($row['type'] == 2) { $bl = new Application_Model_Block($row['item_id']); $formatter = new LengthFormatter($bl->getFormattedLength()); } else { @@ -210,28 +237,6 @@ EOT; $row['offset'] = $formatter->format(); } - /* - $i = 0; - $offset = 0; - foreach ($rows as $row) { - Logging::log($row); - $files[$i] = $row->toArray(BasePeer::TYPE_FIELDNAME, true, true); - - $clipSec = Application_Common_DateHelper::playlistTimeToSeconds($files[$i]['cliplength']); - $offset += $clipSec; - $offset_cliplength = Application_Common_DateHelper::secondsToPlaylistTime($offset); - - //format the length for UI. - $formatter = new LengthFormatter($files[$i]['cliplength']); - $files[$i]['cliplength'] = $formatter->format(); - - $formatter = new LengthFormatter($offset_cliplength); - $files[$i]['offset'] = $formatter->format(); - - $i++; - } - */ - return $rows; } diff --git a/airtime_mvc/application/models/ShowInstance.php b/airtime_mvc/application/models/ShowInstance.php index f0955313a..d6b9e0538 100644 --- a/airtime_mvc/application/models/ShowInstance.php +++ b/airtime_mvc/application/models/ShowInstance.php @@ -653,9 +653,8 @@ class Application_Model_ShowInstance WHERE s.instance_id = '{$this->_instanceId}' AND s.playout_status >= 0 ORDER BY starts"; - //Logging::log($sql); - $results = $con->query($sql)->fetchAll(); + $results = $con->query($sql)->fetchAll(PDO::FETCH_ASSOC); foreach ($results as &$row) { diff --git a/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js b/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js index 6e0538ada..a20f7421a 100644 --- a/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js +++ b/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js @@ -111,8 +111,9 @@ function playAllShow(p_showID, p_index) { } /** - * This function will call the AudiopreviewController to get the contents of either a show or playlist - * Looping throught the returned contents and creating media for each track. + * This function will call the AudiopreviewController to get the contents of + * either a show or playlist Looping throught the returned contents and + * creating media for each track. * * Then trigger the jplayer to play the list. */ @@ -123,8 +124,7 @@ function buildplaylist(p_url, p_playIndex) { var media; var index; var total = 0; - for(index in data){ - + for(index in data) { if (data[index]['type'] == 0) { if (data[index]['element_mp3'] != undefined){ media = {title: data[index]['element_title'], @@ -146,8 +146,8 @@ function buildplaylist(p_url, p_playIndex) { 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 + // 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; total++; }