public function gen_afterPageBuild(X_Page_ItemList_PItem $list, Zend_Controller_Action $controller) { if (!$this->isDefaultRenderer()) { return; } X_Debug::i("Plugin triggered"); $request = $controller->getRequest(); $responseType = 'u:BrowseResponse'; $num = count($list->getItems()); if ($this->request['browseflag'] == 'BrowseMetadata') { $parentID = $this->_getParent($controller->getRequest()); $item = new X_Page_Item_PItem('fake-item', "Container"); $item->setLink(array_merge(array('controller' => $controller->getRequest()->getControllerName(), 'action' => $controller->getRequest()->getActionName()), $controller->getRequest()->getParams())); $item->setDescription("Fake description"); $didl = X_Upnp::createMetaDIDL($item, $parentID, $num, $controller->getRequest()->getControllerName(), $controller->getRequest()->getActionName(), $controller->getRequest()->getParam('p', 'null')); } elseif ($this->request['browseflag'] == 'BrowseDirectChildren') { $parentID = $this->request['objectid']; $didl = X_Upnp::createDIDL($list->getItems(), $parentID, $num, $controller->getRequest()->getControllerName(), $controller->getRequest()->getActionName(), $controller->getRequest()->getParam('p', 'null')); } $xmlDIDL = $didl->saveXML(); X_Debug::i("DIDL response: {$xmlDIDL}"); // Build SOAP-XML reply from DIDL-XML and send it to upnp device $domSOAP = X_Upnp::createSOAPEnvelope($xmlDIDL, $num, $num, $responseType, $parentID); $soapXML = $domSOAP->saveXML(); // turn off viewRenderer and Layout, add Content-Type and set response body $this->_render($soapXML, $controller); }
public function controlAction() { $request = $this->getRequest(); $engineId = X_Streamer::i()->getStreamingEngineId(); $engine = X_VlcShares_Plugins::helpers()->streamer()->get($engineId); $pageItems = new X_Page_ItemList_PItem(); // links on top $pageItems->merge(X_VlcShares_Plugins::broker()->preGetControlItems($engine, $this)); // add separator between play 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(array('controller' => 'controls', 'action' => 'control', 'pid' => null, 'a' => null, 'param' => null), 'default', false); $pageItems->append($separator); // normal links $pageItems->merge(X_VlcShares_Plugins::broker()->getControlItems($engine, $this)); // bottom links $pageItems->merge(X_VlcShares_Plugins::broker()->postGetControlItems($engine, $this)); // filter out items (parental-control / hidden file / system dir / custom controls) foreach ($pageItems->getItems() as $key => $item) { $results = X_VlcShares_Plugins::broker()->filterControlItems($item, $engine, $this); if ($results != null && in_array(false, $results)) { $pageItems->remove($item); } } // trigger for page creation X_VlcShares_Plugins::broker()->gen_afterPageBuild($pageItems, $this); }
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); } } }
protected function dispatchRequest(Zend_Controller_Request_Http $request, X_Page_ItemList_PItem $items, Zend_Controller_Action $controller) { /* @var $view Zend_Controller_Action_Helper_ViewRenderer */ $view = $controller->getHelper('viewRenderer'); /* @var $layout Zend_Layout_Controller_Action_Helper_Layout */ $layout = $controller->getHelper('layout'); try { $view->setNoRender(true); $layout->disableLayout(); } catch (Exception $e) { X_Debug::e("Layout or View not enabled: " . $e->getMessage()); } $result = array(); $actionName = $request->getActionName(); $controllerName = $request->getControllerName(); $result['controller'] = $controllerName; $result['action'] = $actionName; $result['success'] = true; $result['items'] = array(); /* @var $urlHelper Zend_Controller_Action_Helper_Url */ $urlHelper = $controller->getHelper('url'); $skipMethod = array('getCustom', 'getLinkParam', 'getLinkAction', 'getLinkController'); foreach ($items->getItems() as $itemId => $item) { /* @var $item X_Page_Item_PItem */ $aItem = array(); $methods = get_class_methods(get_class($item)); foreach ($methods as $method) { if (array_search($method, $skipMethod) !== false) { continue; } if ($method == "getIcon") { $aItem['icon'] = $request->getBaseUrl() . $item->getIcon(); } elseif (X_Env::startWith($method, 'get')) { $aItem[lcfirst(substr($method, 3))] = $item->{$method}(); } elseif (X_Env::startWith($method, 'is')) { $aItem[lcfirst(substr($method, 2))] = $item->{$method}(); } } $result['items'][] = $aItem; } /* @var $jsonHelper Zend_Controller_Action_Helper_Json */ $jsonHelper = $controller->getHelper('Json'); $jsonHelper->direct($result, true, false); }
/** * Return the -shared-folders- link * for the collection index * @param Zend_Controller_Action $controller * @return X_Page_ItemList_PItem */ public function preGetCollectionsItems(Zend_Controller_Action $controller) { X_Debug::i("Plugin triggered"); $updates = $this->checkUpdates(); /* @var $urlHelper Zend_Controller_Action_Helper_Url */ $urlHelper = $controller->getHelper('url'); $list = new X_Page_ItemList_PItem(); if ($updates['core'] !== false) { $link = new X_Page_Item_PItem("{$this->getId()}-coreupdate", X_Env::_('p_updatenotifier_collectionindex_core')); $link->setIcon('/images/updatenotifier/logo.png')->setDescription(X_Env::_('p_updatenotifier_collectionindex_core_desc'))->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink($urlHelper->url()); $list->append($link); } if (count($updates['plugins'])) { $link = new X_Page_Item_PItem("{$this->getId()}-pluginsupdate", X_Env::_('p_updatenotifier_collectionindex_plugins', count($updates['plugins']))); $link->setIcon('/images/updatenotifier/logo.png')->setDescription(X_Env::_('p_updatenotifier_collectionindex_plugins_desc'))->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink($urlHelper->url()); $list->append($link); } return count($list->getItems()) ? $list : null; }
public function collectionsAction() { $pageItems = new X_Page_ItemList_PItem(); // links on top $pageItems->merge(X_VlcShares_Plugins::broker()->preGetCollectionsItems($this)); // normal links $pageItems->merge(X_VlcShares_Plugins::broker()->getCollectionsItems($this)); // bottom links $pageItems->merge(X_VlcShares_Plugins::broker()->postGetCollectionsItems($this)); // filter out items (parental-control / hidden file / system dir) foreach ($pageItems->getItems() as $key => $item) { $results = X_VlcShares_Plugins::broker()->filterCollectionsItems($item, $this); if ($results != null && in_array(false, $results)) { //unset($pageItems[$key]); $pageItems->remove($item); } } // trigger for page creation X_VlcShares_Plugins::broker()->gen_afterPageBuild($pageItems, $this); }
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); }
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); }