CC-1862 playlist builder playlist fadein/out

This commit is contained in:
Naomi 2011-02-08 16:10:48 -05:00
parent 424c6f0193
commit bdad3b34e0
5 changed files with 165 additions and 40 deletions

View file

@ -28,6 +28,7 @@
<actionMethod actionName="delete"/> <actionMethod actionName="delete"/>
<actionMethod actionName="deleteActive"/> <actionMethod actionName="deleteActive"/>
<actionMethod actionName="close"/> <actionMethod actionName="close"/>
<actionMethod actionName="setPlaylistFades"/>
</controllerFile> </controllerFile>
<controllerFile controllerName="Library"> <controllerFile controllerName="Library">
<actionMethod actionName="index"/> <actionMethod actionName="index"/>
@ -287,6 +288,9 @@
<viewControllerScriptsDirectory forControllerName="Library"> <viewControllerScriptsDirectory forControllerName="Library">
<viewScriptFile forActionName="getFileMetaData"/> <viewScriptFile forActionName="getFileMetaData"/>
</viewControllerScriptsDirectory> </viewControllerScriptsDirectory>
<viewControllerScriptsDirectory forControllerName="Playlist">
<viewScriptFile forActionName="setPlaylistFades"/>
</viewControllerScriptsDirectory>
</viewScriptsDirectory> </viewScriptsDirectory>
<viewHelpersDirectory/> <viewHelpersDirectory/>
<viewFiltersDirectory enabled="false"/> <viewFiltersDirectory enabled="false"/>

View file

