summaryrefslogtreecommitdiffstats
path: root/webapp/stores
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2017-02-13 09:27:28 -0500
committerCorey Hulen <corey@hulen.com>2017-02-13 09:27:28 -0500
commitff741740eebceb43b1d69b13d97ae7eed2aa32d1 (patch)
tree0f795cea935a72997bf3618ceaf3b0513d5e8096 /webapp/stores
parentfac85b676eafb20b5f70db1805006d64889606ff (diff)
downloadchat-ff741740eebceb43b1d69b13d97ae7eed2aa32d1.tar.gz
chat-ff741740eebceb43b1d69b13d97ae7eed2aa32d1.tar.bz2
chat-ff741740eebceb43b1d69b13d97ae7eed2aa32d1.zip
Increase performance when receiving messages (#5375)
Diffstat (limited to 'webapp/stores')
-rw-r--r--webapp/stores/channel_store.jsx37
-rw-r--r--webapp/stores/team_store.jsx25
2 files changed, 62 insertions, 0 deletions
diff --git a/webapp/stores/channel_store.jsx b/webapp/stores/channel_store.jsx
index 575f68f4c..488e49492 100644
--- a/webapp/stores/channel_store.jsx
+++ b/webapp/stores/channel_store.jsx
@@ -392,6 +392,31 @@ class ChannelStoreClass extends EventEmitter {
return false;
}
+
+ incrementMessages(id) {
+ if (!this.unreadCounts[id]) {
+ return;
+ }
+
+ this.unreadCounts[id].msgs++;
+ this.get(id).total_msg_count++;
+ }
+
+ incrementMentionsIfNeeded(id, msgProps) {
+ let mentions = [];
+ if (msgProps && msgProps.mentions) {
+ mentions = JSON.parse(msgProps.mentions);
+ }
+
+ if (!this.unreadCounts[id]) {
+ return;
+ }
+
+ if (mentions.indexOf(UserStore.getCurrentId()) !== -1) {
+ this.unreadCounts[id].mentions++;
+ this.getMyMember(id).mention_count++;
+ }
+ }
}
var ChannelStore = new ChannelStoreClass();
@@ -469,6 +494,18 @@ ChannelStore.dispatchToken = AppDispatcher.register((payload) => {
ChannelStore.emitStatsChange();
break;
+ case ActionTypes.RECEIVED_POST:
+ var id = action.post.channel_id;
+ var teamId = action.websocketMessageProps ? action.websocketMessageProps.team_id : '';
+
+ // Current team and not current channel or the window is inactive
+ if (TeamStore.getCurrentId() === teamId && (ChannelStore.getCurrentId() !== id || !window.isActive)) {
+ ChannelStore.incrementMessages(id);
+ ChannelStore.incrementMentionsIfNeeded(id, action.websocketMessageProps);
+ ChannelStore.emitChange();
+ }
+ break;
+
default:
break;
}
diff --git a/webapp/stores/team_store.jsx b/webapp/stores/team_store.jsx
index 2752c6b57..e58c79806 100644
--- a/webapp/stores/team_store.jsx
+++ b/webapp/stores/team_store.jsx
@@ -316,6 +316,23 @@ class TeamStoreClass extends EventEmitter {
member.mention_count -= channelMember.mention_count;
}
}
+
+ incrementMessages(id) {
+ const member = this.my_team_members.filter((m) => m.team_id === id)[0];
+ member.msg_count++;
+ }
+
+ incrementMentionsIfNeeded(id, msgProps) {
+ let mentions = [];
+ if (msgProps && msgProps.mentions) {
+ mentions = JSON.parse(msgProps.mentions);
+ }
+
+ if (mentions.indexOf(UserStore.getCurrentId()) !== -1) {
+ const member = this.my_team_members.filter((m) => m.team_id === id)[0];
+ member.mention_count++;
+ }
+ }
}
var TeamStore = new TeamStoreClass();
@@ -370,6 +387,14 @@ TeamStore.dispatchToken = AppDispatcher.register((payload) => {
TeamStore.emitUnreadChange();
}
break;
+ case ActionTypes.RECEIVED_POST:
+ var id = action.websocketMessageProps ? action.websocketMessageProps.team_id : '';
+ if (TeamStore.getCurrentId() !== id && id.length > 0) {
+ TeamStore.incrementMessages(id);
+ TeamStore.incrementMentionsIfNeeded(id, action.websocketMessageProps);
+ TeamStore.emitChange();
+ }
+ break;
default:
}
});