From d6bf95500c7f59d3d42ddfad7de7730f517c76a2 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 3 Feb 2012 18:19:13 -0500 Subject: [PATCH] CC-2065: Fade times longer than Airtime supports can be set in Playlist Builder and Preferences - didn't change much fixed two bugs and changed formating. - I introduced a but in Playlist.changeFadeInfo because for the general playlist fade in and out I didn't realize that these values are being set to the first and last elements. So I added a guard. - I also updated the logic for Playlist.moveAudioClip so if new and old position are the same we just return --- .../controllers/PlaylistController.php | 65 ++++++++++--------- airtime_mvc/application/models/Playlist.php | 45 +++++++------ 2 files changed, 58 insertions(+), 52 deletions(-) diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index 66c3d665b..b2b8c25ad 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -163,23 +163,24 @@ class PlaylistController extends Zend_Controller_Action public function moveItemAction() { $oldPos = $this->_getParam('oldPos'); - $newPos = $this->_getParam('newPos'); - - $pl = $this->getPlaylist(); + $newPos = $this->_getParam('newPos'); + + + $pl = $this->getPlaylist(); if($pl === false){ $this->view->playlist_error = true; return false; } - $pl->moveAudioClip($oldPos, $newPos); + $pl->moveAudioClip($oldPos, $newPos); - $this->view->pl = $pl; - $this->view->html = $this->view->render('playlist/update.phtml'); - $this->view->name = $pl->getName(); - $this->view->length = $pl->getLength(); + $this->view->pl = $pl; + $this->view->html = $this->view->render('playlist/update.phtml'); + $this->view->name = $pl->getName(); + $this->view->length = $pl->getLength(); $this->view->description = $pl->getDescription(); - unset($this->view->pl); + unset($this->view->pl); } public function deleteItemAction() @@ -294,19 +295,19 @@ class PlaylistController extends Zend_Controller_Action public function setFadeAction() { - $pos = $this->_getParam('pos'); - $pl = $this->getPlaylist(); + $pos = $this->_getParam('pos'); + $pl = $this->getPlaylist(); + if($pl === false){ $this->view->playlist_error = true; return false; } - $fadeIn = $this->_getParam('fadeIn', null); - $fadeOut = $this->_getParam('fadeOut', null); - - $response = $pl->changeFadeInfo($pos, $fadeIn, $fadeOut); - - $this->view->response = $response; + $fadeIn = $this->_getParam('fadeIn', null); + $fadeOut = $this->_getParam('fadeOut', null); + + $response = $pl->changeFadeInfo($pos, $fadeIn, $fadeOut); + $this->view->response = $response; if(!isset($response["error"])) { $this->view->pl = $pl; @@ -369,33 +370,39 @@ class PlaylistController extends Zend_Controller_Action $this->view->html = $this->view->render('playlist/index.phtml'); } + /** + * The playlist fades are stored in the elements themselves. + * The fade in is set to the first elements fade in and + * the fade out is set to the last elments fade out. + **/ public function setPlaylistFadesAction() { $request = $this->getRequest(); - $pl = $this->getPlaylist(); + $pl = $this->getPlaylist(); if($pl === false){ $this->view->playlist_error = true; return false; } - if($request->isPost()) { - $fadeIn = $this->_getParam('fadeIn', null); - $fadeOut = $this->_getParam('fadeOut', null); + if($request->isPost()) { + $fadeIn = $this->_getParam('fadeIn', null); + $fadeOut = $this->_getParam('fadeOut', null); if($fadeIn) - $response = $pl->changeFadeInfo(0, $fadeIn, $fadeOut); + $response = $pl->changeFadeInfo(0, $fadeIn, $fadeOut); else if($fadeOut) $response = $pl->changeFadeInfo($pl->getSize(), $fadeIn, $fadeOut); - $this->view->response = $response; - return; - } + $this->view->response = $response; - $fades = $pl->getFadeInfo(0); - $this->view->fadeIn = $fades[0]; + return; + } - $fades = $pl->getFadeInfo($pl->getSize()); - $this->view->fadeOut = $fades[1]; + $fades = $pl->getFadeInfo(0); + $this->view->fadeIn = $fades[0]; + + $fades = $pl->getFadeInfo($pl->getSize()); + $this->view->fadeOut = $fades[1]; } public function setPlaylistNameAction() diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 3c7501dd1..11e6312b0 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -219,7 +219,6 @@ class Application_Model_Playlist { if($pl === NULL) return FALSE; - $pl->setDbDescription($p_description); $pl->setDbMtime(new DateTime("now"), new DateTimeZone("UTC")); $pl->save(); @@ -428,18 +427,20 @@ class Application_Model_Playlist { * will normalize the fade so that it looks like 00.000000 to the user. **/ public function normalizeFade($fade) { - //First get rid of the first six characters 00:00: which will be added back later for db update - $fade = substr($fade, 6); + + //First get rid of the first six characters 00:00: which will be added back later for db update + $fade = substr($fade, 6); - //Second add .000000 if the fade does't have milliseconds format already - $dbFadeStrPos = strpos( $fade, '.' ); - if ( $dbFadeStrPos === False ) - $fade .= '.000000'; - else - while( strlen( $fade ) < 9 ) - $fade .= '0'; - //done, just need to set back the formated values - return $fade; + //Second add .000000 if the fade does't have milliseconds format already + $dbFadeStrPos = strpos( $fade, '.' ); + if ( $dbFadeStrPos === False ) + $fade .= '.000000'; + else + while( strlen( $fade ) < 9 ) + $fade .= '0'; + + //done, just need to set back the formated values + return $fade; } public function getLength() { @@ -610,7 +611,7 @@ class Application_Model_Playlist { */ public function moveAudioClip($oldPos, $newPos) { - if($newPos < 0 || $newPos >= $this->getNextPos() || $oldPos < 0 || $oldPos >= $this->getNextPos()) + if($newPos < 0 || $newPos >= $this->getNextPos() || $oldPos < 0 || $oldPos >= $this->getNextPos() || $oldPos === $newPos) return FALSE; $row = $this->delAudioClip($oldPos); @@ -630,21 +631,17 @@ class Application_Model_Playlist { public function getFadeInfo($pos) { - $row = CcPlaylistcontentsQuery::create() + $row = CcPlaylistcontentsQuery::create() ->joinWith(CcFilesPeer::OM_CLASS) ->filterByDbPlaylistId($this->id) ->filterByDbPosition($pos) ->findOne(); - $fadeIn = $row->getDbFadein(); - $fadeOut = $row->getDbFadeout(); - #For issue CC-2065, fade in and out values are for the Playlist itself and must be #modified from the db default format of 00:00:00 to the more practical #00.000000 format which is for only seconds. - $fadeIn = $this->normalizeFade($fadeIn); - $fadeOut = $this->normalizeFade($fadeOut); - + $fadeIn = $this->normalizeFade($row->getDbFadein()); + $fadeOut = $this->normalizeFade($row->getDbFadeout()); return array($fadeIn, $fadeOut); } @@ -661,9 +658,11 @@ class Application_Model_Playlist { */ public function changeFadeInfo($pos, $fadeIn, $fadeOut) { - #See issue CC-2065, pad the fadeIn and fadeOut so that it is TIME compatable with the DB schema - $fadeIn = '00:00:'.$fadeIn; - $fadeOut = '00:00:'.$fadeOut; + //See issue CC-2065, pad the fadeIn and fadeOut so that it is TIME compatable with the DB schema + //For the top level PlayList either fadeIn or fadeOut will sometimes be Null so need a gaurd against + //setting it to nonNull for checks down below + $fadeIn = $fadeIn?'00:00:'.$fadeIn:$fadeIn; + $fadeOut = $fadeOut?'00:00:'.$fadeOut:$fadeOut; $errArray= array(); $con = Propel::getConnection(CcPlaylistPeer::DATABASE_NAME);