diff options
author | Joram Wilander <jwawilander@gmail.com> | 2016-11-29 10:37:59 -0500 |
---|---|---|
committer | enahum <nahumhbl@gmail.com> | 2016-11-29 12:37:59 -0300 |
commit | 557aa68636ae8b23b33b761d9e9fe0f5b8cf1120 (patch) | |
tree | 72bdbdb053bc7a281bcf15c8d5dfc0ab185d1944 | |
parent | 58215e573fec44fe9cadf09909b44007ef5c18e6 (diff) | |
download | chat-557aa68636ae8b23b33b761d9e9fe0f5b8cf1120.tar.gz chat-557aa68636ae8b23b33b761d9e9fe0f5b8cf1120.tar.bz2 chat-557aa68636ae8b23b33b761d9e9fe0f5b8cf1120.zip |
PLT-4233 When internet reconnects, reconnect websocket and grab latest posts, etc. (#4500)
* When internet reconnects, reconnect websocket and grab latest posts, etc.
* Rename internet connection variable
-rw-r--r-- | webapp/actions/websocket_actions.jsx | 9 | ||||
-rw-r--r-- | webapp/client/client.jsx | 5 | ||||
-rw-r--r-- | webapp/client/web_client.jsx | 19 | ||||
-rw-r--r-- | webapp/routes/route_team.jsx | 3 |
4 files changed, 30 insertions, 6 deletions
diff --git a/webapp/actions/websocket_actions.jsx b/webapp/actions/websocket_actions.jsx index bf56a148a..d6adb5105 100644 --- a/webapp/actions/websocket_actions.jsx +++ b/webapp/actions/websocket_actions.jsx @@ -67,12 +67,13 @@ export function close() { WebSocketClient.close(); } -export function getStatuses() { - StatusActions.loadStatusesForChannelAndSidebar(); +export function reconnect() { + close(); + initialize(); + handleReconnect(); } function handleFirstConnect() { - getStatuses(); ErrorStore.clearLastError(); ErrorStore.emitChange(); } @@ -83,7 +84,7 @@ function handleReconnect() { loadPosts(ChannelStore.getCurrentId()); } - getStatuses(); + StatusActions.loadStatusesForChannelAndSidebar(); ErrorStore.clearLastError(); ErrorStore.emitChange(); } diff --git a/webapp/client/client.jsx b/webapp/client/client.jsx index ff42fb7ac..75e47267c 100644 --- a/webapp/client/client.jsx +++ b/webapp/client/client.jsx @@ -156,6 +156,10 @@ export default class Client { // NO-OP for inherited classes to override } + handleSuccess(res) { // eslint-disable-line no-unused-vars + // NO-OP for inherited classes to override + } + handleResponse(methodName, successCallback, errorCallback, err, res) { if (res && res.header) { this.serverVersion = res.header[HEADER_X_VERSION_ID]; @@ -212,6 +216,7 @@ export default class Client { console.error('Missing response body for ' + methodName); // eslint-disable-line no-console successCallback('', res); } + this.handleSuccess(res); } } diff --git a/webapp/client/web_client.jsx b/webapp/client/web_client.jsx index 85ced325e..62870c5bc 100644 --- a/webapp/client/web_client.jsx +++ b/webapp/client/web_client.jsx @@ -2,9 +2,12 @@ // See License.txt for license information. import Client from './client.jsx'; -import TeamStore from '../stores/team_store.jsx'; -import BrowserStore from '../stores/browser_store.jsx'; + +import TeamStore from 'stores/team_store.jsx'; +import BrowserStore from 'stores/browser_store.jsx'; + import * as GlobalActions from 'actions/global_actions.jsx'; +import {reconnect} from 'actions/websocket_actions.jsx'; import request from 'superagent'; @@ -14,6 +17,7 @@ class WebClientClass extends Client { constructor() { super(); this.enableLogErrorsToConsole(true); + this.hasInternetConnection = true; TeamStore.addChangeListener(this.onTeamStoreChanged.bind(this)); } @@ -37,6 +41,17 @@ class WebClientClass extends Client { if (err.status === HTTP_UNAUTHORIZED && res.req.url !== '/api/v3/users/login') { GlobalActions.emitUserLoggedOutEvent('/login'); } + + if (err.status == null) { + this.hasInternetConnection = false; + } + } + + handleSuccess = (res) => { // eslint-disable-line no-unused-vars + if (res && !this.hasInternetConnection) { + reconnect(); + this.hasInternetConnection = true; + } } // not sure why but super.login doesn't work if using an () => arrow functions. diff --git a/webapp/routes/route_team.jsx b/webapp/routes/route_team.jsx index 7d4c0c80c..88fab8d45 100644 --- a/webapp/routes/route_team.jsx +++ b/webapp/routes/route_team.jsx @@ -7,6 +7,7 @@ import {browserHistory} from 'react-router/es6'; import TeamStore from 'stores/team_store.jsx'; import * as GlobalActions from 'actions/global_actions.jsx'; +import {loadStatusesForChannelAndSidebar} from 'actions/status_actions.jsx'; import AppDispatcher from 'dispatcher/app_dispatcher.jsx'; import Constants from 'utils/constants.jsx'; const ActionTypes = Constants.ActionTypes; @@ -85,6 +86,8 @@ function preNeedsTeam(nextState, replace, callback) { channels: data }); + loadStatusesForChannelAndSidebar(); + d1.resolve(); }, (err) => { |