Add sync logic for DMs/GMs when network reconnects (#5676)
Этот коммит содержится в:
коммит произвёл
George Goldberg
родитель
2bea17251e
Коммит
db7540b111
@@ -9,14 +9,14 @@ import ChannelStore from 'stores/channel_store.jsx';
|
||||
import * as ChannelUtils from 'utils/channel_utils.jsx';
|
||||
import PreferenceStore from 'stores/preference_store.jsx';
|
||||
|
||||
import {loadProfilesForSidebar} from 'actions/user_actions.jsx';
|
||||
import {loadProfilesForSidebar, loadNewDMIfNeeded, loadNewGMIfNeeded} from 'actions/user_actions.jsx';
|
||||
import {trackEvent} from 'actions/diagnostics_actions.jsx';
|
||||
|
||||
import Client from 'client/web_client.jsx';
|
||||
import * as AsyncClient from 'utils/async_client.jsx';
|
||||
import * as UserAgent from 'utils/user_agent.jsx';
|
||||
import * as Utils from 'utils/utils.jsx';
|
||||
import {Preferences, ActionTypes} from 'utils/constants.jsx';
|
||||
import {Constants, Preferences, ActionTypes} from 'utils/constants.jsx';
|
||||
|
||||
import {browserHistory} from 'react-router/es6';
|
||||
|
||||
@@ -283,8 +283,29 @@ export function unmarkFavorite(channelId) {
|
||||
}
|
||||
|
||||
export function loadChannelsForCurrentUser() {
|
||||
AsyncClient.getChannels();
|
||||
AsyncClient.getMyChannelMembers();
|
||||
AsyncClient.getChannels().then(() => {
|
||||
AsyncClient.getMyChannelMembers().then(() => {
|
||||
loadDMsAndGMsForUnreads();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function loadDMsAndGMsForUnreads() {
|
||||
const unreads = ChannelStore.getUnreadCounts();
|
||||
for (const id in unreads) {
|
||||
if (!unreads.hasOwnProperty(id)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (unreads[id].msgs > 0 || unreads[id].mentions > 0) {
|
||||
const channel = ChannelStore.get(id);
|
||||
if (channel && channel.type === Constants.DM_CHANNEL) {
|
||||
loadNewDMIfNeeded(Utils.getUserIdFromChannelName(channel));
|
||||
} else if (channel && channel.type === Constants.GM_CHANNEL) {
|
||||
loadNewGMIfNeeded(channel.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function joinChannel(channel, success, error) {
|
||||
|
||||
@@ -46,10 +46,10 @@ export function emitChannelClickEvent(channel) {
|
||||
}
|
||||
function switchToChannel(chan) {
|
||||
const channelMember = ChannelStore.getMyMember(chan.id);
|
||||
const getMyChannelMembersPromise = AsyncClient.getChannelMember(chan.id, UserStore.getCurrentId());
|
||||
const getMyChannelMemberPromise = AsyncClient.getChannelMember(chan.id, UserStore.getCurrentId());
|
||||
const oldChannelId = ChannelStore.getCurrentId();
|
||||
|
||||
getMyChannelMembersPromise.then(() => {
|
||||
getMyChannelMemberPromise.then(() => {
|
||||
AsyncClient.getChannelStats(chan.id, true);
|
||||
AsyncClient.viewChannel(chan.id, oldChannelId);
|
||||
loadPosts(chan.id);
|
||||
|
||||
@@ -89,6 +89,26 @@ export function reconnect(includeWebSocket = true) {
|
||||
ErrorStore.emitChange();
|
||||
}
|
||||
|
||||
let intervalId = '';
|
||||
const SYNC_INTERVAL_MILLISECONDS = 1000 * 60 * 15; // 15 minutes
|
||||
|
||||
export function startPeriodicSync() {
|
||||
clearInterval(intervalId);
|
||||
|
||||
intervalId = setInterval(
|
||||
() => {
|
||||
if (UserStore.getCurrentUser() != null) {
|
||||
reconnect(false);
|
||||
}
|
||||
},
|
||||
SYNC_INTERVAL_MILLISECONDS
|
||||
);
|
||||
}
|
||||
|
||||
export function stopPeriodicSync() {
|
||||
clearInterval(intervalId);
|
||||
}
|
||||
|
||||
function handleFirstConnect() {
|
||||
ErrorStore.clearLastError();
|
||||
ErrorStore.emitChange();
|
||||
|
||||
Ссылка в новой задаче
Block a user