From 8c1cdd4ddbd7595a4256e8cdcb91f1c2a4faef36 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Wed, 12 Dec 2018 20:16:20 +0900 Subject: [PATCH 1/8] Add a button to switch websocket for streaming --- src/config/locales/en/translation.json | 1 + .../components/TimelineSpace/HeaderMenu.vue | 21 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/config/locales/en/translation.json b/src/config/locales/en/translation.json index 744dfac9..bbff8d80 100644 --- a/src/config/locales/en/translation.json +++ b/src/config/locales/en/translation.json @@ -73,6 +73,7 @@ "show_replies": "Show replies", "apply": "Apply" }, + "switch_streaming": "Use websocket for streaming", "new_toot": "Toot", "reload": "Reload", "settings": "Settings" diff --git a/src/renderer/components/TimelineSpace/HeaderMenu.vue b/src/renderer/components/TimelineSpace/HeaderMenu.vue index 7f1f3a69..8ac3c36e 100644 --- a/src/renderer/components/TimelineSpace/HeaderMenu.vue +++ b/src/renderer/components/TimelineSpace/HeaderMenu.vue @@ -4,6 +4,9 @@

{{ title }}

+ + + @@ -63,7 +66,8 @@ export default { filter: '', filterVisible: false, showReblogs: true, - showReplies: true + showReplies: true, + useWebsocket: false } }, computed: { @@ -129,6 +133,9 @@ export default { break } }, + switchStreaming () { + this.useWebsocket = !this.useWebsocket + }, openNewTootModal () { this.$store.dispatch('TimelineSpace/Modals/NewToot/openModal') }, @@ -288,6 +295,18 @@ export default { &:hover { color: #409eff; } + + .not-websocket { + fill: var(--theme-secondary-color); + + &:hover { + fill: #409eff; + } + } + + .websocket { + fill: #409eff; + } } } } From c210bea4d9feb3b06b4f4efb5b8bbeb6c59fa8fd Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Tue, 18 Dec 2018 23:00:46 +0900 Subject: [PATCH 2/8] refs #769 Switch user streaming method --- src/main/index.js | 9 ++++---- src/main/streaming_manager.js | 23 ++++++++++--------- .../components/TimelineSpace/HeaderMenu.vue | 14 +++++++---- src/renderer/store/TimelineSpace.js | 17 ++++++++++---- 4 files changed, 38 insertions(+), 25 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index d1f49533..f2775c3a 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -390,20 +390,21 @@ ipcMain.on('reset-badge', () => { // streaming let userStreaming = null -ipcMain.on('start-user-streaming', (event, ac) => { - accountManager.getAccount(ac._id) +ipcMain.on('start-user-streaming', (event, obj) => { + const { account, useWebsocket } = obj + accountManager.getAccount(account._id) .catch((err) => { log.error(err) event.sender.send('error-start-user-streaming', err) }) - .then((account) => { + .then((acct) => { // Stop old user streaming if (userStreaming !== null) { userStreaming.stop() userStreaming = null } - userStreaming = new StreamingManager(account) + userStreaming = new StreamingManager(acct, useWebsocket) userStreaming.startUser( (update) => { event.sender.send('update-start-user-streaming', update) diff --git a/src/main/streaming_manager.js b/src/main/streaming_manager.js index 4832238a..f0b5f727 100644 --- a/src/main/streaming_manager.js +++ b/src/main/streaming_manager.js @@ -4,11 +4,11 @@ import WebSocket from './websocket' import log from 'electron-log' export default class StreamingManager { - constructor (account) { + constructor (account, useWebsocket = false) { this.account = account this.streaming = new Streaming(account) this.websocket = new WebSocket(account) - this.mastodon = true + this.useWebsocket = useWebsocket } /** @@ -17,18 +17,19 @@ export default class StreamingManager { async detectPleroma () { const data = await Mastodon.get('/instance', {}, this.account.baseURL + '/api/v1') if (data.version.includes('Pleroma')) { - this.mastodon = false log.info('detect Pleroma') + return true } + return false } startUser (updateCallback, notificationCallback, errCallback) { this.detectPleroma() - .then(() => { - if (this.mastodon) { - this._startUserStreaming(updateCallback, notificationCallback, errCallback) - } else { + .then((isPleroma) => { + if (isPleroma || this.useWebsocket) { this._startUserSocket(updateCallback, notificationCallback, errCallback) + } else { + this._startUserStreaming(updateCallback, notificationCallback, errCallback) } }) .catch(err => errCallback(err)) @@ -36,11 +37,11 @@ export default class StreamingManager { start (path, params, updateCallback, errCallback) { this.detectPleroma() - .then(() => { - if (this.mastodon) { - this._startStreaming(path, params, updateCallback, errCallback) - } else { + .then((isPleroma) => { + if (isPleroma || this.useWebsocket) { this._startSocket(path, params, updateCallback, errCallback) + } else { + this._startStreaming(path, params, updateCallback, errCallback) } }) .catch(err => errCallback(err)) diff --git a/src/renderer/components/TimelineSpace/HeaderMenu.vue b/src/renderer/components/TimelineSpace/HeaderMenu.vue index 8ac3c36e..d4775967 100644 --- a/src/renderer/components/TimelineSpace/HeaderMenu.vue +++ b/src/renderer/components/TimelineSpace/HeaderMenu.vue @@ -66,13 +66,15 @@ export default { filter: '', filterVisible: false, showReblogs: true, - showReplies: true, - useWebsocket: false + showReplies: true } }, computed: { - ...mapState({ - title: state => state.TimelineSpace.HeaderMenu.title + ...mapState('TimelineSpace/HeaderMenu', { + title: state => state.title + }), + ...mapState('TimelineSpace', { + useWebsocket: state => state.useWebsocket }) }, created () { @@ -134,7 +136,9 @@ export default { } }, switchStreaming () { - this.useWebsocket = !this.useWebsocket + this.$store.dispatch('TimelineSpace/stopStreamings') + this.$store.commit('TimelineSpace/changeUseWebsocket', !this.useWebsocket) + this.$store.dispatch('TimelineSpace/startStreamings') }, openNewTootModal () { this.$store.dispatch('TimelineSpace/Modals/NewToot/openModal') diff --git a/src/renderer/store/TimelineSpace.js b/src/renderer/store/TimelineSpace.js index c98d149c..6b1b22f0 100644 --- a/src/renderer/store/TimelineSpace.js +++ b/src/renderer/store/TimelineSpace.js @@ -29,7 +29,8 @@ const TimelineSpace = { direct: unreadSettings.Direct.default, local: unreadSettings.Local.default, public: unreadSettings.Public.default - } + }, + useWebsocket: false }, mutations: { updateAccount (state, account) { @@ -55,6 +56,9 @@ const TimelineSpace = { }, updateUnreadNotification (state, settings) { state.unreadNotification = settings + }, + changeUseWebsocket (state, use) { + state.useWebsocket = use } }, actions: { @@ -200,8 +204,8 @@ const TimelineSpace = { dispatch('bindPublicStreaming') } }, - startStreamings ({ dispatch, state }, account) { - dispatch('startUserStreaming', account) + startStreamings ({ dispatch, state }) { + dispatch('startUserStreaming') if (state.unreadNotification.direct) { dispatch('startDirectMessagesStreaming') } @@ -250,9 +254,12 @@ const TimelineSpace = { commit('TimelineSpace/SideMenu/changeUnreadNotifications', true, { root: true }) }) }, - startUserStreaming (_, account) { + startUserStreaming ({ state }) { return new Promise((resolve, reject) => { - ipcRenderer.send('start-user-streaming', account) + ipcRenderer.send('start-user-streaming', { + account: state.account, + useWebsocket: state.useWebsocket + }) ipcRenderer.once('error-start-user-streaming', (event, err) => { reject(err) }) From 1e50e2dd6dfe51cdecf601709844a46d24d8d43e Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Tue, 18 Dec 2018 23:12:18 +0900 Subject: [PATCH 3/8] refs #769 Switch local streaming method --- src/main/index.js | 9 +++++---- src/renderer/store/TimelineSpace.js | 5 ++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index f2775c3a..0666d862 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -469,20 +469,21 @@ ipcMain.on('stop-directmessages-streaming', (event, _) => { let localStreaming = null -ipcMain.on('start-local-streaming', (event, ac) => { - accountManager.getAccount(ac._id) +ipcMain.on('start-local-streaming', (event, obj) => { + const { account, useWebsocket } = obj + accountManager.getAccount(account._id) .catch((err) => { log.error(err) event.sender.send('error-start-local-streaming', err) }) - .then((account) => { + .then((acct) => { // Stop old local streaming if (localStreaming !== null) { localStreaming.stop() localStreaming = null } - localStreaming = new StreamingManager(account) + localStreaming = new StreamingManager(acct, useWebsocket) localStreaming.start( 'public/local', '', diff --git a/src/renderer/store/TimelineSpace.js b/src/renderer/store/TimelineSpace.js index 6b1b22f0..bbf2556a 100644 --- a/src/renderer/store/TimelineSpace.js +++ b/src/renderer/store/TimelineSpace.js @@ -276,7 +276,10 @@ const TimelineSpace = { }, startLocalStreaming ({ state }) { return new Promise((resolve, reject) => { - ipcRenderer.send('start-local-streaming', state.account) + ipcRenderer.send('start-local-streaming', { + account: state.account, + useWebsocket: state.useWebsocket + }) ipcRenderer.once('error-start-local-streaming', (event, err) => { reject(err) }) From 1d30a5e32ca023ff0e39f072a528c0008ddefefc Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Tue, 18 Dec 2018 23:17:56 +0900 Subject: [PATCH 4/8] refs #769 Switch public streaming method --- src/main/index.js | 9 +++++---- src/renderer/store/TimelineSpace.js | 5 ++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index 0666d862..3168d9c0 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -507,20 +507,21 @@ ipcMain.on('stop-local-streaming', (event, _) => { let publicStreaming = null -ipcMain.on('start-public-streaming', (event, ac) => { - accountManager.getAccount(ac._id) +ipcMain.on('start-public-streaming', (event, obj) => { + const { account, useWebsocket } = obj + accountManager.getAccount(account._id) .catch((err) => { log.error(err) event.sender.send('error-start-public-streaming', err) }) - .then((account) => { + .then((acct) => { // Stop old public streaming if (publicStreaming !== null) { publicStreaming.stop() publicStreaming = null } - publicStreaming = new StreamingManager(account) + publicStreaming = new StreamingManager(acct, useWebsocket) publicStreaming.start( 'public', '', diff --git a/src/renderer/store/TimelineSpace.js b/src/renderer/store/TimelineSpace.js index bbf2556a..68a2d99d 100644 --- a/src/renderer/store/TimelineSpace.js +++ b/src/renderer/store/TimelineSpace.js @@ -296,7 +296,10 @@ const TimelineSpace = { }, startPublicStreaming ({ state }) { return new Promise((resolve, reject) => { - ipcRenderer.send('start-public-streaming', state.account) + ipcRenderer.send('start-public-streaming', { + account: state.account, + useWebsocket: state.useWebsocket + }) ipcRenderer.once('error-start-public-streaming', (event, err) => { reject(err) }) From 13eaa228327789ab8b245f10dc626b2f21889745 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Tue, 18 Dec 2018 23:23:12 +0900 Subject: [PATCH 5/8] refs #769 Switch direct streaming method --- src/main/index.js | 9 +++++---- src/renderer/store/TimelineSpace.js | 5 ++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index 3168d9c0..9a5940df 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -432,20 +432,21 @@ ipcMain.on('stop-user-streaming', (event, _) => { let directMessagesStreaming = null -ipcMain.on('start-directmessages-streaming', (event, ac) => { - accountManager.getAccount(ac._id) +ipcMain.on('start-directmessages-streaming', (event, obj) => { + const { account, useWebsocket } = obj + accountManager.getAccount(account._id) .catch((err) => { log.error(err) event.sender.send('error-start-directmessages-streaming', err) }) - .then((account) => { + .then((acct) => { // Stop old directmessages streaming if (directMessagesStreaming !== null) { directMessagesStreaming.stop() directMessagesStreaming = null } - directMessagesStreaming = new StreamingManager(account) + directMessagesStreaming = new StreamingManager(acct, useWebsocket) directMessagesStreaming.start( 'direct', '', diff --git a/src/renderer/store/TimelineSpace.js b/src/renderer/store/TimelineSpace.js index 68a2d99d..f321cc15 100644 --- a/src/renderer/store/TimelineSpace.js +++ b/src/renderer/store/TimelineSpace.js @@ -316,7 +316,10 @@ const TimelineSpace = { }, startDirectMessagesStreaming ({ state }) { return new Promise((resolve, reject) => { - ipcRenderer.send('start-directmessages-streaming', state.account) + ipcRenderer.send('start-directmessages-streaming', { + account: state.account, + useWebsocket: state.useWebsocket + }) ipcRenderer.once('error-start-directmessages-streaming', (event, err) => { reject(err) }) From c94bfce7ebd7161fcae2156814b759177c2aa75e Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Tue, 18 Dec 2018 23:26:59 +0900 Subject: [PATCH 6/8] refs #769 Switch list streaming method --- src/main/index.js | 9 +++++---- src/renderer/store/TimelineSpace/Contents/Lists/Show.js | 5 +++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index 9a5940df..a6979cfd 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -547,22 +547,23 @@ ipcMain.on('stop-public-streaming', (event, _) => { let listStreaming = null ipcMain.on('start-list-streaming', (event, obj) => { - accountManager.getAccount(obj.account._id) + const { listID, account, useWebsocket } = obj + accountManager.getAccount(account._id) .catch((err) => { log.error(err) event.sender.send('error-start-list-streaming', err) }) - .then((account) => { + .then((acct) => { // Stop old list streaming if (listStreaming !== null) { listStreaming.stop() listStreaming = null } - listStreaming = new StreamingManager(account) + listStreaming = new StreamingManager(acct, useWebsocket) listStreaming.start( 'list', - `list=${obj.list_id}`, + `list=${listID}`, (update) => { event.sender.send('update-start-list-streaming', update) }, diff --git a/src/renderer/store/TimelineSpace/Contents/Lists/Show.js b/src/renderer/store/TimelineSpace/Contents/Lists/Show.js index 9f3a28e2..7eb8ea89 100644 --- a/src/renderer/store/TimelineSpace/Contents/Lists/Show.js +++ b/src/renderer/store/TimelineSpace/Contents/Lists/Show.js @@ -91,8 +91,9 @@ const Show = { }) return new Promise((resolve, reject) => { ipcRenderer.send('start-list-streaming', { - list_id: listID, - account: rootState.TimelineSpace.account + listID: listID, + account: rootState.TimelineSpace.account, + useWebsocket: rootState.TimelineSpace.useWebsocket }) ipcRenderer.once('error-start-list-streaming', (event, err) => { reject(err) From 4253bb791d0b40076cd076cc65c6d26019829418 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Tue, 18 Dec 2018 23:30:04 +0900 Subject: [PATCH 7/8] refs #769 Switch hashtag streaming method --- src/main/index.js | 9 +++++---- src/renderer/store/TimelineSpace/Contents/Hashtag/Tag.js | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index a6979cfd..3efca3cd 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -585,22 +585,23 @@ ipcMain.on('stop-list-streaming', (event, _) => { let tagStreaming = null ipcMain.on('start-tag-streaming', (event, obj) => { - accountManager.getAccount(obj.account._id) + const { tag, account, useWebsocket } = obj + accountManager.getAccount(account._id) .catch((err) => { log.error(err) event.sender.send('error-start-tag-streaming', err) }) - .then((account) => { + .then((acct) => { // Stop old tag streaming if (tagStreaming !== null) { tagStreaming.stop() tagStreaming = null } - tagStreaming = new StreamingManager(account) + tagStreaming = new StreamingManager(acct, useWebsocket) tagStreaming.start( 'hashtag', - `tag=${obj.tag}`, + `tag=${tag}`, (update) => { event.sender.send('update-start-tag-streaming', update) }, diff --git a/src/renderer/store/TimelineSpace/Contents/Hashtag/Tag.js b/src/renderer/store/TimelineSpace/Contents/Hashtag/Tag.js index e0d828c9..e6122c7e 100644 --- a/src/renderer/store/TimelineSpace/Contents/Hashtag/Tag.js +++ b/src/renderer/store/TimelineSpace/Contents/Hashtag/Tag.js @@ -91,7 +91,8 @@ const Tag = { return new Promise((resolve, reject) => { ipcRenderer.send('start-tag-streaming', { tag: encodeURIComponent(tag), - account: rootState.TimelineSpace.account + account: rootState.TimelineSpace.account, + useWebsocket: rootState.TimelineSpace.useWebsocket }) ipcRenderer.once('error-start-tag-streaming', (event, err) => { reject(err) From 577c416602c5a64b184ad29ae4ddbd49abdf46c0 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Tue, 18 Dec 2018 23:56:06 +0900 Subject: [PATCH 8/8] refs #769 Update description of button to switch websocket --- src/config/locales/de/translation.missing.json | 3 ++- src/config/locales/en/translation.json | 2 +- src/config/locales/fr/translation.missing.json | 3 ++- src/config/locales/ja/translation.json | 1 + src/config/locales/ko/translation.missing.json | 3 ++- src/config/locales/pl/translation.missing.json | 3 ++- 6 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/config/locales/de/translation.missing.json b/src/config/locales/de/translation.missing.json index a86c4eb1..97007b86 100644 --- a/src/config/locales/de/translation.missing.json +++ b/src/config/locales/de/translation.missing.json @@ -3,7 +3,8 @@ "direct": "Direct messages" }, "header_menu": { - "settings": "Settings" + "settings": "Settings", + "switch_streaming": "Use websocket for streaming. If the timeline does not update with streaming, please try it." }, "settings": { "timeline": { diff --git a/src/config/locales/en/translation.json b/src/config/locales/en/translation.json index bbff8d80..0ba339f0 100644 --- a/src/config/locales/en/translation.json +++ b/src/config/locales/en/translation.json @@ -73,7 +73,7 @@ "show_replies": "Show replies", "apply": "Apply" }, - "switch_streaming": "Use websocket for streaming", + "switch_streaming": "Use websocket for streaming. If the timeline does not update with streaming, please try it.", "new_toot": "Toot", "reload": "Reload", "settings": "Settings" diff --git a/src/config/locales/fr/translation.missing.json b/src/config/locales/fr/translation.missing.json index a86c4eb1..97007b86 100644 --- a/src/config/locales/fr/translation.missing.json +++ b/src/config/locales/fr/translation.missing.json @@ -3,7 +3,8 @@ "direct": "Direct messages" }, "header_menu": { - "settings": "Settings" + "settings": "Settings", + "switch_streaming": "Use websocket for streaming. If the timeline does not update with streaming, please try it." }, "settings": { "timeline": { diff --git a/src/config/locales/ja/translation.json b/src/config/locales/ja/translation.json index 1be15e90..1b6c23cd 100644 --- a/src/config/locales/ja/translation.json +++ b/src/config/locales/ja/translation.json @@ -72,6 +72,7 @@ "show_replies": "返信表示", "apply": "適用" }, + "switch_streaming": "Websocketによるストリーミングを行う.もしタイムラインが自動で更新されない場合にはお試しください", "new_toot": "トゥート", "reload": "再読み込み", "settings": "設定" diff --git a/src/config/locales/ko/translation.missing.json b/src/config/locales/ko/translation.missing.json index a86c4eb1..97007b86 100644 --- a/src/config/locales/ko/translation.missing.json +++ b/src/config/locales/ko/translation.missing.json @@ -3,7 +3,8 @@ "direct": "Direct messages" }, "header_menu": { - "settings": "Settings" + "settings": "Settings", + "switch_streaming": "Use websocket for streaming. If the timeline does not update with streaming, please try it." }, "settings": { "timeline": { diff --git a/src/config/locales/pl/translation.missing.json b/src/config/locales/pl/translation.missing.json index a86c4eb1..97007b86 100644 --- a/src/config/locales/pl/translation.missing.json +++ b/src/config/locales/pl/translation.missing.json @@ -3,7 +3,8 @@ "direct": "Direct messages" }, "header_menu": { - "settings": "Settings" + "settings": "Settings", + "switch_streaming": "Use websocket for streaming. If the timeline does not update with streaming, please try it." }, "settings": { "timeline": {