diff --git a/airtime_mvc/application/configs/navigation.php b/airtime_mvc/application/configs/navigation.php index 4d63196fa..724fa4c40 100644 --- a/airtime_mvc/application/configs/navigation.php +++ b/airtime_mvc/application/configs/navigation.php @@ -8,38 +8,38 @@ * the navigation container below. */ $pages = array( - array( + array( 'label' => 'Now Playing', 'module' => 'default', 'controller' => 'Showbuilder', 'action' => 'index', - 'resource' => 'showbuilder' - ), - array( - 'label' => 'Add Media', - 'module' => 'default', - 'controller' => 'Plupload', - 'action' => 'index', - 'resource' => 'plupload' - ), - array( - 'label' => 'Library', - 'module' => 'default', - 'controller' => 'Playlist', - 'action' => 'index', - 'resource' => 'playlist' - ), - array( + 'resource' => 'showbuilder' + ), + array( + 'label' => 'Add Media', + 'module' => 'default', + 'controller' => 'Plupload', + 'action' => 'index', + 'resource' => 'plupload' + ), + array( + 'label' => 'Library', + 'module' => 'default', + 'controller' => 'Library', + 'action' => 'index', + 'resource' => 'playlist' + ), + array( 'label' => 'Calendar', 'module' => 'default', 'controller' => 'Schedule', 'action' => 'index', - 'resource' => 'schedule' - ), + 'resource' => 'schedule' + ), array( 'label' => 'System', - 'uri' => '#', - 'resource' => 'preference', + 'uri' => '#', + 'resource' => 'preference', 'pages' => array( array( 'label' => 'Preferences', @@ -51,14 +51,14 @@ $pages = array( 'module' => 'default', 'controller' => 'user', 'action' => 'add-user', - 'resource' => 'user' + 'resource' => 'user' ), array( 'label' => 'Media Folders', 'module' => 'default', 'controller' => 'Preference', 'action' => 'directory-config', - 'id' => 'manage_folder' + 'id' => 'manage_folder' ), array( 'label' => 'Streams', @@ -77,28 +77,28 @@ $pages = array( 'module' => 'default', 'controller' => 'systemstatus', 'action' => 'index', - 'resource' => 'systemstatus' + 'resource' => 'systemstatus' ), - array( - 'label' => 'Playout History', - 'module' => 'default', - 'controller' => 'playouthistory', - 'action' => 'index', - 'resource' => 'playouthistory' - ) + array( + 'label' => 'Playout History', + 'module' => 'default', + 'controller' => 'playouthistory', + 'action' => 'index', + 'resource' => 'playouthistory' + ) ) ), - array( - 'label' => 'Help', - 'uri' => '#', - 'resource' => 'dashboard', + array( + 'label' => 'Help', + 'uri' => '#', + 'resource' => 'dashboard', 'pages' => array( array( 'label' => 'Getting Started', 'module' => 'default', 'controller' => 'dashboard', 'action' => 'help', - 'resource' => 'dashboard' + 'resource' => 'dashboard' ), array( 'label' => 'User Manual', @@ -110,10 +110,10 @@ $pages = array( 'module' => 'default', 'controller' => 'dashboard', 'action' => 'about', - 'resource' => 'dashboard' + 'resource' => 'dashboard' ) ) - ) + ) ); diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 79f95ba4f..3ba5738bd 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -27,6 +27,65 @@ class LibraryController extends Zend_Controller_Action $this->search_sess = new Zend_Session_Namespace("search"); } + public function indexAction() + { + global $CC_CONFIG; + + $request = $this->getRequest(); + $baseUrl = $request->getBaseUrl(); + + $this->view->headScript()->appendFile($baseUrl.'/js/blockui/jquery.blockUI.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.fnSetFilteringDelay.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColVis.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColReorder.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedColumns.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/utilities/utilities.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($this->view->baseUrl('/js/airtime/library/events/library_playlistbuilder.js'), 'text/javascript'); + + $this->view->headLink()->appendStylesheet($baseUrl.'/css/media_library.css?'.$CC_CONFIG['airtime_version']); + $this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.contextMenu.css?'.$CC_CONFIG['airtime_version']); + $this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColVis.css?'.$CC_CONFIG['airtime_version']); + $this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColReorder.css?'.$CC_CONFIG['airtime_version']); + + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/spl.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/playlist/smart_blockbuilder.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headLink()->appendStylesheet($baseUrl.'/css/playlist_builder.css?'.$CC_CONFIG['airtime_version']); + + try { + if (isset($this->obj_sess->id)) { + $objInfo = Application_Model_Playlist::getObjInfo($this->obj_sess->type); + $obj = new $objInfo['className']($this->obj_sess->id); + $userInfo = Zend_Auth::getInstance()->getStorage()->read(); + $user = new Application_Model_User($userInfo->id); + $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); + + if ($isAdminOrPM || $obj->getCreatorId() == $userInfo->id) { + $this->view->obj = $obj; + if ($this->obj_sess->type == "block") { + $form = new Application_Form_SmartBlockCriteria(); + $form->startForm($this->obj_sess->id); + $this->view->form = $form; + } + } + + $formatter = new LengthFormatter($obj->getLength()); + $this->view->length = $formatter->format(); + $this->view->type = $this->obj_sess->type; + } + } catch (PlaylistNotFoundException $e) { + $this->playlistNotFound($this->obj_sess->type); + } catch (Exception $e) { + $this->playlistUnknownError($e); + } + } + + public function contextMenuAction() { $id = $this->_getParam('id'); @@ -270,7 +329,7 @@ class LibraryController extends Zend_Controller_Action Logging::log($data['MDATA_KEY_FILEPATH']); Application_Model_RabbitMq::SendMessageToMediaMonitor("md_update", $data); - $this->_redirect('Playlist'); + $this->_redirect('Library'); } } diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index 91ad684d7..28ea6b5f6 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -39,7 +39,7 @@ class PlaylistController extends Zend_Controller_Action { $obj = null; - $objInfo = $this->getObjInfo($p_type); + $objInfo = Application_Model_Playlist::getObjInfo($p_type); if (isset($this->obj_sess->id)) { $obj = new $objInfo['className']($this->obj_sess->id); @@ -106,14 +106,13 @@ class PlaylistController extends Zend_Controller_Action } else { $this->view->html = $this->view->render($viewPath); } - }else{ + } else { $this->view->obj = $obj; $this->view->id = $obj->getId(); $this->view->html = $this->view->render($viewPath); unset($this->view->obj); } - } - else { + } else { $this->view->html = $this->view->render($viewPath); } } @@ -138,7 +137,8 @@ class PlaylistController extends Zend_Controller_Action $this->createFullResponse(null); } - private function playlistNoPermission($p_type){ + private function playlistNoPermission($p_type) + { $this->view->error = "You don't have permission to delete selected {$p_type}(s)."; } @@ -151,12 +151,14 @@ class PlaylistController extends Zend_Controller_Action Logging::log("{$e->getMessage()}"); } - private function wrongTypeToBlock($obj) { + private function wrongTypeToBlock($obj) + { $this->view->error = "You can only add tracks to smart block."; $this->createFullResponse($obj); } - private function wrongTypeToPlaylist($obj) { + private function wrongTypeToPlaylist($obj) + { $this->view->error = "You can only add tracks and smart blocks to playlists."; $this->createFullResponse($obj); } @@ -168,40 +170,40 @@ class PlaylistController extends Zend_Controller_Action $request = $this->getRequest(); $baseUrl = $request->getBaseUrl(); - $this->view->headScript()->appendFile($baseUrl.'/js/blockui/jquery.blockUI.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/blockui/jquery.blockUI.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.fnSetFilteringDelay.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColVis.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColReorder.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedColumns.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColVis.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColReorder.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedColumns.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'/js/airtime/utilities/utilities.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headScript()->appendFile($this->view->baseUrl('/js/airtime/library/events/library_playlistbuilder.js'),'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/utilities/utilities.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($this->view->baseUrl('/js/airtime/library/events/library_playlistbuilder.js'), 'text/javascript'); $this->view->headLink()->appendStylesheet($baseUrl.'/css/media_library.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.contextMenu.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColVis.css?'.$CC_CONFIG['airtime_version']); $this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColReorder.css?'.$CC_CONFIG['airtime_version']); - $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/spl.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'/js/airtime/playlist/smart_blockbuilder.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/spl.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/playlist/smart_blockbuilder.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); $this->view->headLink()->appendStylesheet($baseUrl.'/css/playlist_builder.css?'.$CC_CONFIG['airtime_version']); try { if (isset($this->obj_sess->id)) { - $objInfo = $this->getObjInfo($this->obj_sess->type); + $objInfo = Application_Model_Playlist::getObjInfo($this->obj_sess->type); $obj = new $objInfo['className']($this->obj_sess->id); $userInfo = Zend_Auth::getInstance()->getStorage()->read(); $user = new Application_Model_User($userInfo->id); $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); - if($isAdminOrPM || $obj->getCreatorId() == $userInfo->id){ + if ($isAdminOrPM || $obj->getCreatorId() == $userInfo->id) { $this->view->obj = $obj; - if($this->obj_sess->type == "block"){ + if ($this->obj_sess->type == "block") { $form = new Application_Form_SmartBlockCriteria(); $form->startForm($this->obj_sess->id); $this->view->form = $form; @@ -225,7 +227,7 @@ class PlaylistController extends Zend_Controller_Action $userInfo = Zend_Auth::getInstance()->getStorage()->read(); $type = $this->_getParam('type'); - $objInfo = $this->getObjInfo($type); + $objInfo = Application_Model_Playlist::getObjInfo($type); $name = 'Untitled Playlist'; if ($type == 'block') { @@ -244,7 +246,7 @@ class PlaylistController extends Zend_Controller_Action { $id = $this->_getParam('id', null); $type = $this->_getParam('type'); - $objInfo = $this->getObjInfo($type); + $objInfo = Application_Model_Playlist::getObjInfo($type); Logging::log("editing {$type} {$id}"); if (!is_null($id)) { @@ -269,7 +271,7 @@ class PlaylistController extends Zend_Controller_Action $obj = null; - $objInfo = $this->getObjInfo($type); + $objInfo = Application_Model_Playlist::getObjInfo($type); $userInfo = Zend_Auth::getInstance()->getStorage()->read(); $user = new Application_Model_User($userInfo->id); @@ -283,6 +285,7 @@ class PlaylistController extends Zend_Controller_Action Logging::log("Not deleting currently active {$type}"); $obj = new $objInfo['className']($this->obj_sess->id); } + if (strcmp($objInfo['className'], 'Application_Model_Playlist')==0) { Application_Model_Playlist::deletePlaylists($ids, $userInfo->id); } else { @@ -310,7 +313,7 @@ class PlaylistController extends Zend_Controller_Action try { $obj = $this->getPlaylist($obj_type); if ($obj_type == 'playlist') { - foreach($ids as $id) { + foreach ($ids as $id) { if (is_array($id) && isset($id[1])) { if ($id[1] == 'playlist') { throw new WrongTypeToPlaylistException; @@ -321,7 +324,7 @@ class PlaylistController extends Zend_Controller_Action } else if ($obj->isStatic()) { // if the dest is a block object //check if any items are playlists - foreach($ids as $id) { + foreach ($ids as $id) { if (is_array($id) && isset($id[1])) { if ($id[1] != 'audioclip') { throw new WrongTypeToBlockException; @@ -333,11 +336,9 @@ class PlaylistController extends Zend_Controller_Action throw new BlockDynamicException; } $this->createUpdateResponse($obj); - } - catch (PlaylistOutDatedException $e) { + } catch (PlaylistOutDatedException $e) { $this->playlistOutdated($e); - } - catch (PlaylistNotFoundException $e) { + } catch (PlaylistNotFoundException $e) { $this->playlistNotFound($obj_type); } catch (WrongTypeToBlockException $e) { @@ -553,14 +554,12 @@ class PlaylistController extends Zend_Controller_Action $result = $bl->generateSmartBlock($params['data']); try { die(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true)))); - } - catch (PlaylistNotFoundException $e) { + } catch (PlaylistNotFoundException $e) { $this->playlistNotFound('block'); - } - catch (Exception $e) { + } catch (Exception $e) { $this->playlistUnknownError($e); } - }else{ + } else { $this->view->obj = $bl; $this->view->id = $bl->getId(); $this->view->form = $form; @@ -581,32 +580,16 @@ class PlaylistController extends Zend_Controller_Action if ($result['result'] == 0) { try { die(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true)))); - } - catch (PlaylistNotFoundException $e) { + } catch (PlaylistNotFoundException $e) { $this->playlistNotFound('block'); } - catch (Exception $e) { - $this->playlistUnknownError($e); - } - }else{ + } else { die(json_encode($result)); } } - public function getObjInfo($p_type) + public function getBlockInfoAction() { - $info = array(); - - if (strcmp($p_type, 'playlist')==0) { - $info['className'] = 'Application_Model_Playlist'; - } else { - $info['className'] = 'Application_Model_Block'; - } - - return $info; - } - - public function getBlockInfoAction(){ $request = $this->getRequest(); $params = $request->getPost(); $bl = new Application_Model_Block($params['id']); diff --git a/airtime_mvc/application/controllers/WebstreamController.php b/airtime_mvc/application/controllers/WebstreamController.php index bf67e13bd..c195b23c7 100644 --- a/airtime_mvc/application/controllers/WebstreamController.php +++ b/airtime_mvc/application/controllers/WebstreamController.php @@ -54,6 +54,10 @@ class WebstreamController extends Zend_Controller_Action $webstream = CcWebstreamQuery::create()->findPK($id)->delete(); + $this->view->ws = null; + $this->view->action = "delete"; + $this->view->html = $this->view->render('webstream/webstream.phtml'); + } public function saveAction() diff --git a/airtime_mvc/application/forms/SmartBlockCriteria.php b/airtime_mvc/application/forms/SmartBlockCriteria.php index f23885414..0e68f957a 100644 --- a/airtime_mvc/application/forms/SmartBlockCriteria.php +++ b/airtime_mvc/application/forms/SmartBlockCriteria.php @@ -240,7 +240,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm $generate = new Zend_Form_Element_Button('generate_button'); $generate->setAttrib('class', 'ui-button ui-state-default sp-button'); - $generate->setAttrib('title', 'Generate playlist content'); + $generate->setAttrib('title', 'Generate playlist content and save criteria'); $generate->setIgnore(true); $generate->setLabel('Generate'); $generate->setDecorators(array('viewHelper')); diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index fbd429d1e..d5816fab5 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -1141,6 +1141,14 @@ EOT; // if the column is timestamp, convert it into UTC if ($column->getType() == PropelColumnTypes::TIMESTAMP) { $spCriteriaValue = Application_Common_DateHelper::ConvertToUtcDateTimeString($criteria['value']); + /* Check if only a date was supplied and trim + * the time after it is converted to UTC time + */ + if (strlen($criteria['value']) <= 10) { + //extract date only from timestamp in db + $spCriteria = 'date('.$spCriteria.')'; + $spCriteriaValue = substr($spCriteriaValue, 0, 10); + } } else if($spCriteria == "bit_rate") { // multiply 1000 because we store only number value // e.g 192kps is stored as 192000 diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 19023fc8d..29dcd03f8 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -899,6 +899,19 @@ SQL; CcPlaylistcontentsQuery::create()->findByDbPlaylistId($this->id)->delete(); } + public static function getObjInfo($p_type) + { + $info = array(); + + if (strcmp($p_type, 'playlist')==0) { + $info['className'] = 'Application_Model_Playlist'; + } else { + $info['className'] = 'Application_Model_Block'; + } + + return $info; + } + } // class Playlist class PlaylistNotFoundException extends Exception {} diff --git a/airtime_mvc/application/views/scripts/playlist/index.phtml b/airtime_mvc/application/views/scripts/library/index.phtml similarity index 100% rename from airtime_mvc/application/views/scripts/playlist/index.phtml rename to airtime_mvc/application/views/scripts/library/index.phtml diff --git a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js index 00b55e7df..05c0422ce 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js @@ -458,7 +458,7 @@ function callback(data, type) { if (type == 'shuffle') { form.find('.success').text('Smart block shuffled'); } else if (type == 'generate') { - form.find('.success').text('Smart block generated and saved'); + form.find('.success').text('Smart block generated and criteria saved'); //redraw library table so the length gets updated dt.fnStandingRedraw(); } diff --git a/python_apps/pypo/install/pypo-initialize.py b/python_apps/pypo/install/pypo-initialize.py index b2a36d96e..ebf49a65c 100644 --- a/python_apps/pypo/install/pypo-initialize.py +++ b/python_apps/pypo/install/pypo-initialize.py @@ -94,7 +94,6 @@ try: #liq_path DNE, which is OK. pass - os.symlink(liq_path, symlink_path) else: print " * Liquidsoap binary not found!"