From 019d13b4c97e39f3df847f32c2c566cc8d472757 Mon Sep 17 00:00:00 2001 From: James Date: Mon, 30 Jul 2012 17:18:33 -0400 Subject: [PATCH] CC-84: Smart Playlists - backend implementation - UI for blocks within playlist --- .../controllers/PlaylistController.php | 27 ++++-- airtime_mvc/application/models/Playlist.php | 20 +---- airtime_mvc/application/models/Scheduler.php | 85 +++++++++---------- .../views/scripts/playlist/set-fade.phtml | 4 + .../views/scripts/playlist/update.phtml | 36 ++++++-- airtime_mvc/public/css/playlist_builder.css | 10 +++ .../library/events/library_showbuilder.js | 6 +- airtime_mvc/public/js/airtime/library/spl.js | 39 ++++++++- 8 files changed, 144 insertions(+), 83 deletions(-) diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index ce5be5f90..73899017e 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -27,6 +27,7 @@ class PlaylistController extends Zend_Controller_Action ->addActionContext('smart-block-criteria-save', 'json') ->addActionContext('smart-block-generate', 'json') ->addActionContext('smart-block-shuffle', 'json') + ->addActionContext('get-block-info', 'json') ->initContext(); /*$this->pl_sess = new Zend_Session_Namespace(UI_PLAYLIST_SESSNAME); @@ -124,9 +125,9 @@ class PlaylistController extends Zend_Controller_Action $this->view->error = $e->getMessage(); } - private function playlistDynamic($obj) + private function blockDynamic($obj) { - $this->view->error = "You cannot add tracks to dynamic playlist."; + $this->view->error = "You cannot add tracks to dynamic block."; $this->createFullResponse($obj); } @@ -309,7 +310,7 @@ class PlaylistController extends Zend_Controller_Action // if the dest is a block object $obj->addAudioClips($ids, $afterItem, $addType); } else { - throw new PlaylistDyanmicException; + throw new BlockDynamicException; } $this->createUpdateResponse($obj); } @@ -319,8 +320,8 @@ class PlaylistController extends Zend_Controller_Action catch (PlaylistNotFoundException $e) { $this->playlistNotFound($obj_type); } - catch (PlaylistDyanmicException $e) { - $this->playlistDynamic($obj); + catch (BlockDynamicException $e) { + $this->blockDynamic($obj); } catch (Exception $e) { $this->playlistUnknownError($e); @@ -452,7 +453,7 @@ class PlaylistController extends Zend_Controller_Action try { $obj = $this->getPlaylist($type); - $obj->setPlaylistfades($fadeIn, $fadeOut); + $obj->setfades($fadeIn, $fadeOut); $this->view->modified = $obj->getLastModified("U"); } catch (PlaylistOutDatedException $e) { $this->playlistOutdated($e); @@ -565,4 +566,18 @@ class PlaylistController extends Zend_Controller_Action return $info; } + public function getBlockInfoAction(){ + $request = $this->getRequest(); + $params = $request->getPost(); + $bl = new Application_Model_Block($params['id']); + if ($bl->isStatic()) { + $out = $bl->getContents(); + $out['isStatic'] = true; + } else { + $out = Application_Model_Block::getCriteria($params['id']); + $out['isStatic'] = false; + } + die(json_encode($out)); + } + } diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 751bf6fd3..6a4653f09 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -320,23 +320,6 @@ EOT; } } - /*private function buildStreamEntry($p_item, $pos) - { - $stream = CcWebstreamQuery::create()->findPK($p_item, $this->con); - - if (isset($stream)) { - $entry = $this->plItem; - $entry["id"] = $stream->getDbId(); - $entry["pos"] = $pos; - $entry["cliplength"] = $stream->getDbLength(); - $entry["cueout"] = $stream->getDbLength(); - - return $entry; - } else { - throw new Exception("trying to add a stream that does not exist."); - } - }*/ - /* * @param array $p_items * an array of audioclips to add to the playlist @@ -612,7 +595,7 @@ EOT; return array("fadeIn" => $fadeIn, "fadeOut" => $fadeOut); } - public function setPlaylistfades($fadein, $fadeout) + public function setfades($fadein, $fadeout) { if (isset($fadein)) { Logging::log("Setting playlist fade in {$fadein}"); @@ -872,4 +855,3 @@ EOT; class PlaylistNotFoundException extends Exception {} class PlaylistNoPermissionException extends Exception {} class PlaylistOutDatedException extends Exception {} -class PlaylistDyanmicException extends Exception {} diff --git a/airtime_mvc/application/models/Scheduler.php b/airtime_mvc/application/models/Scheduler.php index a07d998d4..e995b88ed 100644 --- a/airtime_mvc/application/models/Scheduler.php +++ b/airtime_mvc/application/models/Scheduler.php @@ -182,9 +182,13 @@ class Application_Model_Scheduler $data["id"] = $file->getDbId(); $data["cliplength"] = $file->getDbLength(); $data["cuein"] = "00:00:00"; - $data["cueout"] = "00:00:00"; - $data["fadein"] = "00:00:00"; - $data["fadeout"] = "00:00:00"; + $data["cueout"] = $file->getDbLength(); + $defaultFade = Application_Model_Preference::GetDefaultFade(); + if (isset($defaultFade)) { + //fade is in format SS.uuuuuu + $data["fadein"] = $defaultFade; + $data["fadeout"] = $defaultFade; + } $data["type"] = 0; $files[] = $data; } @@ -192,48 +196,6 @@ class Application_Model_Scheduler } } } - // find if the playslit is static or dynamic - /*$c = new Criteria(); - $c->add(CcPlaylistPeer::ID, $id); - $pl = CcPlaylistPeer::doSelect($c); - $playlistType = $pl[0]->getDbType(); - - if ($playlistType == "static") { - $contents = CcPlaylistcontentsQuery::create() - ->orderByDbPosition() - ->filterByDbPlaylistId($id) - ->find($this->con); - } else { - $pl = new Application_Model_Playlist($id); - $contents = $pl->getListOfFilesUnderLimit(); - } - - if (is_null($contents)) { - throw new Exception("A selected Playlist does not exist!"); - }*/ - - /*foreach ($contents as $fileId => $plItem) { - $data = $this->fileInfo; - if ($plItem['type'] == 0){ - $file = $plItem->getCcFiles($this->con); - if (isset($file) && $file->getDbFileExists()) { - $data["id"] = $plItem->getDbFileId(); - $data["cliplength"] = $plItem->getDbCliplength(); - $data["cuein"] = $plItem->getDbCuein(); - $data["cueout"] = $plItem->getDbCueout(); - $data["fadein"] = $plItem->getDbFadein(); - $data["fadeout"] = $plItem->getDbFadeout(); - } - } else { - // on dynamic playslsit, $fileId is id of files - $file = Application_Model_StoredFile::Recall($fileId)->getPropelOrm(); - if (isset($file) && $file->getDbFileExists()) { - $data["id"] = $fileId; - $data["cliplength"] = $file->getDbLength(); - } - } - $files[] = $data; - }*/ } else if ($type == "stream") { //need to return $stream = CcWebstreamQuery::create()->findPK($id, $this->con); @@ -256,6 +218,39 @@ class Application_Model_Scheduler $files[] = $data; } + } else if ($type == "block") { + $bl = new Application_Model_Block($id); + if ($bl->isStatic()) { + foreach ($bl->getContents() as $track) { + $data["id"] = $track['item_id']; + $data["cliplength"] = $track['length']; + $data["cuein"] = $track['cuein']; + $data["cueout"] = $track['cueout']; + $data["fadein"] = $track['fadein']; + $data["fadeout"] = $track['fadeout']; + $data["type"] = 0; + $files[] = $data; + } + } else { + $dynamicFiles = $bl->getListOfFilesUnderLimit(); + foreach ($dynamicFiles as $fileId=>$f) { + $file = CcFilesQuery::create()->findPk($fileId); + if (isset($file) && $file->getDbFileExists()) { + $data["id"] = $file->getDbId(); + $data["cliplength"] = $file->getDbLength(); + $data["cuein"] = "00:00:00"; + $data["cueout"] = $file->getDbLength(); + $defaultFade = Application_Model_Preference::GetDefaultFade(); + if (isset($defaultFade)) { + //fade is in format SS.uuuuuu + $data["fadein"] = $defaultFade; + $data["fadeout"] = $defaultFade; + } + $data["type"] = 0; + $files[] = $data; + } + } + } } return $files; } diff --git a/airtime_mvc/application/views/scripts/playlist/set-fade.phtml b/airtime_mvc/application/views/scripts/playlist/set-fade.phtml index 68aa09fc6..6e21fb315 100644 --- a/airtime_mvc/application/views/scripts/playlist/set-fade.phtml +++ b/airtime_mvc/application/views/scripts/playlist/set-fade.phtml @@ -1,12 +1,16 @@
+ item1Type == 0) {?>
Fade out (s):
fadeOut; ?>
+ item2Type == 0) {?>
Fade in (s):
fadeIn; ?>
+
diff --git a/airtime_mvc/application/views/scripts/playlist/update.phtml b/airtime_mvc/application/views/scripts/playlist/update.phtml index 299ea5182..21a9b6477 100644 --- a/airtime_mvc/application/views/scripts/playlist/update.phtml +++ b/airtime_mvc/application/views/scripts/playlist/update.phtml @@ -2,23 +2,40 @@ $items = $this->obj->getContents(); if (count($items)) : ?> - +isStatic(); +} +?>
  • " unqid="">
    - +
    ">
    + +
    + +
    -
    - - +
    +
    + + + Static Block Expand + + Dynamic Block +
    @@ -32,7 +49,7 @@ if (count($items)) : ?> " class="ui-icon ui-icon-closethick">
    - + + partial('playlist/set-fade.phtml', array( 'item1' => $items[$i]['id'], 'item2' => $items[$i+1]['id'], + 'item1Type' => $items[$i]['type'], + 'item2Type' => $items[$i+1]['type'], 'fadeOut' => $items[$i]['fadeout'], 'fadeIn' => $items[$i+1]['fadein'])); ?> - + +
    +
  • diff --git a/airtime_mvc/public/css/playlist_builder.css b/airtime_mvc/public/css/playlist_builder.css index 5c49fed0e..a49617c32 100644 --- a/airtime_mvc/public/css/playlist_builder.css +++ b/airtime_mvc/public/css/playlist_builder.css @@ -79,6 +79,16 @@ text-align:right; } +.spl_block_expand { + float:right; + font-size: 9px; + height: 15px; + right: 35px; + width: 100px; + margin-top:2px; + cursor:pointer; +} + .spl_artist { font-size:12px; color:#d5d5d5; diff --git a/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js b/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js index 96057126d..ea33951fc 100644 --- a/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js +++ b/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js @@ -88,8 +88,7 @@ var AIRTIME = (function(AIRTIME){ }); }; - mod.dblClickAdd = function(id, type) { - + mod.dblClickAdd = function(data, type) { var i, length, temp, @@ -98,7 +97,7 @@ var AIRTIME = (function(AIRTIME){ aData = []; //process selected files/playlists. - aMediaIds.push({"id": id, "type": type}); + aMediaIds.push({"id": data.id, "type": type}); $("#show_builder_table tr.cursor-selected-row").each(function(i, el){ aData.push($(el).prev().data("aData")); @@ -114,6 +113,7 @@ var AIRTIME = (function(AIRTIME){ alert("Please select a cursor position on timeline."); return false; } + console.log(aMediaIds); AIRTIME.showbuilder.fnAdd(aMediaIds, aSchedIds); }; diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js index c1699b3e5..03dba85e5 100644 --- a/airtime_mvc/public/js/airtime/library/spl.js +++ b/airtime_mvc/public/js/airtime/library/spl.js @@ -352,6 +352,40 @@ var AIRTIME = (function(AIRTIME){ //add the play function to the play icon $pl.delegate(".big_play", {"click": openAudioPreview}); + + $pl.delegate(".spl_block_expand", + {"click": function(ev){ + var id = parseInt($(this).attr("id").split("_").pop(), 10); + if ($(this).hasClass('close')) { + var sUrl = "/playlist/get-block-info"; + mod.disableUI(); + $.post(sUrl, {format:"json", id:id}, function(json){ + $html = ""; + var data = $.parseJSON(json); + var isStatic = data.isStatic; + delete data.type; + if (isStatic) { + $.each(data, function(index, ele){ + $html += "
    "+ele.track_title+" "+ele.creator+" "+ele.length+"
    "; + }) + } else { + for (var key in data.crit){ + $.each(data.crit[key], function(index, ele){ + var extra = (ele['extra']==null)?"":ele['extra']; + $html += "
    "+ele['display_name']+" "+ele['modifier']+" "+ele['value']+" "+extra+"
    "; + }); + } + $html += "
    "+data.limit.value+" "+data.limit.modifier; + } + $pl.find("#block_"+id+"_info").html($html); + mod.enableUI(); + }); + $(this).removeClass('close'); + } else { + $pl.find("#block_"+id+"_info").html(""); + $(this).addClass('close'); + } + }}); } //sets events dynamically for the cue editor. @@ -384,7 +418,7 @@ var AIRTIME = (function(AIRTIME){ //main playlist fades events $pl.on("click", "#spl_crossfade", function() { var lastMod = getModified(), - type = $('#obj_type'); + type = $('#obj_type').val(); if ($(this).hasClass("ui-state-active")) { $(this).removeClass("ui-state-active"); @@ -394,8 +428,7 @@ var AIRTIME = (function(AIRTIME){ $(this).addClass("ui-state-active"); var url = '/Playlist/get-playlist-fades'; - - $.get(url, + $.post(url, {format: "json", modified: lastMod, type: type}, function(json){ if (json.error !== undefined){