From e377ec3194eb97b6cc2c5c15b14d4b2ca05246ee Mon Sep 17 00:00:00 2001 From: Nicolas Gotchac Date: Mon, 19 Dec 2016 14:39:10 +0100 Subject: [PATCH] Working ServiceWorker --- js/src/redux/providers/compilerActions.js | 26 ++++----------- js/src/serviceWorker.js | 13 +++++--- .../views/WriteContract/writeContractStore.js | 32 ++++++++++++------- js/webpack/app.js | 2 +- 4 files changed, 36 insertions(+), 37 deletions(-) diff --git a/js/src/redux/providers/compilerActions.js b/js/src/redux/providers/compilerActions.js index b679830d2..9c4eb9535 100644 --- a/js/src/redux/providers/compilerActions.js +++ b/js/src/redux/providers/compilerActions.js @@ -25,29 +25,15 @@ if ('serviceWorker' in navigator) { .register() .then(() => { console.log('registering service worker'); - - if (navigator.serviceWorker.controller) { - // already active and controlling this page - return navigator.serviceWorker; - } - // wait for a new service worker to control this page - return new Promise((resolve, reject) => { - try { - const onControllerChange = () => { - navigator.serviceWorker.removeEventListener('controllerchange', onControllerChange); - resolve(navigator.serviceWorker); - }; - - navigator.serviceWorker.addEventListener('controllerchange', onControllerChange); - } catch (error) { - reject(error); - } - }); + return navigator.serviceWorker.ready; }) - .then((_worker) => { + .then((registration) => { + console.log('registered service worker'); + + const _worker = registration.active; + _worker.controller = registration.active; const worker = new PromiseWorker(_worker); - console.log('registered service worker'); return worker; }); } else { diff --git a/js/src/serviceWorker.js b/js/src/serviceWorker.js index c90583613..a7052ad84 100644 --- a/js/src/serviceWorker.js +++ b/js/src/serviceWorker.js @@ -25,10 +25,12 @@ registerPromiseWorker((msg) => { }); self.addEventListener('install', (event) => { + console.warn('installing sw'); event.waitUntil(self.skipWaiting()); }); self.addEventListener('activate', (event) => { + console.warn('activating sw'); event.waitUntil(self.clients.claim()); }); @@ -141,18 +143,19 @@ function fetchSolc (build) { return fetch(URL) .then((response) => { - if (!response || response.status !== 200 || response.type !== 'basic') { + if (!response || response.status !== 200) { return response; } const responseToCache = response.clone(); - caches.open(CACHE_NAME) + return caches.open(CACHE_NAME) .then((cache) => { - cache.put(URL, responseToCache); + return cache.put(URL, responseToCache); + }) + .then(() => { + return response; }); - - return response; }); }); } diff --git a/js/src/views/WriteContract/writeContractStore.js b/js/src/views/WriteContract/writeContractStore.js index 9f81a63e5..96d9c4d07 100644 --- a/js/src/views/WriteContract/writeContractStore.js +++ b/js/src/views/WriteContract/writeContractStore.js @@ -74,6 +74,7 @@ export default class WriteContractStore { @observable workerError = null; + loadingSolidity = false; lastCompilation = {}; snippets = SNIPPETS; worker = null; @@ -147,7 +148,11 @@ export default class WriteContractStore { return; } - return this.worker + if (this.loadingSolidity) { + return this.loadingSolidity; + } + + this.loadingSolidity = this.worker .postMessage({ action: 'load', data: build @@ -161,8 +166,11 @@ export default class WriteContractStore { this.setWorkerError(error); }) .then(() => { + this.loadingSolidity = false; this.loading = false; }); + + return this.loadingSolidity; } @action handleOpenDeployModal = () => { @@ -243,18 +251,20 @@ export default class WriteContractStore { }); } - return promise.then((data = {}) => { - const { - contract, contractIndex, - annotations, contracts, errors - } = data.result; + return promise.then((data = null) => { + if (data) { + const { + contract, contractIndex, + annotations, contracts, errors + } = data.result; - this.contract = contract; - this.contractIndex = contractIndex; + this.contract = contract; + this.contractIndex = contractIndex; - this.annotations = annotations; - this.contracts = contracts; - this.errors = errors; + this.annotations = annotations; + this.contracts = contracts; + this.errors = errors; + } this.compiled = true; this.compiling = false; diff --git a/js/webpack/app.js b/js/webpack/app.js index a2ff20ced..df801533c 100644 --- a/js/webpack/app.js +++ b/js/webpack/app.js @@ -166,7 +166,7 @@ module.exports = { }), new ServiceWorkerWebpackPlugin({ - entry: path.join(__dirname, '../src/serviceWorker.js'), + entry: path.join(__dirname, '../src/serviceWorker.js') }), DappsHTMLInjection