first commit
Этот коммит содержится в:
357
web/react/utils/async_client.jsx
Обычный файл
357
web/react/utils/async_client.jsx
Обычный файл
@@ -0,0 +1,357 @@
|
||||
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
|
||||
// See License.txt for license information.
|
||||
|
||||
var client = require('./client.jsx');
|
||||
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
|
||||
var ChannelStore = require('../stores/channel_store.jsx');
|
||||
var PostStore = require('../stores/post_store.jsx');
|
||||
var UserStore = require('../stores/user_store.jsx');
|
||||
var utils = require('./utils.jsx');
|
||||
|
||||
var Constants = require('./constants.jsx');
|
||||
var ActionTypes = Constants.ActionTypes;
|
||||
|
||||
// Used to track in progress async calls
|
||||
var callTracker = {};
|
||||
|
||||
var dispatchError = function(err, method) {
|
||||
AppDispatcher.handleServerAction({
|
||||
type: ActionTypes.RECIEVED_ERROR,
|
||||
err: err,
|
||||
method: method
|
||||
});
|
||||
};
|
||||
|
||||
var isCallInProgress = function(callName) {
|
||||
if (!(callName in callTracker)) return false;
|
||||
|
||||
if (callTracker[callName] === 0) return false;
|
||||
|
||||
if (utils.getTimestamp() - callTracker[callName] > 5000) {
|
||||
console.log("AsyncClient call " + callName + " expired after more than 5 seconds");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
module.exports.dispatchError = dispatchError;
|
||||
|
||||
module.exports.getChannels = function(force, updateLastViewed, checkVersion) {
|
||||
if (isCallInProgress("getChannels")) return;
|
||||
|
||||
if (ChannelStore.getAll().length == 0 || force) {
|
||||
callTracker["getChannels"] = utils.getTimestamp();
|
||||
client.getChannels(
|
||||
function(data, textStatus, xhr) {
|
||||
callTracker["getChannels"] = 0;
|
||||
|
||||
if (updateLastViewed && ChannelStore.getCurrentId() != null) {
|
||||
module.exports.updateLastViewedAt();
|
||||
}
|
||||
|
||||
if (checkVersion) {
|
||||
var serverVersion = xhr.getResponseHeader("X-Version-ID");
|
||||
|
||||
if (UserStore.getLastVersion() == undefined) {
|
||||
UserStore.setLastVersion(serverVersion);
|
||||
}
|
||||
|
||||
if (serverVersion != UserStore.getLastVersion()) {
|
||||
UserStore.setLastVersion(serverVersion);
|
||||
window.location.href = window.location.href;
|
||||
console.log("Detected version update refreshing the page");
|
||||
}
|
||||
}
|
||||
|
||||
if (xhr.status === 304 || !data) return;
|
||||
|
||||
AppDispatcher.handleServerAction({
|
||||
type: ActionTypes.RECIEVED_CHANNELS,
|
||||
channels: data.channels,
|
||||
members: data.members
|
||||
});
|
||||
|
||||
},
|
||||
function(err) {
|
||||
callTracker["getChannels"] = 0;
|
||||
dispatchError(err, "getChannels");
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.updateLastViewedAt = function() {
|
||||
if (isCallInProgress("updateLastViewed")) return;
|
||||
|
||||
if (ChannelStore.getCurrentId() == null) return;
|
||||
|
||||
callTracker["updateLastViewed"] = utils.getTimestamp();
|
||||
client.updateLastViewedAt(
|
||||
ChannelStore.getCurrentId(),
|
||||
function(data) {
|
||||
callTracker["updateLastViewed"] = 0;
|
||||
},
|
||||
function(err) {
|
||||
callTracker["updateLastViewed"] = 0;
|
||||
dispatchError(err, "updateLastViewedAt");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
module.exports.getMoreChannels = function(force) {
|
||||
if (isCallInProgress("getMoreChannels")) return;
|
||||
|
||||
if (ChannelStore.getMoreAll().length == 0 || force) {
|
||||
|
||||
callTracker["getMoreChannels"] = utils.getTimestamp();
|
||||
client.getMoreChannels(
|
||||
function(data, textStatus, xhr) {
|
||||
callTracker["getMoreChannels"] = 0;
|
||||
|
||||
if (xhr.status === 304 || !data) return;
|
||||
|
||||
AppDispatcher.handleServerAction({
|
||||
type: ActionTypes.RECIEVED_MORE_CHANNELS,
|
||||
channels: data.channels,
|
||||
members: data.members
|
||||
});
|
||||
},
|
||||
function(err) {
|
||||
callTracker["getMoreChannels"] = 0;
|
||||
dispatchError(err, "getMoreChannels");
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.getChannelExtraInfo = function(force) {
|
||||
var channelId = ChannelStore.getCurrentId();
|
||||
|
||||
if (channelId != null) {
|
||||
if (isCallInProgress("getChannelExtraInfo_"+channelId)) return;
|
||||
var minMembers = ChannelStore.getCurrent() && ChannelStore.getCurrent().type === 'D' ? 1 : 0;
|
||||
|
||||
if (ChannelStore.getCurrentExtraInfo().members.length <= minMembers || force) {
|
||||
callTracker["getChannelExtraInfo_"+channelId] = utils.getTimestamp();
|
||||
client.getChannelExtraInfo(
|
||||
channelId,
|
||||
function(data, textStatus, xhr) {
|
||||
callTracker["getChannelExtraInfo_"+channelId] = 0;
|
||||
|
||||
if (xhr.status === 304 || !data) return;
|
||||
|
||||
AppDispatcher.handleServerAction({
|
||||
type: ActionTypes.RECIEVED_CHANNEL_EXTRA_INFO,
|
||||
extra_info: data
|
||||
});
|
||||
},
|
||||
function(err) {
|
||||
callTracker["getChannelExtraInfo_"+channelId] = 0;
|
||||
dispatchError(err, "getChannelExtraInfo");
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.getProfiles = function() {
|
||||
if (isCallInProgress("getProfiles")) return;
|
||||
|
||||
callTracker["getProfiles"] = utils.getTimestamp();
|
||||
client.getProfiles(
|
||||
function(data, textStatus, xhr) {
|
||||
callTracker["getProfiles"] = 0;
|
||||
|
||||
if (xhr.status === 304 || !data) return;
|
||||
|
||||
AppDispatcher.handleServerAction({
|
||||
type: ActionTypes.RECIEVED_PROFILES,
|
||||
profiles: data
|
||||
});
|
||||
},
|
||||
function(err) {
|
||||
callTracker["getProfiles"] = 0;
|
||||
dispatchError(err, "getProfiles");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
module.exports.getSessions = function() {
|
||||
if (isCallInProgress("getSessions")) return;
|
||||
|
||||
callTracker["getSessions"] = utils.getTimestamp();
|
||||
client.getSessions(
|
||||
UserStore.getCurrentId(),
|
||||
function(data, textStatus, xhr) {
|
||||
callTracker["getSessions"] = 0;
|
||||
|
||||
if (xhr.status === 304 || !data) return;
|
||||
|
||||
AppDispatcher.handleServerAction({
|
||||
type: ActionTypes.RECIEVED_SESSIONS,
|
||||
sessions: data
|
||||
});
|
||||
},
|
||||
function(err) {
|
||||
callTracker["getSessions"] = 0;
|
||||
dispatchError(err, "getSessions");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
module.exports.getAudits = function() {
|
||||
if (isCallInProgress("getAudits")) return;
|
||||
|
||||
callTracker["getAudits"] = utils.getTimestamp();
|
||||
client.getAudits(
|
||||
UserStore.getCurrentId(),
|
||||
function(data, textStatus, xhr) {
|
||||
callTracker["getAudits"] = 0;
|
||||
|
||||
if (xhr.status === 304 || !data) return;
|
||||
|
||||
AppDispatcher.handleServerAction({
|
||||
type: ActionTypes.RECIEVED_AUDITS,
|
||||
audits: data
|
||||
});
|
||||
},
|
||||
function(err) {
|
||||
callTracker["getAudits"] = 0;
|
||||
dispatchError(err, "getAudits");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
module.exports.findTeams = function(email) {
|
||||
if (isCallInProgress("findTeams_"+email)) return;
|
||||
|
||||
var user = UserStore.getCurrentUser();
|
||||
if (user) {
|
||||
callTracker["findTeams_"+email] = utils.getTimestamp();
|
||||
client.findTeams(
|
||||
user.email,
|
||||
function(data, textStatus, xhr) {
|
||||
callTracker["findTeams_"+email] = 0;
|
||||
|
||||
if (xhr.status === 304 || !data) return;
|
||||
|
||||
AppDispatcher.handleServerAction({
|
||||
type: ActionTypes.RECIEVED_TEAMS,
|
||||
teams: data
|
||||
});
|
||||
},
|
||||
function(err) {
|
||||
callTracker["findTeams_"+email] = 0;
|
||||
dispatchError(err, "findTeams");
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.search = function(terms) {
|
||||
if (isCallInProgress("search_"+String(terms))) return;
|
||||
|
||||
callTracker["search_"+String(terms)] = utils.getTimestamp();
|
||||
client.search(
|
||||
terms,
|
||||
function(data, textStatus, xhr) {
|
||||
callTracker["search_"+String(terms)] = 0;
|
||||
|
||||
if (xhr.status === 304 || !data) return;
|
||||
|
||||
AppDispatcher.handleServerAction({
|
||||
type: ActionTypes.RECIEVED_SEARCH,
|
||||
results: data
|
||||
});
|
||||
},
|
||||
function(err) {
|
||||
callTracker["search_"+String(terms)] = 0;
|
||||
dispatchError(err, "search");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
module.exports.getPosts = function(force, id) {
|
||||
if (PostStore.getCurrentPosts() == null || force) {
|
||||
var channelId = id ? id : ChannelStore.getCurrentId();
|
||||
|
||||
if (isCallInProgress("getPosts_"+channelId)) return;
|
||||
|
||||
var post_list = PostStore.getCurrentPosts();
|
||||
// if we already have more than POST_CHUNK_SIZE posts,
|
||||
// let's get the amount we have but rounded up to next multiple of POST_CHUNK_SIZE,
|
||||
// with a max at 180
|
||||
var numPosts = post_list && post_list.order.length > 0 ? Math.min(180, Constants.POST_CHUNK_SIZE * Math.ceil(post_list.order.length / Constants.POST_CHUNK_SIZE)) : Constants.POST_CHUNK_SIZE;
|
||||
|
||||
if (channelId != null) {
|
||||
callTracker["getPosts_"+channelId] = utils.getTimestamp();
|
||||
client.getPosts(
|
||||
channelId,
|
||||
0,
|
||||
numPosts,
|
||||
function(data, textStatus, xhr) {
|
||||
if (xhr.status === 304 || !data) return;
|
||||
|
||||
AppDispatcher.handleServerAction({
|
||||
type: ActionTypes.RECIEVED_POSTS,
|
||||
id: channelId,
|
||||
post_list: data
|
||||
});
|
||||
|
||||
module.exports.getProfiles();
|
||||
},
|
||||
function(err) {
|
||||
dispatchError(err, "getPosts");
|
||||
},
|
||||
function() {
|
||||
callTracker["getPosts_"+channelId] = 0;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.getMe = function() {
|
||||
if (isCallInProgress("getMe")) return;
|
||||
|
||||
callTracker["getMe"] = utils.getTimestamp();
|
||||
client.getMeSynchronous(
|
||||
function(data, textStatus, xhr) {
|
||||
callTracker["getMe"] = 0;
|
||||
|
||||
if (xhr.status === 304 || !data) return;
|
||||
|
||||
AppDispatcher.handleServerAction({
|
||||
type: ActionTypes.RECIEVED_ME,
|
||||
me: data
|
||||
});
|
||||
},
|
||||
function(err) {
|
||||
callTracker["getMe"] = 0;
|
||||
dispatchError(err, "getMe");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
module.exports.getStatuses = function() {
|
||||
if (isCallInProgress("getStatuses")) return;
|
||||
|
||||
callTracker["getStatuses"] = utils.getTimestamp();
|
||||
client.getStatuses(
|
||||
function(data, textStatus, xhr) {
|
||||
callTracker["getStatuses"] = 0;
|
||||
|
||||
if (xhr.status === 304 || !data) return;
|
||||
|
||||
AppDispatcher.handleServerAction({
|
||||
type: ActionTypes.RECIEVED_STATUSES,
|
||||
statuses: data
|
||||
});
|
||||
},
|
||||
function(err) {
|
||||
callTracker["getStatuses"] = 0;
|
||||
dispatchError(err, "getStatuses");
|
||||
}
|
||||
);
|
||||
}
|
||||
Ссылка в новой задаче
Block a user