From 77902e8d8018e0730c02d45ba2b9972ff120b83d Mon Sep 17 00:00:00 2001 From: tamaina Date: Wed, 10 Feb 2021 02:03:05 +0900 Subject: [PATCH] wip --- src/client/sw/lang.ts | 49 +++++++++++++++++------------------ src/client/sw/notification.ts | 7 +++-- src/client/sw/sw.ts | 2 +- 3 files changed, 28 insertions(+), 30 deletions(-) diff --git a/src/client/sw/lang.ts b/src/client/sw/lang.ts index 06a16729d9..21ea53e781 100644 --- a/src/client/sw/lang.ts +++ b/src/client/sw/lang.ts @@ -1,44 +1,43 @@ /* * Language manager for SW */ - declare var self: ServiceWorkerGlobalScope; import { get, set } from 'idb-keyval'; import { I18n } from '@/scripts/i18n'; class SwLang { - public cacheName = `mk-cache-${_VERSION_}`; + public cacheName = `mk-cache-${_VERSION_}`; - public lang: Promise = get('lang').then(async prelang => { - if (!prelang) return 'en-US'; - return prelang; - }); + public lang: Promise = get('lang').then(async prelang => { + if (!prelang) return 'en-US'; + return prelang; + }); - public i18n: I18n | null = null; + public i18n: I18n | null = null; - public setLang(newLang: string) { - this.i18n = null; - this.lang = Promise.resolve(newLang); + public setLang(newLang: string) { + this.i18n = null; + this.lang = Promise.resolve(newLang); set('lang', newLang); return this.fetchLocale(); - } + } - public async fetchLocale() { - // Service Workerは何度も起動しそのたびにlocaleを読み込むので、CacheStorageを使う - const localeUrl = `/assets/locales/${await this.lang}.${_VERSION_}.json`; - let localeRes = await caches.match(localeUrl); - - if (!localeRes) { - localeRes = await fetch(localeUrl); - const clone = localeRes?.clone(); - if (!clone?.clone().ok) return; - - caches.open(this.cacheName).then(cache => cache.put(localeUrl, clone)); - } + public async fetchLocale() { + // Service Workerは何度も起動しそのたびにlocaleを読み込むので、CacheStorageを使う + const localeUrl = `/assets/locales/${await this.lang}.${_VERSION_}.json`; + let localeRes = await caches.match(localeUrl); - return this.i18n = new I18n(await localeRes.json()); - } + if (!localeRes) { + localeRes = await fetch(localeUrl); + const clone = localeRes?.clone(); + if (!clone?.clone().ok) return; + + caches.open(this.cacheName).then(cache => cache.put(localeUrl, clone)); + } + + return this.i18n = new I18n(await localeRes.json()); + } } export const swLang = new SwLang(); diff --git a/src/client/sw/notification.ts b/src/client/sw/notification.ts index 3680554efe..23acc461ae 100644 --- a/src/client/sw/notification.ts +++ b/src/client/sw/notification.ts @@ -1,12 +1,11 @@ /* * Notification manager for SW */ - declare var self: ServiceWorkerGlobalScope; import { getNoteSummary } from '../../misc/get-note-summary'; import getUserName from '../../misc/get-user-name'; -import { swLang } from '@/sw/lang' +import { swLang } from '@/sw/lang'; class SwNotification { private queue: any[] = []; @@ -22,11 +21,11 @@ class SwNotification { if (this.fetching == false) { this.fetching = true; await swLang.fetchLocale(); - this.fetching = false; const promises = this.queue.map(this.composeNotification).map(n => { if (!n) return; return self.registration.showNotification(...n); - }) + }); + this.fetching = false; this.queue = []; return Promise.all(promises); } diff --git a/src/client/sw/sw.ts b/src/client/sw/sw.ts index 0569b87ce6..5f9028ec3e 100644 --- a/src/client/sw/sw.ts +++ b/src/client/sw/sw.ts @@ -134,7 +134,7 @@ self.addEventListener('notificationclose', async ev => { //#region When: Caught a message from the client self.addEventListener('message', ev => { - switch(ev.data) { + switch (ev.data) { case 'clear': return; // TODO default: