From bc4315da1edc8a729310d74eeec1f7b1d4a5e220 Mon Sep 17 00:00:00 2001 From: tamaina <tamaina@hotmail.co.jp> Date: Sat, 13 Mar 2021 10:55:29 +0900 Subject: [PATCH] Improve flush (#7328) --- src/server/web/views/flush.pug | 63 +++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/src/server/web/views/flush.pug b/src/server/web/views/flush.pug index 59fed1f15d..ec585a34db 100644 --- a/src/server/web/views/flush.pug +++ b/src/server/web/views/flush.pug @@ -4,35 +4,44 @@ html #msg script. const msg = document.getElementById('msg'); + const successText = `\nSuccess Flush! <a href="/">Back to Misskey</a>\næˆåŠŸã—ã¾ã—ãŸã€‚<a href="/">Misskeyã‚’é–‹ãç›´ã—ã¦ãã ã•ã„。</a>`; - try { - localStorage.clear(); - message('localStorage cleared'); - - const delidb = indexedDB.deleteDatabase('MisskeyClient'); - delidb.onsuccess = () => message('indexedDB cleared'); - - if (navigator.serviceWorker.controller) { - navigator.serviceWorker.controller.postMessage('clear'); - navigator.serviceWorker.getRegistrations() - .then(registrations => { - return Promise.all(registrations.map(registration => registration.unregister())); - }) - .then(() => { - message('Success Flush! Please reopen Misskey.\næˆåŠŸã—ã¾ã—ãŸã€‚Misskeyã‚’é–‹ãç›´ã—ã¦ãã ã•ã„。'); - }) - .catch(e => { throw Error(e) }); - } else { - message('Success Flush! Please reopen Misskey.\næˆåŠŸã—ã¾ã—ãŸã€‚Misskeyã‚’é–‹ãç›´ã—ã¦ãã ã•ã„。'); + message('Start flushing.'); + + (async function() { + try { + localStorage.clear(); + message('localStorage cleared.'); + + const idbPromises = ['MisskeyClient', 'keyval-store'].map((name, i, arr) => new Promise((res, rej) => { + const delidb = indexedDB.deleteDatabase(name); + delidb.onsuccess = () => res(message(`indexedDB "${name}" cleared. (${i + 1}/${arr.length})`)); + delidb.onerror = e => rej(e) + })); + + await Promise.all(idbPromises); + + if (navigator.serviceWorker.controller) { + navigator.serviceWorker.controller.postMessage('clear'); + await navigator.serviceWorker.getRegistrations() + .then(registrations => { + return Promise.all(registrations.map(registration => registration.unregister())); + }) + .catch(e => { throw Error(e) }); + } + + message(successText); + } catch (e) { + message(`\n${e}\n\nFlush Failed. <a href="/flush">Please retry.</a>\n失敗ã—ã¾ã—ãŸã€‚<a href="/flush">ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ã¿ã¦ãã ã•ã„。</a>`); + message(`\nIf you retry more than 3 times, clear the browser cache or contact to instance admin.\n3回以上試ã—ã¦ã‚‚失敗ã™ã‚‹å ´åˆã€ãƒ–ラウザã®ã‚ャッシュを消去ã—ã€ãã‚Œã§ã‚‚ã ã‚ãªã‚‰ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ã¿ã¦ãã ã•ã„。\n`) + + console.error(e); + setTimeout(() => { + location = '/'; + }, 10000) } - } catch (e) { - console.error(e); - message(`${e}Â¥nÂ¥nFlush Failed. Please reopen Misskey.\n失敗ã—ã¾ã—ãŸã€‚Misskeyã‚’é–‹ãç›´ã—ã¦ãã ã•ã„。`); - setTimeout(() => { - location = '/'; - }, 10000) - } + })(); function message(text) { - msg.insertAdjacentHTML('beforeend', `<p>[${(new Date()).toString()}] ${text.replace(/Â¥n/g,'<br>')}</p>`) + msg.insertAdjacentHTML('beforeend', `<p>[${(new Date()).toString()}] ${text.replace(/\n/g,'<br>')}</p>`) } -- GitLab