From eadadac24a1a5d2ea3d2426b3bb0b2af12f9982d Mon Sep 17 00:00:00 2001 From: Christoph Wurst Date: Tue, 26 Apr 2016 20:46:10 +0200 Subject: invalidate js cache if app version changes --- js/app.js | 2 ++ js/cache.js | 19 ++++++++++++++++++- lib/controller/pagecontroller.php | 27 +++++++++++++++++++++------ templates/index.php | 7 +++---- tests/controller/pagecontrollertest.php | 24 ++++++++++++++++++------ 5 files changed, 62 insertions(+), 17 deletions(-) diff --git a/js/app.js b/js/app.js index f1fd05f50..6987b1cdd 100644 --- a/js/app.js +++ b/js/app.js @@ -28,6 +28,7 @@ define(function(require) { var Marionette = require('marionette'); var OC = require('OC'); var AppView = require('views/app'); + var Cache = require('cache'); var Radio = require('radio'); var Router = require('router'); var AccountController = require('controller/accountcontroller'); @@ -76,6 +77,7 @@ define(function(require) { Mail.on('start', function() { this.view = new AppView(); + Cache.init(); Radio.ui.trigger('content:loading'); diff --git a/js/cache.js b/js/cache.js index 44a6fdb75..4f8994a59 100644 --- a/js/cache.js +++ b/js/cache.js @@ -5,7 +5,7 @@ * later. See the COPYING file. * * @author Christoph Wurst - * @copyright Christoph Wurst 2015 + * @copyright Christoph Wurst 2015, 2016 */ define(function(require) { @@ -61,6 +61,22 @@ define(function(require) { } }; + function init() { + console.log('initializing cacheā€¦'); + var installedVersion = $('#config-installed-version').val(); + if (storage.isSet('mail-app-version')) { + var cachedVersion = storage.get('mail-app-version'); + if (cachedVersion !== installedVersion) { + console.log('clearing cache because app version has changed'); + storage.removeAll(); + } + } else { + // Could be an old version -> clear data + storage.removeAll(); + } + storage.set('mail-app-version', installedVersion); + } + /** * @param {AccountsCollection} accounts * @returns {undefined} @@ -221,6 +237,7 @@ define(function(require) { } return { + init: init, cleanUp: cleanUp, getMessage: getMessage, addMessage: addMessage, diff --git a/lib/controller/pagecontroller.php b/lib/controller/pagecontroller.php index ca0d5631c..0b5067184 100644 --- a/lib/controller/pagecontroller.php +++ b/lib/controller/pagecontroller.php @@ -24,17 +24,19 @@ namespace OCA\Mail\Controller; +use OCA\Mail\Db\MailAccountMapper; use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\ContentSecurityPolicy; use OCP\AppFramework\Http\RedirectResponse; use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; use OCP\IRequest; use OCP\IURLGenerator; -use OCA\Mail\Db\MailAccountMapper; class PageController extends Controller { /** - * @var \OCA\Mail\Db\MailAccountMapper + * @var MailAccountMapper */ private $mailAccountMapper; @@ -43,6 +45,11 @@ class PageController extends Controller { */ private $urlGenerator; + /** + * @var IConfig + */ + private $config; + /** * @var string */ @@ -50,14 +57,16 @@ class PageController extends Controller { /** * @param string $appName - * @param \OCP\IRequest $request + * @param IRequest $request * @param $mailAccountMapper + * @param IConfig $config * @param $UserId */ - public function __construct($appName, IRequest $request, MailAccountMapper $mailAccountMapper, IURLGenerator $urlGenerator, $UserId) { + public function __construct($appName, IRequest $request, MailAccountMapper $mailAccountMapper, IURLGenerator $urlGenerator, IConfig $config, $UserId) { parent::__construct($appName, $request); $this->mailAccountMapper = $mailAccountMapper; $this->urlGenerator = $urlGenerator; + $this->config = $config; $this->currentUserId = $UserId; } @@ -68,10 +77,16 @@ class PageController extends Controller { * @return TemplateResponse renders the index page */ public function index() { - $response = new TemplateResponse($this->appName, 'index', []); + // TODO: remove DEBUG constant check once minimum oc + // core version >= 8.2, see https://github.com/owncloud/core/pull/18510 + $response = new TemplateResponse($this->appName, 'index', [ + 'debug' => (defined('DEBUG') && DEBUG) || $this->config->getSystemValue('debug', false), + 'app-version' => $this->config->getAppValue('mail', 'installed_version'), + ]); + // set csp rules for ownCloud 8.1 if (class_exists('OCP\AppFramework\Http\ContentSecurityPolicy')) { - $csp = new \OCP\AppFramework\Http\ContentSecurityPolicy(); + $csp = new ContentSecurityPolicy(); $csp->addAllowedFrameDomain('\'self\''); $response->setContentSecurityPolicy($csp); } diff --git a/templates/index.php b/templates/index.php index 9d82ac7bf..8fdf4b4de 100644 --- a/templates/index.php +++ b/templates/index.php @@ -23,9 +23,6 @@ * along with this program. If not, see * */ -// TODO: remove DEBUG constant check once minimum oc -// core version >= 8.2, see https://github.com/owncloud/core/pull/18510 -$debug = (defined('DEBUG') && DEBUG) || \OC::$server->getConfig()->getSystemValue('debug', false); style('mail', 'mail'); style('mail', 'mobile'); @@ -34,7 +31,7 @@ script('mail', 'vendor/jquery-storage-api/jquery.storageapi'); script('mail', 'vendor/jquery-visibility/jquery-visibility'); script('mail', 'vendor/requirejs/require'); script('mail', 'searchproxy'); -if ($debug) { +if ($_['debug']) { // Load JS dependencies asynchronously as specified in require_config.js script('mail', 'require_config'); } else { @@ -43,6 +40,8 @@ if ($debug) { } ?> + +
* @@ -29,6 +30,7 @@ class PageControllerTest extends TestCase { private $userId; private $mailAccountMapper; private $urlGenerator; + private $config; private $controller; protected function setUp() { @@ -36,19 +38,29 @@ class PageControllerTest extends TestCase { $this->appName = 'mail'; $this->userId = 'george'; - $this->request = $this->getMockBuilder('\OCP\IRequest') - ->disableOriginalConstructor() - ->getMock(); + $this->request = $this->getMock('\OCP\IRequest'); $this->mailAccountMapper = $this->getMockBuilder('OCA\Mail\Db\MailAccountMapper') ->disableOriginalConstructor() ->getMock(); $this->urlGenerator = $this->getMock('OCP\IURLGenerator'); - $this->controller = new PageController($this->appName, $this->request, - $this->mailAccountMapper, $this->urlGenerator, $this->userId); + $this->config = $this->getMock('OCP\IConfig'); + $this->controller = new PageController($this->appName, $this->request, $this->mailAccountMapper, $this->urlGenerator, $this->config, $this->userId); } public function testIndex() { - $expected = new TemplateResponse($this->appName, 'index', []); + $this->config->expects($this->once()) + ->method('getSystemValue') + ->with('debug', false) + ->will($this->returnValue(true)); + $this->config->expects($this->once()) + ->method('getAppValue') + ->with('mail', 'installed_version') + ->will($this->returnValue('1.2.3')); + + $expected = new TemplateResponse($this->appName, 'index', [ + 'debug' => true, + 'app-version' => '1.2.3' + ]); // set csp rules for ownCloud 8.1 if (class_exists('OCP\AppFramework\Http\ContentSecurityPolicy')) { $csp = new \OCP\AppFramework\Http\ContentSecurityPolicy(); -- cgit v1.2.3 From 50d425e7a4b0aaa3aba255907f6a50a0aeab5182 Mon Sep 17 00:00:00 2001 From: Christoph Wurst Date: Tue, 3 May 2016 21:25:23 +0200 Subject: downgrade jquery storage API --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 42a771a71..8e81edf0d 100644 --- a/bower.json +++ b/bower.json @@ -21,7 +21,7 @@ "domReady": "^2.0.1", "handlebars": "^4.0.5", "jquery": "2.2.3", - "jquery-storage-api": "jQuery-Storage-API#^1.8.1", + "jquery-storage-api": "julien-maurel/jQuery-Storage-API#~1.7.4", "jquery-visibility": "~1.0.11", "requirejs": "2.2.0", "text": "^2.0.14", -- cgit v1.2.3