From 1f3507ea9e8bafbf44c8a481b67cd8be79b016d6 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Wed, 19 Jul 2017 08:45:41 +0200 Subject: [PATCH] Fix double request --- scripts/AnimeNotifier.ts | 11 ++++++++--- sw/service-worker.ts | 11 +++++++++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/scripts/AnimeNotifier.ts b/scripts/AnimeNotifier.ts index 19232864..95df5f08 100644 --- a/scripts/AnimeNotifier.ts +++ b/scripts/AnimeNotifier.ts @@ -232,7 +232,7 @@ export class AnimeNotifier { if(message.url.includes("/_/")) { // Content reload this.contentLoadedActions.then(() => { - this.reloadContent() + this.reloadContent(true) }) } else { // Full page reload @@ -318,11 +318,16 @@ export class AnimeNotifier { } } - reloadContent() { + reloadContent(cached?: boolean) { console.log("reload content", "/_" + this.app.currentPath) let headers = new Headers() - headers.append("X-Reload", "true") + + if(!cached) { + headers.append("X-Reload", "true") + } else { + headers.append("X-CacheOnly", "true") + } let path = this.app.currentPath this.lastReloadContentPath = path diff --git a/sw/service-worker.ts b/sw/service-worker.ts index ef88212d..0deb43c2 100644 --- a/sw/service-worker.ts +++ b/sw/service-worker.ts @@ -137,10 +137,17 @@ self.addEventListener("fetch", async (evt: FetchEvent) => { return evt.waitUntil(evt.respondWith(fetch(request))) } + // Forced cache response? + if(request.headers.get("X-CacheOnly") === "true") { + console.log("forced cache response") + return evt.waitUntil(fromCache(request)) + } + let servedETag = undefined // Start fetching the request let refresh = fetch(request).then(response => { + console.log(response) let clone = response.clone() // Save the new version of the resource in the cache @@ -158,11 +165,11 @@ self.addEventListener("fetch", async (evt: FetchEvent) => { // Forced reload if(request.headers.get("X-Reload") === "true") { - return evt.waitUntil(refresh.then(response => { + return evt.waitUntil(evt.respondWith(refresh.then(response => { servedETag = response.headers.get("ETag") ETAGS.set(request.url, servedETag) return response - })) + }))) } // Try to serve cache first and fall back to network response