@ -19,15 +19,16 @@ class PlaylistController extends Zend_Controller_Action
->addActionContext('edit', 'json') ->addActionContext('edit', 'json')
->addActionContext('delete-active', 'json') ->addActionContext('delete-active', 'json')
->addActionContext('delete', 'json') ->addActionContext('delete', 'json')
->addActionContext('set-playlist-fades', 'json')
->initContext(); ->initContext();
$this->pl_sess = new Zend_Session_Namespace(UI_PLAYLIST_SESSNAME); $this->pl_sess = new Zend_Session_Namespace(UI_PLAYLIST_SESSNAME);
} }
private function getPlaylist() private function getPlaylist()
{ {
$pl_sess = $this->pl_sess; $pl_sess = $this->pl_sess;
if(isset($pl_sess->id)) { if(isset($pl_sess->id)) {
$pl = Playlist::Recall($pl_sess->id); $pl = Playlist::Recall($pl_sess->id);
@ -36,13 +37,13 @@ class PlaylistController extends Zend_Controller_Action
return; return;
} }
return $pl; return $pl;
} }
} }
private function changePlaylist($pl_id){
$pl_sess = $this->pl_sess;
private function changePlaylist($pl_id)
{
$pl_sess = $this->pl_sess;
if(isset($pl_sess->id)) { if(isset($pl_sess->id)) {
$pl = Playlist::Recall($pl_sess->id); $pl = Playlist::Recall($pl_sess->id);
@ -58,10 +59,10 @@ class PlaylistController extends Zend_Controller_Action
return FALSE; return FALSE;
} }
$pl->lock($userInfo->id); $pl->lock($userInfo->id);
$pl_sess->id = $pl_id; $pl_sess->id = $pl_id;
} }
private function closePlaylist($pl) private function closePlaylist($pl)
{ {
$userInfo = Zend_Auth::getInstance()->getStorage()->read(); $userInfo = Zend_Auth::getInstance()->getStorage()->read();
$res = $pl->unlock($userInfo->id); $res = $pl->unlock($userInfo->id);
@ -78,9 +79,6 @@ class PlaylistController extends Zend_Controller_Action
$this->view->headLink()->appendStylesheet('/css/playlist_builder.css'); $this->view->headLink()->appendStylesheet('/css/playlist_builder.css');
$this->_helper->viewRenderer->setResponseSegment('spl'); $this->_helper->viewRenderer->setResponseSegment('spl');
$pl_sess = $this->pl_sess;
$this->view->pl = $this->getPlaylist(); $this->view->pl = $this->getPlaylist();
} }
@ -94,14 +92,12 @@ class PlaylistController extends Zend_Controller_Action
$pl->setPLMetaData('dc:creator', $userInfo->login); $pl->setPLMetaData('dc:creator', $userInfo->login);
$this->changePlaylist($pl_id); $this->changePlaylist($pl_id);
$form = new Application_Form_PlaylistMetadata(); $form = new Application_Form_PlaylistMetadata();
$this->view->form = $form->__toString(); $this->view->form = $form->__toString();
} }
public function metadataAction() public function metadataAction()
{ {
$request = $this->getRequest(); $request = $this->getRequest();
$form = new Application_Form_PlaylistMetadata(); $form = new Application_Form_PlaylistMetadata();
@ -141,8 +137,8 @@ class PlaylistController extends Zend_Controller_Action
public function editAction() public function editAction()
{ {
$pl_id = $this->_getParam('id', null); $pl_id = $this->_getParam('id', null);
if(!is_null($pl_id)) { if(!is_null($pl_id)) {
$this->changePlaylist($pl_id); $this->changePlaylist($pl_id);
} }
@ -155,8 +151,8 @@ class PlaylistController extends Zend_Controller_Action
} }
public function addItemAction() public function addItemAction()
{ {
$id = $this->_getParam('id'); $id = $this->_getParam('id');
$pos = $this->_getParam('pos', null); $pos = $this->_getParam('pos', null);
if (!is_null($id)) { if (!is_null($id)) {
@ -181,7 +177,7 @@ class PlaylistController extends Zend_Controller_Action
public function moveItemAction() public function moveItemAction()
{ {
$oldPos = $this->_getParam('oldPos'); $oldPos = $this->_getParam('oldPos');
$newPos = $this->_getParam('newPos'); $newPos = $this->_getParam('newPos');
$pl = $this->getPlaylist(); $pl = $this->getPlaylist();
@ -198,8 +194,8 @@ class PlaylistController extends Zend_Controller_Action
public function deleteItemAction() public function deleteItemAction()
{ {
$positions = $this->_getParam('pos', array()); $positions = $this->_getParam('pos', array());
if (!is_array($positions)) if (!is_array($positions))
$positions = array($positions); $positions = array($positions);
@ -218,12 +214,12 @@ class PlaylistController extends Zend_Controller_Action
$this->view->name = $pl->getName(); $this->view->name = $pl->getName();
$this->view->length = $pl->getLength(); $this->view->length = $pl->getLength();
unset($this->view->pl); unset($this->view->pl);
} }
public function setCueAction() public function setCueAction()
{ {
$request = $this->getRequest(); $request = $this->getRequest();
$pos = $this->_getParam('pos'); $pos = $this->_getParam('pos');
$pl = $this->getPlaylist(); $pl = $this->getPlaylist();
@ -248,7 +244,7 @@ class PlaylistController extends Zend_Controller_Action
public function setFadeAction() public function setFadeAction()
{ {
$request = $this->getRequest(); $request = $this->getRequest();
$pos = $this->_getParam('pos'); $pos = $this->_getParam('pos');
$pl = $this->getPlaylist(); $pl = $this->getPlaylist();
@ -292,8 +288,8 @@ class PlaylistController extends Zend_Controller_Action
} }
public function deleteActiveAction() public function deleteActiveAction()
{ {
$pl = $this->getPlaylist(); $pl = $this->getPlaylist();
Playlist::Delete($pl->getId()); Playlist::Delete($pl->getId());
$pl_sess = $this->pl_sess; $pl_sess = $this->pl_sess;
@ -304,12 +300,38 @@ class PlaylistController extends Zend_Controller_Action
public function closeAction() public function closeAction()
{ {
$pl = $this->getPlaylist(); $pl = $this->getPlaylist();
$this->closePlaylist($pl); $this->closePlaylist($pl);
$this->view->html = $this->view->render('playlist/index.phtml'); $this->view->html = $this->view->render('playlist/index.phtml');
} }
public function setPlaylistFadesAction()
{
$request = $this->getRequest();
$pl = $this->getPlaylist();
if($request->isPost()) {
$fadeIn = $this->_getParam('fadeIn', null);
$fadeOut = $this->_getParam('fadeOut', null);
if($fadeIn)
$response = $pl->changeFadeInfo(0, $fadeIn, $fadeOut);
else if($fadeOut)
$response = $pl->changeFadeInfo($pl->getSize(), $fadeIn, $fadeOut);
$this->view->response = $response;
return;
}
$fades = $pl->getFadeInfo(0);
$this->view->fadeIn = $fades[0];
$fades = $pl->getFadeInfo($pl->getSize());
$this->view->fadeOut = $fades[1];
}
} }
@ -331,6 +353,8 @@ class PlaylistController extends Zend_Controller_Action

View file

@ -355,6 +355,18 @@ class Playlist {
return $res + 1; return $res + 1;
} }
public function getSize() {
$res = CcPlaylistQuery::create()
->findPK($this->id)
->computeLastPosition();
if(is_null($res))
return 0;
return $res;
}
/** /**
* Get the entire playlist as a two dimentional array, sorted in order of play. * Get the entire playlist as a two dimentional array, sorted in order of play.
* @return array * @return array

View file

@ -1,6 +1,9 @@
<button id="spl_new" class="ui-button" role="button" aria-disabled="false">New</button> <button id="spl_new" class="ui-button" role="button" aria-disabled="false">New</button>
<?php if (isset($this->pl)) : ?> <?php if (isset($this->pl)) : ?>
<button id="spl_delete" class="ui-button" role="button" aria-disabled="false">Delete</button> <button id="spl_delete" class="ui-button" role="button" aria-disabled="false">Delete</button>
<a href="#" id="spl_crossfade" class="ui-button ui-button-icon-only ui-widget ui-state-default crossfade-main-button">
<span class="ui-icon crossfade-main-icon"></span><span class="ui-button-text">Playlist crossfade</span>
</a>
<button id="spl_close" class="ui-button right-floated" role="button" aria-disabled="false">Done Editing</button> <button id="spl_close" class="ui-button right-floated" role="button" aria-disabled="false">Done Editing</button>
<?php endif; ?> <?php endif; ?>
@ -8,6 +11,18 @@
<h3 id="spl_name"><?php echo $this->pl->getName(); ?></h3> <h3 id="spl_name"><?php echo $this->pl->getName(); ?></h3>
<h4 id="spl_length"><?php echo $this->pl->getLength(); ?></h4> <h4 id="spl_length"><?php echo $this->pl->getLength(); ?></h4>
<div id="crossfade_main" class="crossfade-main clearfix" style="display:none;">
<span class="ui-icon ui-icon-closethick"></span>
<dl id="spl_editor-main" class="inline-list">
<dt>Fade in:</dt>
<dd id="spl_fade_in_main"><span contenteditable="true" class="spl_text_input">00:00:00</span></dd>
<dd class="edit-error"></dd>
<dt>Fade out:</dt>
<dd id="spl_fade_out_main"><span contenteditable="true" class="spl_text_input">00:00:00</span></dd>
<dd class="edit-error"></dd>
</dl>
</div>
<div class="clear"></div> <div class="clear"></div>
<div class="" style="clear:both; float:none; width:100%;"> <div class="" style="clear:both; float:none; width:100%;">
<ul id="spl_sortable"> <ul id="spl_sortable">

View file

@ -392,13 +392,83 @@ function setUpSPL() {
.button() .button()
.click(closeSPL); .click(closeSPL);
$("#spl_main_crossfade") $("#spl_crossfade").click(function(){
.button({
icons: { if($(this).hasClass("ui-state-active")) {
primary: "crossfade-main-icon" $(this).removeClass("ui-state-active");
}, $("#crossfade_main").hide();
text: false }
}); else {
$(this).addClass("ui-state-active");
var url = '/Playlist/set-playlist-fades';
$.get(url, {format: "json"}, function(json){
$("#spl_fade_in_main").find("span")
.empty()
.append(json.fadeIn);
$("#spl_fade_out_main").find("span")
.empty()
.append(json.fadeOut);
$("#crossfade_main").show();
});
}
});
$("#spl_fade_in_main span:first").blur(function(event){
event.stopPropagation();
var url, fadeIn, span;
span = $(this);
url = "/Playlist/set-playlist-fades";
fadeIn = span.text().trim();
if(!isTimeValid(fadeIn)){
showError(span, "please put in a time '00:00:00 (.000000)'");
return;
}
$.post(url, {format: "json", fadeIn: fadeIn}, function(json){
if(json.response.error) {
return;
}
hideError(span);
});
});
$("#spl_fade_out_main span:first").blur(function(event){
event.stopPropagation();
var url, fadeIn, span;
span = $(this);
url = "/Playlist/set-playlist-fades";
fadeOut = span.text().trim();
if(!isTimeValid(fadeOut)){
showError(span, "please put in a time '00:00:00 (.000000)'");
return;
}
$.post(url, {format: "json", fadeOut: fadeOut}, function(json){
if(json.response.error) {
return;
}
hideError(span);
});
});
$("#spl_fade_in_main span:first, #spl_fade_out_main span:first")
.keydown(submitOnEnter);
$("#crossfade_main > .ui-icon-closethick").click(function(){
$("#spl_crossfade").removeClass("ui-state-active");
$("#crossfade_main").hide();
});
$("#spl_delete") $("#spl_delete")
.button() .button()