diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 678f20e8c29d2f77ab96ac33265521828285fb6c..870041d673dcb02cd176f8270cf67de4253d5384 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -264,6 +264,7 @@ rename: "åå‰ã‚’変更" avatar: "アイコン" banner: "ãƒãƒŠãƒ¼" nsfw: "閲覧注æ„" +whenServerDisconnected: "サーãƒãƒ¼ã¨ã®æŽ¥ç¶šãŒå¤±ã‚ã‚ŒãŸã¨ã" disconnectedFromServer: "サーãƒãƒ¼ã‹ã‚‰åˆ‡æ–ã•ã‚Œã¾ã—ãŸ" reload: "リãƒãƒ¼ãƒ‰" doNothing: "ãªã«ã‚‚ã—ãªã„" @@ -364,7 +365,6 @@ unregister: "登録を解除" passwordLessLogin: "パスワード無ã—ãƒã‚°ã‚¤ãƒ³" resetPassword: "パスワードをリセット" newPasswordIs: "æ–°ã—ã„パスワードã¯ã€Œ{password}ã€ã§ã™" -autoReloadWhenDisconnected: "サーãƒãƒ¼åˆ‡æ–時ã«è‡ªå‹•ãƒªãƒãƒ¼ãƒ‰" autoNoteWatch: "ノートã®è‡ªå‹•ã‚¦ã‚©ãƒƒãƒ" autoNoteWatchDescription: "ã‚ãªãŸãŒãƒªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã—ãŸã‚Šè¿”ä¿¡ã—ãŸã‚Šã—ãŸä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒŽãƒ¼ãƒˆã«é–¢ã™ã‚‹é€šçŸ¥ã‚’å—ã‘å–るよã†ã«ã—ã¾ã™ã€‚" reduceUiAnimation: "UIã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’減らã™" @@ -567,6 +567,11 @@ database: "データベース" channel: "ãƒãƒ£ãƒ³ãƒãƒ«" create: "作æˆ" +_serverDisconnectedBehavior: + reload: "自動ã§ãƒªãƒãƒ¼ãƒ‰" + dialog: "ダイアãƒã‚°ã§è¦å‘Š" + quiet: "控ãˆã‚ã«è¦å‘Š" + _channel: create: "ãƒãƒ£ãƒ³ãƒãƒ«ã‚’作æˆ" edit: "ãƒãƒ£ãƒ³ãƒãƒ«ã‚’編集" diff --git a/src/client/components/stream-indicator.vue b/src/client/components/stream-indicator.vue index ec00f4cbfe7983aec45fa4ff7a0bb8383cf33213..9005cb9a8be21b2453dfee1aa292ed94c228da6c 100644 --- a/src/client/components/stream-indicator.vue +++ b/src/client/components/stream-indicator.vue @@ -1,5 +1,5 @@ <template> -<div class="nsbbhtug" v-if="hasDisconnected" @click="resetDisconnected"> +<div class="nsbbhtug" v-if="hasDisconnected && $store.state.device.serverDisconnectedBehavior === 'quiet'" @click="resetDisconnected"> <div>{{ $t('disconnectedFromServer') }}</div> <div class="command"> <button class="_textButton" @click="reload">{{ $t('reload') }}</button> @@ -23,21 +23,12 @@ export default Vue.extend({ }, }, created() { - this.$root.stream.on('_connected_', this.onConnected); this.$root.stream.on('_disconnected_', this.onDisconnected); }, beforeDestroy() { - this.$root.stream.off('_connected_', this.onConnected); this.$root.stream.off('_disconnected_', this.onDisconnected); }, methods: { - onConnected() { - if (this.hasDisconnected) { - if (this.$store.state.device.autoReload) { - this.reload(); - } - } - }, onDisconnected() { this.hasDisconnected = true; }, diff --git a/src/client/init.ts b/src/client/init.ts index b80df44c880714e26ea68e00c696160093b23927..3931329aa5807a5444215602bd01804e3b9b05e9 100644 --- a/src/client/init.ts +++ b/src/client/init.ts @@ -237,6 +237,26 @@ os.init(async () => { document.documentElement.style.setProperty('--modalBgFilter', v ? 'blur(4px)' : 'none'); }, { immediate: true }); + let reloadDialogShowing = false; + os.stream.on('_disconnected_', async () => { + if (store.state.device.serverDisconnectedBehavior === 'reload') { + location.reload(); + } else if (store.state.device.serverDisconnectedBehavior === 'dialog') { + if (reloadDialogShowing) return; + reloadDialogShowing = true; + const { canceled } = await app.dialog({ + type: 'warning', + title: app.$t('disconnectedFromServer'), + text: app.$t('reloadConfirm'), + showCancelButton: true + }); + reloadDialogShowing = false; + if (!canceled) { + location.reload(); + } + } + }); + os.stream.on('emojiAdded', data => { // TODO //store.commit('instance/set', ); diff --git a/src/client/pages/preferences/index.vue b/src/client/pages/preferences/index.vue index 9d3959fcc28c4214ab3a39b3aa71d15a387051c6..4e171bfcbe281860e7b52fd873632fcce0864c46 100644 --- a/src/client/pages/preferences/index.vue +++ b/src/client/pages/preferences/index.vue @@ -95,9 +95,10 @@ <section class="_card _vMargin"> <div class="_title"><fa :icon="faCog"/> {{ $t('general') }}</div> <div class="_content"> - <mk-switch v-model="autoReload"> - {{ $t('autoReloadWhenDisconnected') }} - </mk-switch> + <div>{{ $t('whenServerDisconnected') }}</div> + <mk-radio v-model="serverDisconnectedBehavior" value="reload">{{ $t('_serverDisconnectedBehavior.reload') }}</mk-radio> + <mk-radio v-model="serverDisconnectedBehavior" value="dialog">{{ $t('_serverDisconnectedBehavior.dialog') }}</mk-radio> + <mk-radio v-model="serverDisconnectedBehavior" value="quiet">{{ $t('_serverDisconnectedBehavior.quiet') }}</mk-radio> </div> <div class="_content"> <mk-switch v-model="imageNewTab">{{ $t('openImageInNewTab') }}</mk-switch> @@ -186,9 +187,9 @@ export default Vue.extend({ }, computed: { - autoReload: { - get() { return this.$store.state.device.autoReload; }, - set(value) { this.$store.commit('device/set', { key: 'autoReload', value }); } + serverDisconnectedBehavior: { + get() { return this.$store.state.device.serverDisconnectedBehavior; }, + set(value) { this.$store.commit('device/set', { key: 'serverDisconnectedBehavior', value }); } }, reduceAnimation: { diff --git a/src/client/store.ts b/src/client/store.ts index 7e747a570db17f1a1f98c80bfded744dbf25429e..07566954a2fc396021abd841db62805cf1939134 100644 --- a/src/client/store.ts +++ b/src/client/store.ts @@ -60,7 +60,7 @@ export const defaultDeviceSettings = { loadRawImages: false, alwaysShowNsfw: false, useOsNativeEmojis: false, - autoReload: false, + serverDisconnectedBehavior: 'quiet', accounts: [], recentEmojis: [], themes: [],