function indexAction() { if (X_VlcShares_Plugins::helpers()->devices()->isWiimc()) { // everything have to be in plx format $plx = new X_Plx(X_Env::_('p_auth_loginindex_plxtitle'), X_Env::_('p_auth_loginindex_plxdesc')); $plx->addItem(new X_Plx_Item(X_Env::_('p_auth_login_advice'), X_Env::completeUrl($this->_helper->url('index', 'auth')))); $plx->addItem(new X_Plx_Item(X_Env::_('p_auth_login_pressbbutton'), X_Env::completeUrl($this->_helper->url('index', 'auth')))); $this->_helper->viewRenderer->setNoRender(true); $this->_helper->layout->disableLayout(); $this->getResponse()->setHeader('Content-Type', 'text/plain'); $this->getResponse()->setBody((string) $plx); //echo $plx; return; } //if ( $this->ns->enabled && isset($this->ns->username) ) { //throw new Exception(X_Env::_('p_auth_already_loggedin')); //} if ($this->plugin->isLoggedIn()) { throw new Exception(X_Env::_('p_auth_already_loggedin')); } $form = new Application_Form_AuthLogin(); $form->setAction($this->_helper->url('login', 'auth')); $this->view->form = $form; $this->view->messages = $this->_helper->flashMessenger->getMessages(); }
public function indexAction() { $lang = $this->getRequest()->getParam('lang', false); $languages = array(); foreach (new DirectoryIterator(APPLICATION_PATH . "/../languages/") as $entry) { if ($entry->isFile() && pathinfo($entry->getFilename(), PATHINFO_EXTENSION) == 'ini') { if (count(explode('.', $entry->getFilename())) == 2) { $languages[$entry->getFilename()] = pathinfo($entry->getFilename(), PATHINFO_FILENAME); } } } if ($lang != false) { // cleanup from ./ and ../ $lang = str_replace(array('.', '/'), '', $lang); if (file_exists(APPLICATION_PATH . "/../languages/{$lang}.ini") && array_key_exists("{$lang}.ini", $languages)) { $translation = new Zend_Translate('ini', APPLICATION_PATH . "/../languages/{$lang}.ini"); X_Env::initTranslator($translation); } else { $this->_helper->flashMessenger(array('type' => 'error', 'text' => X_Env::_('installer_invalid_language'))); $lang = false; } } $form = new Application_Form_Installer(); $form->setAction($this->_helper->url('save', 'installer')); try { $form->lang->setMultiOptions($languages); $form->setDefault('lang', $lang !== false ? "{$lang}.ini" : 'en_GB.ini'); $form->setDefault('auth', 0); $form->setDefault('threads', X_Env::completeUrl($this->_helper->url('start', 'threads'))); } catch (Exception $e) { // WTF? } // try to read the manifest of plugins index $plugins = $this->getInstallablePlugins(); try { $form->plugins->setMultiOptions($plugins); } catch (Exception $e) { // Connection kaboom? } $ns = new Zend_Session_Namespace('vlc-shares::installer'); if (isset($ns->errors) && $ns->errors) { $form->isValid($ns->data); unset($ns->errors); unset($ns->data); } $threadsChecks = $this->_helper->url('check', 'threads'); $threadsPing = $this->_helper->url('ping', 'threads'); $basePing = $this->_helper->url('', 'threads'); $httpPort = $_SERVER['SERVER_PORT']; $httpPort = $httpPort != '80' && $httpPort != '' ? ":{$httpPort}" : ''; $threadsUrls = array("'http://localhost{$httpPort}{$basePing}'", "'http://127.0.0.1{$httpPort}{$basePing}'", "'http://127.0.1.1{$httpPort}{$basePing}'", "'http://192.168.1.1{$httpPort}{$basePing}'"); $this->view->messages = array_merge($this->_helper->flashMessenger->getMessages(), $this->_helper->flashMessenger->getCurrentMessages()); $this->_helper->flashMessenger->clearCurrentMessages(); $this->view->languages = $languages; $this->view->threadsCheck = $threadsChecks; $this->view->threadsPing = $threadsPing; $this->view->threadsUrls = $threadsUrls; $this->view->form = $form; }
public function gen_afterPageBuild(X_Page_ItemList_PItem $items, Zend_Controller_Action $controller) { if (count($items->getItems()) == 0) { X_Debug::i("Plugin triggered"); $item = new X_Page_Item_PItem('emptylists', X_Env::_('p_emptylists_moveaway')); $item->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink(X_Env::completeUrl($controller->getHelper('url')->url())); $items->append($item); } }
public function gen_afterPageBuild(X_Page_ItemList_PItem $items, Zend_Controller_Action $controller) { if ($this->helpers()->devices()->isWiimc() && $this->helpers()->devices()->isWiimcBeforeVersion('1.0.9')) { if (count($items->getItems()) === 1) { X_Debug::i("Plugin triggered"); $item = new X_Page_Item_PItem('workaroundwiimcplaylistitemsbug', '-- Workaround for bug in Wiimc <= 1.0.9 --'); $item->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink(X_Env::completeUrl($controller->getHelper('url')->url())); $items->append($item); } } }
/** * Show the header inside the selection page */ public function preGetSelectionItems($provider, $location, $pid, Zend_Controller_Action $controller) { // we want to expose items only if pid is this plugin if ($this->getId() != $pid) { return; } X_Debug::i('Plugin triggered'); $urlHelper = $controller->getHelper('url'); $link = new X_Page_Item_PItem($this->getId() . '-header', X_Env::_('p_profiles_selection_title')); $link->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink(X_Env::completeUrl($urlHelper->url())); return new X_Page_ItemList_PItem(); }
public function scriptAction() { $hosters = X_VlcShares_Plugins::helpers()->hoster()->getHosters(); $csrf = new Zend_Form_Element_Hash('csrf', array('salt' => __CLASS__)); $csrf->initCsrfToken(); $this->view->hosters = $hosters; $this->view->frameUrl = X_Env::completeUrl($this->_helper->url->url(array('controller' => 'bookmarklets', 'action' => 'frame'))); $this->view->cssUrl = X_Env::completeUrl($this->_helper->viewRenderer->view->baseUrl('/css/bookmarklets/injected.css')); $this->view->xfcUrl = X_Env::completeUrl($this->_helper->viewRenderer->view->baseUrl('/js/jquery.xfc.js')); $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setViewSuffix('pjs'); $this->getResponse()->setHeader('Content-Type', 'application/javascript'); }
public function getModeItems($provider, $location, Zend_Controller_Action $controller) { $list = new X_Page_ItemList_PItem(); $urlHelper = $controller->getHelper('url'); if ($this->countdown > 0) { $countdown = new X_Page_Item_PItem('core-countdown', X_Env::_('core_countdown', $this->countdown)); $countdown->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setIcon("/images/{$this->getId()}/logo.png")->setLink(X_Env::completeUrl($urlHelper->url())); $list->append($countdown); } if ($this->error_message) { $error = new X_Page_Item_PItem('core-error', X_Env::_($this->error_message)); $error->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setIcon("/images/{$this->getId()}/logo.png")->setLink(X_Env::completeUrl($urlHelper->url())); $list->append($error); } return $list; }
public function preGetSelectionItems($provider, $location, $pid, Zend_Controller_Action $controller) { // we want to expose items only if pid is this plugin if ($this->getId() != $pid) { return; } // check for resolvable $location // this plugin is useless if i haven't an access // to the real location (url for stream or path for file) $provider = X_VlcShares_Plugins::broker()->getPlugins($provider); if (!$provider instanceof X_VlcShares_Plugins_ResolverInterface) { return; } X_Debug::i('Plugin triggered'); $urlHelper = $controller->getHelper('url'); $link = new X_Page_Item_PItem($this->getId() . '-header', X_Env::_('p_audioswitcher_selection_title')); $link->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink(X_Env::completeUrl($urlHelper->url())); return new X_Page_ItemList_PItem(); }
/** * Add the button BackToStream in controls page * * @param X_Streamer_Engine $engine * @param Zend_Controller_Action $controller the controller who handle the request * @return array */ public function preGetControlItems(X_Streamer_Engine $engine, Zend_Controller_Action $controller) { $urlHelper = $controller->getHelper('url'); $return = new X_Page_ItemList_PItem(); if ($this->config('show.title', true)) { $onAirName = X_Env::_("p_streaminfo_unknown_source"); if ($engine instanceof X_Streamer_Engine_Vlc) { $vlc = $engine->getVlcWrapper(); $onAirName = $vlc->getCurrentName(); } else { // try to find the name from the location (if any) $providerId = $controller->getRequest()->getParam('p', false); $location = $controller->getRequest()->getParam('l', false); if ($providerId && $location) { $providerObj = X_VlcShares_Plugins::broker()->getPlugins($providerId); $location = X_Env::decode($location); if ($providerObj instanceof X_VlcShares_Plugins_ResolverInterface) { $onAirName = $providerObj->resolveLocation($location); } } } // show the title of the file $item = new X_Page_Item_PItem('streaminfo-onair', X_Env::_('p_streaminfo_onair') . ": {$onAirName}"); $item->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink(X_Env::completeUrl($urlHelper->url())); $return->append($item); } if ($engine instanceof X_Streamer_Engine_Vlc) { $vlc = $engine->getVlcWrapper(); if ($this->config('show.time', false)) { $currentTime = X_Env::formatTime($vlc->getCurrentTime()); $totalTime = X_Env::formatTime($vlc->getTotalTime()); $item = new X_Page_Item_PItem('streaminfo-time', "{$currentTime}/{$totalTime}"); $item->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink(X_Env::completeUrl($urlHelper->url())); $return->append($item); } } return $return; }
/** * Check the item in the collection should be filtered out * If return is false, the item will be discarded at 100% * If return is true, isn't sure that the item will be added * 'cause another plugin can prevent this * * Plugins who check per-item acl or blacklist should hook here * * @param X_Page_Item_PItem $item * @param string $provider * @param Zend_Controller_Action $controller * @return boolean true if item is ok, false if item should be discarded */ public function filterShareItems(X_Page_Item_PItem $item, $provider, Zend_Controller_Action $controller) { $providerClass = X_VlcShares_Plugins::broker()->getPluginClass($provider); $providerObj = X_VlcShares_Plugins::broker()->getPlugins($provider); if (is_a($providerObj, 'X_VlcShares_Plugins_FileSystem')) { if ($item->getType() == X_Page_Item_PItem::TYPE_ELEMENT) { $itemLocation = $item->getCustom('X_VlcShares_Plugins_FileSystem:location'); /* @var $urlHelper Zend_Controller_Action_Helper_Url */ $urlHelper = $controller->getHelper('url'); $path = $providerObj->resolveLocation($itemLocation); $thumb = new Application_Model_FsThumb(); Application_Model_FsThumbsMapper::i()->fetchByPath($path, $thumb); if ($thumb->isNew()) { $thumbUrl = X_Env::completeUrl($urlHelper->direct('thumb', 'fsthumbs', 'default', array('l' => X_Env::encode($itemLocation), 't' => 'dummy.jpg'))); } else { $thumbUrl = X_Env::completeUrl(Zend_Controller_Front::getInstance()->getBaseUrl() . $thumb->getUrl()); } //$item->setDescription($itemLocation); $item->setThumbnail($thumbUrl); } } return true; }
public function selectionAction() { $request = $this->getRequest(); X_VlcShares_Plugins::broker()->gen_preProviderSelection($this); $provider = $request->getParam('p', false); if ($provider === false || !X_VlcShares_Plugins::broker()->isRegistered($provider)) { throw new Exception("Invalid provider"); } $pid = $request->getParam('pid', false); if ($pid === false || !X_VlcShares_Plugins::broker()->isRegistered($pid)) { throw new Exception("Invalid pluginId"); } $location = X_Env::decode($request->getParam('l', '')); $pageItems = new X_Page_ItemList_PItem(); // I add a "Back" button as first, this should redirect to mode action $back = new X_Page_Item_PItem('core-back', X_Env::_('back')); $back->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink(array('action' => 'mode', 'pid' => null), 'default', false); $pageItems->append($back); // links on top $pageItems->merge(X_VlcShares_Plugins::broker()->preGetSelectionItems($provider, $location, $pid, $this)); // add separator between header items and options items $separator = new X_Page_Item_PItem('core-separator', X_Env::_('_____options_separator_____')); $separator->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink(X_Env::completeUrl($this->_helper->url->url())); $pageItems->append($separator); // normal links $pageItems->merge(X_VlcShares_Plugins::broker()->getSelectionItems($provider, $location, $pid, $this)); // bottom links $pageItems->merge(X_VlcShares_Plugins::broker()->postGetSelectionItems($provider, $location, $pid, $this)); // filter out items (parental-control / hidden file / system dir) foreach ($pageItems->getItems() as $key => $item) { $results = X_VlcShares_Plugins::broker()->filterSelectionItems($item, $provider, $pid, $this); if ($results != null && in_array(false, $results)) { $pageItems->remove($item); } } // trigger for page creation X_VlcShares_Plugins::broker()->gen_afterPageBuild($pageItems, $this); }
/** * This hook can be used to add low priority args in vlc stack * * @param X_Vlc $vlc vlc wrapper object * @param string $provider id of the plugin that should handle request * @param string $location to stream * @param Zend_Controller_Action $controller the controller who handle the request */ public function preRegisterVlcArgs(X_Vlc $vlc, $provider, $location, Zend_Controller_Action $controller) { // this plugin inject params only if this is the provider if ($provider != $this->getId()) { return; } // i need to register source as first, because subtitles plugin use source // for create subfile X_Debug::i('Plugin triggered'); $dLocation = $this->resolveLocation($location); if ($location !== null) { // TODO adapt to newer api when ready $vlc->registerArg('source', "\"{$dLocation}\""); } else { X_Debug::e("No source o_O"); return; } // Now, it's time to check for sub parameter $request = $controller->getRequest(); $sub = $request->getParam($this->getId() . ':sub', false); if ($sub !== false) { $sub = X_Env::decode($sub); /* @var $helper X_VlcShares_Plugins_Helper_Youtube */ $helper = $this->helpers('youtube'); list(, , , $videoId) = explode('/', $location); $sub = $helper->getSubtitleNOAPI($videoId, $sub); $urlHelper = $controller->getHelper('url'); $subFile = X_Env::completeUrl($urlHelper->url($sub['srt_url'], 'default', true)); $vlc->registerArg('subtitles', "--sub-file=\"{$subFile}\""); } }
public function gen_afterPageBuild(X_Page_ItemList_PItem $list, Zend_Controller_Action $controller) { // force Rendering win over everythings /*if ( !$this->_forceRendering ) { if ( !((bool) $this->config('forced.enabled', false)) && !$this->helpers()->devices()->isWiimc() ) return; } */ // new renderer interface if (!$this->isDefaultRenderer()) { return; } X_Debug::i("Plugin triggered"); $request = $controller->getRequest(); $enhanced = $this->helpers()->devices()->isWiimcEnhanced() && $this->config('support.enhanced', true); $plx = new X_Plx(X_Env::_('p_wiimcplxrenderer_plxtitle_' . $request->getControllerName() . '_' . $request->getActionName()), X_Env::_('p_wiimcplxrenderer_plxdescription_' . $request->getControllerName() . '_' . $request->getActionName())); // wiimc plus custom tags if ($enhanced) { $plx->setWiimcplus_generator_name('vlc-shares'); // uses the __call api $plx->setWiimcplus_generator_version(X_VlcShares::VERSION_CLEAN); // uses the __call api if ($request->getControllerName() == 'index' && $request->getActionName() == 'collections') { $plx->setWiimcplus_assert_mainmenu('true'); // uses the __call api } // show the current time as custom playlist header tag if the page is controls/control or browse/stream if ($request->getControllerName() == 'controls' && $request->getActionName() == 'control' || $request->getControllerName() == 'browse' && $request->getActionName() == 'stream') { $vlc = X_Vlc::getLastInstance(); if ($vlc) { // check to be sure that vlc is running right now $currentTime = X_Env::formatTime($vlc->getCurrentTime()); $totalTime = X_Env::formatTime($vlc->getTotalTime()); $plx->setWiimcplus_current_time("{$currentTime}/{$totalTime}"); // uses the __call api } } elseif ($request->getControllerName() == 'browse' && $request->getActionName() == 'selection') { $plx->setWiimcplus_assert_nohistory('true'); // uses the __call api } } foreach ($list->getItems() as $i => $item) { /* @var $item X_Page_Item_PItem */ $plxItemName = ($item->isHighlight() ? '-) ' : '') . $item->getLabel(); $plxItemWiimcplusIcon = null; switch ($item->getType()) { case X_Page_Item_PItem::TYPE_CONTAINER: $plxItemType = X_Plx_Item::TYPE_PLAYLIST; $plxItemWiimcplusIcon = 'folder'; break; case X_Page_Item_PItem::TYPE_ELEMENT: $plxItemType = X_Plx_Item::TYPE_PLAYLIST; if ($request->getControllerName() == 'browse' && $request->getActionName() == 'share') { $plxItemWiimcplusIcon = 'file'; } break; case X_Page_Item_PItem::TYPE_REQUEST: $plxItemType = X_Plx_Item::TYPE_SEARCH; break; case X_Page_Item_PItem::TYPE_PLAYABLE: $plxItemType = X_Plx_Item::TYPE_VIDEO; break; default: $plxItemType = $item->getType(); } /* @var $urlHelper Zend_Controller_Action_Helper_Url */ $urlHelper = $controller->getHelper('url'); $plxItemUrl = $item->isUrl() ? $item->getLink() : X_Env::completeUrl($urlHelper->url($item->getLink(), $item->getRoute(), $item->isReset())); $plxItem = new X_Plx_Item($plxItemName, $plxItemUrl, $plxItemType); if ($item->getThumbnail() != null) { if (X_Env::startWith($item->getThumbnail(), 'http') || X_Env::startWith($item->getThumbnail(), 'https')) { $plxItem->setThumb($item->getThumbnail()); } else { $plxItem->setThumb(X_Env::completeUrl($item->getThumbnail())); } } if ($enhanced) { if ($plxItemWiimcplusIcon !== null) { $plxItem->setWiimcplus_icon($plxItemWiimcplusIcon); } if ($item->getKey() == 'core-separator') { $plxItem->setWiimcplus_assert_separator('true'); } if ($item->getKey() == 'core-directwatch') { $plxItem->setWiimcplus_assert_directwatch('true'); if ($item->getCustom('subtitle') != null) { $plxItem->setWiimcplus_subtitle($item->getCustom('subtitle')); } } if ($item->getKey() == 'core-play') { $plxItem->setWiimcplus_assert_startvlc('true'); } } $plx->addItem($plxItem); } $this->_render($plx, $controller); }
/** * Get download queue status * @param unknown_type $provider * @param unknown_type $location * @param Zend_Controller_Action $controller * @return X_Page_ItemList_PItem */ public function getShareItems($provider, $location, Zend_Controller_Action $controller) { // this plugin add items only if it is the provider if ($provider != $this->getId()) { return; } X_Debug::i("Plugin triggered"); // disabling cache plugin try { $cachePlugin = X_VlcShares_Plugins::broker()->getPlugins('cache'); if (method_exists($cachePlugin, 'setDoNotCache')) { $cachePlugin->setDoNotCache(); } } catch (Exception $e) { // cache plugin not registered, no problem } // unregister sort plugin, it's useless now X_VlcShares_Plugins::broker()->unregisterPluginClass('X_VlcShares_Plugins_SortItems'); /* @var $jdHelper X_VlcShares_Plugins_Helper_JDownloader */ $jdHelper = $this->helpers('jdownloader'); /* @var $url Zend_View_Helper_Url */ $urlHelper = $controller->getHelper('url'); $packages = $jdHelper->getDownloads(); X_Debug::i("Packages found: " . count($packages)); $list = new X_Page_ItemList_PItem(); foreach ($packages as $package) { /* @var $package Application_Model_JDownloaderPackage */ if ($this->helpers()->devices()->isWiimc()) { $packageLabel = X_Env::_('p_jdownloader_share_packageentry_nohtml', $package->getName(), $package->getSize(), $package->getFilesCount(), $package->getETA(), $package->getPercent(), X_Env::_('p_jdownloader_downloadstate_' . ($package->isDownloading() ? '1' : '0'))); $packageDesc = X_Env::_('p_jdownloader_share_packageentry_desc_nohtml', $package->getSize(), $package->getFilesCount(), $package->getETA(), $package->getPercent(), X_Env::_('p_jdownloader_downloadstate_' . ($package->isDownloading() ? '1' : '0'))); } else { $packageLabel = X_Env::_('p_jdownloader_share_packageentry_html', $package->getName()); $packageDesc = X_Env::_('p_jdownloader_share_packageentry_desc_html', $package->getSize(), $package->getFilesCount(), $package->getETA(), $package->getPercent(), X_Env::_('p_jdownloader_downloadstate_' . ($package->isDownloading() ? '1' : '0'))); } $link = new X_Page_Item_PItem($this->getId() . '-package', $packageLabel); $link->setIcon('/images/icons/folder.png')->setDescription($packageDesc)->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink(X_Env::completeUrl($urlHelper->url())); $list->append($link); X_Debug::i("{$package->getFilesCount()} files in package {$package->getName()}"); foreach ($package->getFiles() as $file) { /* @var $file Application_Model_JDownloaderFile */ if ($this->helpers()->devices()->isWiimc()) { $fileLabel = X_Env::_('p_jdownloader_share_fileentry_nohtml', $file->getName(), $file->getHoster(), $file->getPercent(), X_Env::_('p_jdownloader_downloadstate_' . ($file->isDownloading() ? '1' : '0'))); $fileDesc = X_Env::_('p_jdownloader_share_fileentry_desc_nohtml', $file->getHoster(), $file->getPercent(), X_Env::_('p_jdownloader_downloadstate_' . ($file->isDownloading() ? '1' : '0'))); } else { $fileLabel = X_Env::_('p_jdownloader_share_fileentry_html', $file->getName()); $fileDesc = X_Env::_('p_jdownloader_share_fileentry_desc_html', $file->getHoster(), $file->getPercent(), X_Env::_('p_jdownloader_downloadstate_' . ($file->isDownloading() ? '1' : '0'))); } $link = new X_Page_Item_PItem($this->getId() . '-file', $fileLabel); $link->setDescription($fileDesc)->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink(X_Env::completeUrl($urlHelper->url())); $list->append($link); } } return $list; }