From 172cca6ad6fe73d00686d0355bde264c6340958e Mon Sep 17 00:00:00 2001 From: syuilo <syuilotan@yahoo.co.jp> Date: Mon, 16 Apr 2018 15:59:43 +0900 Subject: [PATCH] Better recovery system --- locales/en.yml | 2 + locales/fr.yml | 2 + locales/ja.yml | 2 + src/client/app/boot.js | 34 ++-- .../connect-failed.troubleshooter.vue | 156 +++++++++--------- src/client/assets/flush.html | 16 ++ src/client/assets/recover.html | 28 ---- 7 files changed, 124 insertions(+), 116 deletions(-) create mode 100644 src/client/assets/flush.html delete mode 100644 src/client/assets/recover.html diff --git a/locales/en.yml b/locales/en.yml index 5786819364..446ef371be 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -62,6 +62,8 @@ common/views/components/connect-failed.troubleshooter.vue: no-server-desc: "The network connection of your PC is normal, but you could not connect to Misskey's server. There is a possibility that the server is either down or under maintenance, please try again later." success: "Successfully connected to Misskey's server" success-desc: "It seems to be able to connect. Please reload the page." + flush: "Clean cache" + set-version: "Specify version" common/views/components/messaging.vue: search-user: "Find an user" diff --git a/locales/fr.yml b/locales/fr.yml index 4af300fcf6..583104b4f0 100644 --- a/locales/fr.yml +++ b/locales/fr.yml @@ -62,6 +62,8 @@ common/views/components/connect-failed.troubleshooter.vue: no-server-desc: "Votre connexion est OK, mais il a été impossible de vous connecter au serveur de Misskey. Il y a des chances que le serveur soit hors-ligne ou en maintenance, veuillez ressayer plus tard." success: "Connexion au serveur de Misskey reussie!" success-desc: "La connexion au serveur a été reussie. Veuillez recharger la page." + flush: "キャッシュの削除" + set-version: "バージョン指定" common/views/components/messaging.vue: search-user: "Trouver un utilisateur" diff --git a/locales/ja.yml b/locales/ja.yml index 1f70f4203d..b5479b5cef 100644 --- a/locales/ja.yml +++ b/locales/ja.yml @@ -62,6 +62,8 @@ common/views/components/connect-failed.troubleshooter.vue: no-server-desc: "お使いのPCのインターネット接続は正常ですが、Misskeyのサーバーには接続できませんでした。サーバーがダウンまたはメンテナンスしている可能性があるので、しばらくしてから再度御アクセスください。" success: "Misskeyのサーバーに接続できました" success-desc: "正常に接続できるようです。ページを再度読み込みしてください。" + flush: "キャッシュの削除" + set-version: "バージョン指定" common/views/components/messaging.vue: search-user: "ユーザーを探す" diff --git a/src/client/app/boot.js b/src/client/app/boot.js index 12b0d220a9..a0709842b9 100644 --- a/src/client/app/boot.js +++ b/src/client/app/boot.js @@ -18,6 +18,8 @@ // ブロック内に入れてスコープを非グローバル化するとそれが防げます // (Chrome以外のブラウザでは検証していません) { + if (localStorage.getItem('shouldFlush') == 'true') refresh(); + // Get the current url information const url = new URL(location.href); @@ -103,19 +105,25 @@ '\n\n' + 'New version of Misskey available. The page will be reloaded.'); - // Clear cache (serive worker) - try { - navigator.serviceWorker.controller.postMessage('clear'); - - navigator.serviceWorker.getRegistrations().then(registrations => { - registrations.forEach(registration => registration.unregister()); - }); - } catch (e) { - console.error(e); - } - - // Force reload - location.reload(true); + refresh(); } }, 3000); + + function refresh() { + localStorage.setItem('shouldFlush', 'false'); + + // Clear cache (serive worker) + try { + navigator.serviceWorker.controller.postMessage('clear'); + + navigator.serviceWorker.getRegistrations().then(registrations => { + registrations.forEach(registration => registration.unregister()); + }); + } catch (e) { + console.error(e); + } + + // Force reload + location.reload(true); + } } diff --git a/src/client/app/common/views/components/connect-failed.troubleshooter.vue b/src/client/app/common/views/components/connect-failed.troubleshooter.vue index fffabe5a30..2ee5f67c89 100644 --- a/src/client/app/common/views/components/connect-failed.troubleshooter.vue +++ b/src/client/app/common/views/components/connect-failed.troubleshooter.vue @@ -1,34 +1,39 @@ <template> <div class="troubleshooter"> - <h1>%fa:wrench%%i18n:@title%</h1> - <div> - <p :data-wip="network == null"> - <template v-if="network != null"> - <template v-if="network">%fa:check%</template> - <template v-if="!network">%fa:times%</template> - </template> - {{ network == null ? '%i18n:!@checking-network%' : '%i18n:!@network%' }}<mk-ellipsis v-if="network == null"/> - </p> - <p v-if="network == true" :data-wip="internet == null"> - <template v-if="internet != null"> - <template v-if="internet">%fa:check%</template> - <template v-if="!internet">%fa:times%</template> - </template> - {{ internet == null ? '%i18n:!@checking-internet%' : '%i18n:!@internet%' }}<mk-ellipsis v-if="internet == null"/> - </p> - <p v-if="internet == true" :data-wip="server == null"> - <template v-if="server != null"> - <template v-if="server">%fa:check%</template> - <template v-if="!server">%fa:times%</template> - </template> - {{ server == null ? '%i18n:!@checking-server%' : '%i18n:!@server%' }}<mk-ellipsis v-if="server == null"/> - </p> + <div class="body"> + <h1>%fa:wrench%%i18n:@title%</h1> + <div> + <p :data-wip="network == null"> + <template v-if="network != null"> + <template v-if="network">%fa:check%</template> + <template v-if="!network">%fa:times%</template> + </template> + {{ network == null ? '%i18n:!@checking-network%' : '%i18n:!@network%' }}<mk-ellipsis v-if="network == null"/> + </p> + <p v-if="network == true" :data-wip="internet == null"> + <template v-if="internet != null"> + <template v-if="internet">%fa:check%</template> + <template v-if="!internet">%fa:times%</template> + </template> + {{ internet == null ? '%i18n:!@checking-internet%' : '%i18n:!@internet%' }}<mk-ellipsis v-if="internet == null"/> + </p> + <p v-if="internet == true" :data-wip="server == null"> + <template v-if="server != null"> + <template v-if="server">%fa:check%</template> + <template v-if="!server">%fa:times%</template> + </template> + {{ server == null ? '%i18n:!@checking-server%' : '%i18n:!@server%' }}<mk-ellipsis v-if="server == null"/> + </p> + </div> + <p v-if="!end">%i18n:@finding%<mk-ellipsis/></p> + <p v-if="network === false"><b>%fa:exclamation-triangle%%i18n:@no-network%</b><br>%i18n:@no-network-desc%</p> + <p v-if="internet === false"><b>%fa:exclamation-triangle%%i18n:@no-internet%</b><br>%i18n:@no-internet-desc%</p> + <p v-if="server === false"><b>%fa:exclamation-triangle%%i18n:@no-server%</b><br>%i18n:@no-server-desc%</p> + <p v-if="server === true" class="success"><b>%fa:info-circle%%i18n:@success%</b><br>%i18n:@success-desc%</p> </div> - <p v-if="!end">%i18n:@finding%<mk-ellipsis/></p> - <p v-if="network === false"><b>%fa:exclamation-triangle%%i18n:@no-network%</b><br>%i18n:@no-network-desc%</p> - <p v-if="internet === false"><b>%fa:exclamation-triangle%%i18n:@no-internet%</b><br>%i18n:@no-internet-desc%</p> - <p v-if="server === false"><b>%fa:exclamation-triangle%%i18n:@no-server%</b><br>%i18n:@no-server-desc%</p> - <p v-if="server === true" class="success"><b>%fa:info-circle%%i18n:@success%</b><br>%i18n:@success-desc%</p> + <footer> + <a href="/assets/flush.html">%i18n:@flush%</a> | <a href="/assets/version.html">%i18n:@set-version%</a> + </footer> </div> </template> @@ -77,61 +82,62 @@ export default Vue.extend({ <style lang="stylus" scoped> .troubleshooter - width 100% - max-width 500px - text-align left - background #fff - border-radius 8px - border solid 1px #ddd + > .body + width 100% + max-width 500px + text-align left + background #fff + border-radius 8px + border solid 1px #ddd - > h1 - margin 0 - padding 0.6em 1.2em - font-size 1em - color #444 - border-bottom solid 1px #eee + > h1 + margin 0 + padding 0.6em 1.2em + font-size 1em + color #444 + border-bottom solid 1px #eee - > [data-fa] - margin-right 0.25em + > [data-fa] + margin-right 0.25em - > div - overflow hidden - padding 0.6em 1.2em + > div + overflow hidden + padding 0.6em 1.2em + + > p + margin 0.5em 0 + font-size 0.9em + color #444 + + &[data-wip] + color #888 + + > [data-fa] + margin-right 0.25em + + &.times + color #e03524 + + &.check + color #84c32f > p - margin 0.5em 0 - font-size 0.9em + margin 0 + padding 0.7em 1.2em + font-size 1em color #444 + border-top solid 1px #eee - &[data-wip] - color #888 - - > [data-fa] - margin-right 0.25em - - &.times - color #e03524 - - &.check - color #84c32f - - > p - margin 0 - padding 0.7em 1.2em - font-size 1em - color #444 - border-top solid 1px #eee - - > b - > [data-fa] - margin-right 0.25em - - &.success > b - color #39adad + > [data-fa] + margin-right 0.25em - &:not(.success) - > b - color #ad4339 + &.success + > b + color #39adad + + &:not(.success) + > b + color #ad4339 </style> diff --git a/src/client/assets/flush.html b/src/client/assets/flush.html new file mode 100644 index 0000000000..d43600157a --- /dev/null +++ b/src/client/assets/flush.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> + +<html> + <head> + <meta charset="utf-8"> + <title>Misskeyのリカバリ</title> + <script> + const yn = window.confirm('キャッシュをクリアしますか?\n\nDo you want to clear caches?'); + if (yn) { + localStorage.setItem('shouldFlush', 'true'); + } + + location.href = '/'; + </script> + </head> +</html> diff --git a/src/client/assets/recover.html b/src/client/assets/recover.html deleted file mode 100644 index b1889c72e6..0000000000 --- a/src/client/assets/recover.html +++ /dev/null @@ -1,28 +0,0 @@ -<!DOCTYPE html> - -<html> - <head> - <meta charset="utf-8"> - <title>Misskeyのリカバリ</title> - <script> - const yn = window.confirm('キャッシュをクリアしますか?(他のタブでMisskeyを開いている状態だと正常にクリアできないので、他のMisskeyのタブをすべて閉じてから行ってください)\n\nDo you want to clear caches? (Please close all other Misskey tabs before clear cache)'); - if (yn) { - try { - navigator.serviceWorker.controller.postMessage('clear'); - navigator.serviceWorker.getRegistrations().then(registrations => { - registrations.forEach(registration => registration.unregister()); - }); - } catch (e) { - console.error(e); - } - alert('キャッシュをクリアしました。\n\ncache cleared.'); - alert('まもなくページを再度読み込みします。再度読み込みが終わると、再度キャッシュをクリアするか尋ねられるので、「キャンセル」を選択して抜けてください。\n\nWe will reload the page shortly. After that, you are asked whether you want to clear the cache again, so please select "Cancel" and exit.'); - setTimeout(() => { - location.reload(true); - }, 100); - } else { - location.href = '/'; - } - </script> - </head> -</html>