summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/Controller/CssController.php32
-rw-r--r--core/Controller/JsController.php32
-rw-r--r--lib/private/Template/JSCombiner.php7
-rw-r--r--lib/private/Template/SCSSCacher.php11
4 files changed, 77 insertions, 5 deletions
diff --git a/core/Controller/CssController.php b/core/Controller/CssController.php
index 1206c95a5b8..b467d386f98 100644
--- a/core/Controller/CssController.php
+++ b/core/Controller/CssController.php
@@ -28,6 +28,8 @@ use OCP\AppFramework\Http\FileDisplayResponse;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Files\IAppData;
use OCP\Files\NotFoundException;
+use OCP\Files\SimpleFS\ISimpleFile;
+use OCP\Files\SimpleFS\ISimpleFolder;
use OCP\IRequest;
class CssController extends Controller {
@@ -62,12 +64,16 @@ class CssController extends Controller {
public function getCss($fileName, $appName) {
try {
$folder = $this->appData->getFolder($appName);
- $cssFile = $folder->getFile($fileName);
+ $gzip = false;
+ $file = $this->getFile($folder, $fileName, $gzip);
} catch(NotFoundException $e) {
return new NotFoundResponse();
}
- $response = new FileDisplayResponse($cssFile, Http::STATUS_OK, ['Content-Type' => 'text/css']);
+ $response = new FileDisplayResponse($file, Http::STATUS_OK, ['Content-Type' => 'text/css']);
+ if ($gzip) {
+ $response->addHeader('Content-Encoding', 'gzip');
+ }
$response->cacheFor(86400);
$expires = new \DateTime();
$expires->setTimestamp($this->timeFactory->getTime());
@@ -76,4 +82,26 @@ class CssController extends Controller {
$response->addHeader('Pragma', 'cache');
return $response;
}
+
+ /**
+ * @param ISimpleFolder $folder
+ * @param string $fileName
+ * @param bool $gzip is set to true if we use the gzip file
+ * @return ISimpleFile
+ */
+ private function getFile(ISimpleFolder $folder, $fileName, &$gzip) {
+ $encoding = $this->request->getHeader('Accept-Encoding');
+
+ if ($encoding !== null && strpos($encoding, 'gzip') !== false) {
+ try {
+ $gzip = true;
+ return $folder->getFile($fileName . '.gz');
+ } catch (NotFoundException $e) {
+ // continue
+ }
+ }
+
+ $gzip = false;
+ return $folder->getFile($fileName);
+ }
}
diff --git a/core/Controller/JsController.php b/core/Controller/JsController.php
index 0770974e7a1..0b50abc158a 100644
--- a/core/Controller/JsController.php
+++ b/core/Controller/JsController.php
@@ -29,6 +29,8 @@ use OCP\AppFramework\Http\FileDisplayResponse;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Files\IAppData;
use OCP\Files\NotFoundException;
+use OCP\Files\SimpleFS\ISimpleFile;
+use OCP\Files\SimpleFS\ISimpleFolder;
use OCP\IRequest;
class JsController extends Controller {
@@ -63,12 +65,16 @@ class JsController extends Controller {
public function getJs($fileName, $appName) {
try {
$folder = $this->appData->getFolder($appName);
- $jsFile = $folder->getFile($fileName);
+ $gzip = false;
+ $file = $this->getFile($folder, $fileName, $gzip);
} catch(NotFoundException $e) {
return new NotFoundResponse();
}
- $response = new FileDisplayResponse($jsFile, Http::STATUS_OK, ['Content-Type' => 'application/javascript']);
+ $response = new FileDisplayResponse($file, Http::STATUS_OK, ['Content-Type' => 'application/javascript']);
+ if ($gzip) {
+ $response->addHeader('Content-Encoding', 'gzip');
+ }
$response->cacheFor(86400);
$expires = new \DateTime();
$expires->setTimestamp($this->timeFactory->getTime());
@@ -77,4 +83,26 @@ class JsController extends Controller {
$response->addHeader('Pragma', 'cache');
return $response;
}
+
+ /**
+ * @param ISimpleFolder $folder
+ * @param string $fileName
+ * @param bool $gzip is set to true if we use the gzip file
+ * @return ISimpleFile
+ */
+ private function getFile(ISimpleFolder $folder, $fileName, &$gzip) {
+ $encoding = $this->request->getHeader('Accept-Encoding');
+
+ if ($encoding !== null && strpos($encoding, 'gzip') !== false) {
+ try {
+ $gzip = true;
+ return $folder->getFile($fileName . '.gz');
+ } catch (NotFoundException $e) {
+ // continue
+ }
+ }
+
+ $gzip = false;
+ return $folder->getFile($fileName);
+ }
}
diff --git a/lib/private/Template/JSCombiner.php b/lib/private/Template/JSCombiner.php
index 9f92813f905..0f30fb915f7 100644
--- a/lib/private/Template/JSCombiner.php
+++ b/lib/private/Template/JSCombiner.php
@@ -155,8 +155,15 @@ class JSCombiner {
}
try {
+ $gzipFile = $folder->getFile($fileName . '.gz');
+ } catch (NotFoundException $e) {
+ $gzipFile = $folder->newFile($fileName . '.gz');
+ }
+
+ try {
$cachedfile->putContent($res);
$depFile->putContent(json_encode($deps));
+ $gzipFile->putContent(gzencode($res, 9));
return true;
} catch (NotPermittedException $e) {
return false;
diff --git a/lib/private/Template/SCSSCacher.php b/lib/private/Template/SCSSCacher.php
index c12d8771513..f3c2ec163cc 100644
--- a/lib/private/Template/SCSSCacher.php
+++ b/lib/private/Template/SCSSCacher.php
@@ -186,9 +186,18 @@ class SCSSCacher {
return false;
}
+ // Gzip file
try {
- $cachedfile->putContent($this->rebaseUrls($compiledScss, $webDir));
+ $gzipFile = $folder->getFile($fileNameCSS . '.gz');
+ } catch (NotFoundException $e) {
+ $gzipFile = $folder->newFile($fileNameCSS . '.gz');
+ }
+
+ try {
+ $data = $this->rebaseUrls($compiledScss, $webDir);
+ $cachedfile->putContent($data);
$depFile->putContent(json_encode($scss->getParsedFiles()));
+ $gzipFile->putContent(gzencode($data), 9);
$this->logger->debug($webDir.'/'.$fileNameSCSS.' compiled and successfully cached', ['app' => 'core']);
return true;
} catch(NotPermittedException $e) {