public function run()
 {
     $fileManager = $this->managers->getManagerOf('file');
     $configManager = $this->managers->getManagerOf('config');
     if (!$this->httpRequest->getExists('type')) {
         $this->httpResponse()->addHeader('HTTP/1.0 400 Bad Request');
         throw new \RuntimeException('No manifest specified');
     }
     $manifestType = $this->httpRequest->getData('type');
     if (!isset($this->manifestsPaths[$manifestType])) {
         $this->httpResponse()->addHeader('HTTP/1.0 404 Not Found');
         throw new \RuntimeException('Invalid manifest type');
     }
     $manifestPath = $this->manifestsPaths[$manifestType];
     $manifestFile = $configManager->open($manifestPath);
     $manifest = $manifestFile->read();
     if ($manifestType == 'firefox') {
         if (isset($_SERVER['SERVER_NAME'])) {
             $manifest['name'] .= ' ยท ' . $_SERVER['SERVER_NAME'];
         }
         //$manifest['version'] = $fileManager->read(self::WEBOS_VERSION_FILE);
         if (isset($_SERVER['REQUEST_URI'])) {
             $manifest['launch_path'] = preg_replace('#\\/webos\\.webapp$#', '', $_SERVER['REQUEST_URI']);
         }
     }
     $manifestStr = json_encode($manifest);
     $this->httpResponse->setCacheable();
     $this->httpResponse->addHeader('Content-Type: ' . $fileManager->mimetype($manifestPath));
     $this->httpResponse->addHeader('Content-Length: ' . strlen($manifestStr));
     $resp = new RawResponse();
     $resp->setValue($manifestStr);
     $this->httpResponse->setContent($resp);
 }
 public function run()
 {
     //TODO: Language detection
     /*$conf = new Config($this);
     		if ($this->managers()->get('File')->exists('~/.config/locale.xml')) {
     			$conf->load('~/.config/locale.xml');
     		}
     		if ($conf->exist('language')) {
     			$this->managers()->get('Translation')->setLanguage($conf->get('language'));
     		} else {
     			$lang = $this->managers()->get('Translation')->detectLanguage();
     			if ($this->user->isConnected()) {
     				$conf->set('language', $lang);
     				$conf->save('~/.config/locale.xml');
     			}
     		}*/
     $jsIncludes = $this->_getIncludes();
     $t = new TranslationDictionary();
     ob_start();
     //Include layout (basic HTML structure)
     require 'boot/includes/layout.php';
     $out = ob_get_contents();
     ob_end_clean();
     $resp = new RawResponse();
     $resp->setValue($out);
     $this->httpResponse->addHeader('Content-Type: text/html');
     $this->httpResponse->setContent($resp);
 }