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); }
/** * Change the url of directplay link to add seeked value * @see X_VlcShares_Plugins_Abstract::filterModeItems() */ public function filterModeItems(X_Page_Item_PItem $item, $provider, Zend_Controller_Action $controller) { if ($item->getKey() == 'core-directwatch' && $item->isUrl()) { $ssValue = $controller->getRequest()->getParam($this->getId(), 0); if ($ssValue > 0) { // need to change the value $link = $item->getLink(); /* @var $hosterHelper X_VlcShares_Plugins_Helper_HosterSSWrapper */ $hosterHelper = $this->helpers()->hoster(); /* @var $hoster X_VlcShares_Plugins_Helper_HostInterface */ $hoster = $hosterHelper->getLastPositiveMatch(); /* @var $ssHelper X_VlcShares_Plugins_Helper_StreamSeeker */ $ssHelper = $this->helpers('streamseeker'); if ($ssHelper->isSeekableHoster($hoster)) { $newLink = $ssHelper->getSeekedUrl($link, $ssValue, $hoster); X_Debug::i("Changing link to {$newLink}"); $item->setLink($newLink); } else { X_Debug::f("A seekable hoster reported as unseekable on last check: " . get_class($hoster)); } } } }