diff options
author | Joram Wilander <jwawilander@gmail.com> | 2016-10-19 14:49:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-19 14:49:25 -0400 |
commit | 365b8b465e8a53ebb2da2bf3aef659ac81a2bc6a (patch) | |
tree | 643b2dd52b478c2c0b049ac28798d870b9dfd397 /webapp/stores/channel_store.jsx | |
parent | 0512bd26ee85473aa47206d5f207a9a506019138 (diff) | |
download | chat-365b8b465e8a53ebb2da2bf3aef659ac81a2bc6a.tar.gz chat-365b8b465e8a53ebb2da2bf3aef659ac81a2bc6a.tar.bz2 chat-365b8b465e8a53ebb2da2bf3aef659ac81a2bc6a.zip |
Merging performance branch into master (#4268)
* improve performance on sendNotifications
* Fix SQL queries
* Remove get direct profiles, not needed anymore
* Add raw data to error details if AppError fails to decode
* men
* Fix decode (#4052)
* Fixing json decode
* Adding unit test
* Initial work for client scaling (#4051)
* Begin adding paging to profiles API
* Added more paging functionality
* Finish hooking up admin console user lists
* Add API for searching users and add searching to all user lists
* Add lazy loading of profiles
* Revert config.json
* Fix unit tests and some style issues
* Add GetProfilesFromList to Go driver and fix web unit test
* Update etag for GetProfiles
* Updating ui for filters and pagination (#4044)
* Updating UI for pagination
* Adjusting margins for filter row
* Adjusting margin for specific modals
* Adding relative padding to system console
* Adjusting responsive view
* Update client user tests
* Minor fixes for direct messages modal (#4056)
* Remove some unneeded initial load calls (#4057)
* UX updates to user lists, added smart counts and bug fixes (#4059)
* Improved getExplicitMentions and unit tests (#4064)
* Refactor getting posts to lazy load profiles correctly (#4062)
* Comment out SetActiveChannel test (#4066)
* Profiler cpu, block, and memory profiler. (#4081)
* Fix TestSetActiveChannel unit test (#4071)
* Fixing build failure caused by dependancies updating (#4076)
* Adding profiler
* Fix admin_team_member_dropdown eslint errors
* Bumping session cache size (#4077)
* Bumping session cache size
* Bumping status cache
* Refactor how the client handles channel members to be large team friendly (#4106)
* Refactor how the client handles channel members to be large team friendly
* Change Id to ChannelId in ChannelStats model
* Updated getChannelMember and getProfilesByIds routes to match proposal
* Performance improvements (#4100)
* Performance improvements
* Fixing re-connect issue
* Fixing error message
* Some other minor perf tweaks
* Some other minor perf tweaks
* Fixing config file
* Fixing buffer size
* Fixing web socket send message
* adding some error logging
* fix getMe to be user required
* Fix websocket event for new user
* Fixing shutting down
* Reverting web socket changes
* Fixing logging lvl
* Adding caching to GetMember
* Adding some logging
* Fixing caching
* Fixing caching invalidate
* Fixing direct message caching
* Fixing caching
* Fixing caching
* Remove GetDirectProfiles from initial load
* Adding logging and fixing websocket client
* Adding back caching from bad merge.
* Explicitly close go driver requests (#4162)
* Refactored how the client handles team members to be more large team friendly (#4159)
* Refactor getProfilesForDirectMessageList API into getAllProfiles API
* Refactored how the client handles team members to be more large team friendly
* Fix js error when receiving a notification
* Fix JS error caused by current user being overwritten with sanitized version (#4165)
* Adding error message to status failure (#4167)
* Fix a few bugs caused by client scaling refactoring (#4170)
* When there is no read replica, don't open a second set of connections to the master database (#4173)
* Adding connection tacking to stats (#4174)
* Reduce DB writes for statuses and other status related changes (#4175)
* Fix bug preventing opening of DM channels from more modal (#4181)
* Fixing socket timing error (#4183)
* Fixing ping/pong handler
* Fixing socket timing error
* Commenting out status broadcasting
* Removing user status changes
* Removing user status changes
* Removing user status changes
* Removing user status changes
* Adding DoPreComputeJson()
* Performance improvements (#4194)
* * Fix System Console Analytics queries
* Add db.SetConnMaxLifetime to 15 minutes
* Add "net/http/pprof" for profiling
* Add FreeOSMemory() to manually release memory on reload config
* Add flag to enable http profiler
* Fix memory leak (#4197)
* Fix memory leak
* removed unneeded nil assignment
* Fixing go routine leak (#4208)
* Merge fixes
* Merge fix
* Refactored statuses to be queried by the client rather than broadcast by the server (#4212)
* Refactored server code to reduce status broadcasts and to allow getting statuses by IDs
* Refactor client code to periodically fetch statuses
* Add store unit test for getting statuses by ids
* Fix status unit test
* Add getStatusesByIds REST API and move the client over to use that instead of the WebSocket
* Adding multiple threads to websocket hub (#4230)
* Adding multiple threads to websocket hub
* Fixing unit tests
* Fixing so websocket connections from the same user end up in the sameā¦ (#4240)
* Fixing so websocket connections from the same user end up in the same list
* Removing old comment
* Refactor user autocomplete to query the server (#4239)
* Add API for autocompleting users
* Converted at mention autocomplete to query server
* Converted user search autocomplete to query server
* Switch autocomplete API naming to use term instead of username
* Split autocomplete API into two, one for channels and for teams
* Fix copy/paste error
* Some final client scaling fixes (#4246)
* Add lazy loading of profiles to integration pages
* Add lazy loading of profiles to emoji page
* Fix JS error when receiving post in select team menu and also clean up channel store
Diffstat (limited to 'webapp/stores/channel_store.jsx')
-rw-r--r-- | webapp/stores/channel_store.jsx | 127 |
1 files changed, 42 insertions, 85 deletions
diff --git a/webapp/stores/channel_store.jsx b/webapp/stores/channel_store.jsx index 1870ad15b..4d3042be7 100644 --- a/webapp/stores/channel_store.jsx +++ b/webapp/stores/channel_store.jsx @@ -12,7 +12,7 @@ const NotificationPrefs = Constants.NotificationPrefs; const CHANGE_EVENT = 'change'; const LEAVE_EVENT = 'leave'; const MORE_CHANGE_EVENT = 'change'; -const EXTRA_INFO_EVENT = 'extra_info'; +const STATS_EVENT = 'stats'; const LAST_VIEVED_EVENT = 'last_viewed'; class ChannelStoreClass extends EventEmitter { @@ -21,41 +21,13 @@ class ChannelStoreClass extends EventEmitter { this.setMaxListeners(15); - this.emitChange = this.emitChange.bind(this); - this.addChangeListener = this.addChangeListener.bind(this); - this.removeChangeListener = this.removeChangeListener.bind(this); - this.emitMoreChange = this.emitMoreChange.bind(this); - this.addMoreChangeListener = this.addMoreChangeListener.bind(this); - this.removeMoreChangeListener = this.removeMoreChangeListener.bind(this); - this.emitExtraInfoChange = this.emitExtraInfoChange.bind(this); - this.addExtraInfoChangeListener = this.addExtraInfoChangeListener.bind(this); - this.removeExtraInfoChangeListener = this.removeExtraInfoChangeListener.bind(this); - this.emitLeave = this.emitLeave.bind(this); - this.addLeaveListener = this.addLeaveListener.bind(this); - this.removeLeaveListener = this.removeLeaveListener.bind(this); - this.emitLastViewed = this.emitLastViewed.bind(this); - this.addLastViewedListener = this.addLastViewedListener.bind(this); - this.removeLastViewedListener = this.removeLastViewedListener.bind(this); - this.findFirstBy = this.findFirstBy.bind(this); - this.get = this.get.bind(this); - this.getMember = this.getMember.bind(this); - this.getByName = this.getByName.bind(this); - this.getByDisplayName = this.getByDisplayName.bind(this); - this.setPostMode = this.setPostMode.bind(this); - this.getPostMode = this.getPostMode.bind(this); - this.setUnreadCount = this.setUnreadCount.bind(this); - this.setUnreadCounts = this.setUnreadCounts.bind(this); - this.getUnreadCount = this.getUnreadCount.bind(this); - this.getUnreadCounts = this.getUnreadCounts.bind(this); - this.getChannelNamesMap = this.getChannelNamesMap.bind(this); - this.currentId = null; this.postMode = this.POST_MODE_CHANNEL; this.channels = []; - this.channelMembers = {}; + this.myChannelMembers = {}; this.moreChannels = {}; this.moreChannels.loading = true; - this.extraInfos = {}; + this.stats = {}; this.unreadCounts = {}; } @@ -91,16 +63,16 @@ class ChannelStoreClass extends EventEmitter { this.removeListener(MORE_CHANGE_EVENT, callback); } - emitExtraInfoChange() { - this.emit(EXTRA_INFO_EVENT); + emitStatsChange() { + this.emit(STATS_EVENT); } - addExtraInfoChangeListener(callback) { - this.on(EXTRA_INFO_EVENT, callback); + addStatsChangeListener(callback) { + this.on(STATS_EVENT, callback); } - removeExtraInfoChangeListener(callback) { - this.removeListener(EXTRA_INFO_EVENT, callback); + removeStatsChangeListener(callback) { + this.removeListener(STATS_EVENT, callback); } emitLeave(id) { this.emit(LEAVE_EVENT, id); @@ -148,8 +120,8 @@ class ChannelStoreClass extends EventEmitter { return this.findFirstBy('id', id); } - getMember(id) { - return this.getAllMembers()[id]; + getMyMember(id) { + return this.getMyMembers()[id]; } getByName(name) { @@ -168,10 +140,6 @@ class ChannelStoreClass extends EventEmitter { return this.getChannels(); } - getAllMembers() { - return this.getChannelMembers(); - } - getMoreAll() { return this.getMoreChannels(); } @@ -181,7 +149,7 @@ class ChannelStoreClass extends EventEmitter { } resetCounts(id) { - const cm = this.channelMembers; + const cm = this.myChannelMembers; for (var cmid in cm) { if (cm[cmid].channel_id === id) { var c = this.get(id); @@ -213,41 +181,34 @@ class ChannelStoreClass extends EventEmitter { var currentId = this.getCurrentId(); if (currentId) { - return this.getAllMembers()[currentId]; + return this.getMyMembers()[currentId]; } return null; } - setChannelMember(member) { - var members = this.getChannelMembers(); - members[member.channel_id] = member; - this.storeChannelMembers(members); - this.emitChange(); + getCurrentStats() { + return this.getStats(this.getCurrentId()); } - getCurrentExtraInfo() { - return this.getExtraInfo(this.getCurrentId()); - } - - getExtraInfo(channelId) { - var extra = null; + getStats(channelId) { + let stats; if (channelId) { - extra = this.getExtraInfos()[channelId]; + stats = this.stats[channelId]; } - if (extra) { + if (stats) { // create a defensive copy - extra = JSON.parse(JSON.stringify(extra)); + stats = Object.assign({}, stats); } else { - extra = {members: []}; + stats = {member_count: 0}; } - return extra; + return stats; } - pStoreChannel(channel) { + storeChannel(channel) { var channels = this.getChannels(); var found; @@ -279,18 +240,18 @@ class ChannelStoreClass extends EventEmitter { return this.channels; } - pStoreChannelMember(channelMember) { - var members = this.getChannelMembers(); + storeMyChannelMember(channelMember) { + const members = Object.assign({}, this.getMyMembers()); members[channelMember.channel_id] = channelMember; - this.storeChannelMembers(members); + this.storeMyChannelMembers(members); } - storeChannelMembers(channelMembers) { - this.channelMembers = channelMembers; + storeMyChannelMembers(channelMembers) { + this.myChannelMembers = channelMembers; } - getChannelMembers() { - return this.channelMembers; + getMyMembers() { + return this.myChannelMembers; } storeMoreChannels(channels) { @@ -301,12 +262,8 @@ class ChannelStoreClass extends EventEmitter { return this.moreChannels; } - storeExtraInfos(extraInfos) { - this.extraInfos = extraInfos; - } - - getExtraInfos() { - return this.extraInfos; + storeStats(stats) { + this.stats = stats; } isDefault(channel) { @@ -323,7 +280,7 @@ class ChannelStoreClass extends EventEmitter { setUnreadCount(id) { const ch = this.get(id); - const chMember = this.getMember(id); + const chMember = this.getMyMember(id); const chMentionCount = chMember.mention_count; let chUnreadCount = ch.total_msg_count - chMember.msg_count; @@ -351,7 +308,7 @@ class ChannelStoreClass extends EventEmitter { } leaveChannel(id) { - Reflect.deleteProperty(this.channelMembers, id); + Reflect.deleteProperty(this.myChannelMembers, id); const element = this.channels.indexOf(id); if (element > -1) { this.channels.splice(element, 1); @@ -405,7 +362,7 @@ ChannelStore.dispatchToken = AppDispatcher.register((payload) => { case ActionTypes.RECEIVED_CHANNELS: ChannelStore.storeChannels(action.channels); - ChannelStore.storeChannelMembers(action.members); + ChannelStore.storeMyChannelMembers(action.members); currentId = ChannelStore.getCurrentId(); if (currentId && window.isActive) { ChannelStore.resetCounts(currentId); @@ -415,9 +372,9 @@ ChannelStore.dispatchToken = AppDispatcher.register((payload) => { break; case ActionTypes.RECEIVED_CHANNEL: - ChannelStore.pStoreChannel(action.channel); + ChannelStore.storeChannel(action.channel); if (action.member) { - ChannelStore.pStoreChannelMember(action.member); + ChannelStore.storeMyChannelMember(action.member); } currentId = ChannelStore.getCurrentId(); if (currentId && window.isActive) { @@ -432,11 +389,11 @@ ChannelStore.dispatchToken = AppDispatcher.register((payload) => { ChannelStore.emitMoreChange(); break; - case ActionTypes.RECEIVED_CHANNEL_EXTRA_INFO: - var extraInfos = ChannelStore.getExtraInfos(); - extraInfos[action.extra_info.id] = action.extra_info; - ChannelStore.storeExtraInfos(extraInfos); - ChannelStore.emitExtraInfoChange(); + case ActionTypes.RECEIVED_CHANNEL_STATS: + var stats = Object.assign({}, ChannelStore.getStats()); + stats[action.stats.channel_id] = action.stats; + ChannelStore.storeStats(stats); + ChannelStore.emitStatsChange(); break; case ActionTypes.LEAVE_CHANNEL: |