Manually merge memberlist fix from vector master
							parent
							
								
									4472f63b5f
								
							
						
					
					
						commit
						3be50e327d
					
				|  | @ -44,6 +44,8 @@ module.exports = { | |||
| 
 | ||||
|     componentDidMount: function() { | ||||
|         var self = this; | ||||
| 
 | ||||
|         // Lazy-load in more than the first N members
 | ||||
|         setTimeout(function() { | ||||
|             if (!self.isMounted()) return; | ||||
|             self.setState({ | ||||
|  | @ -55,13 +57,23 @@ module.exports = { | |||
|         // member tile and re-render it. This is more efficient than every tile
 | ||||
|         // evar attaching their own listener.
 | ||||
|         function updateUserState(event, user) { | ||||
|             // evil hack to track the age of this presence info.
 | ||||
|             // this should be removed once syjs-28 is resolved in the JS SDK itself.
 | ||||
|             user.lastPresenceTs = Date.now(); | ||||
| 
 | ||||
|             var tile = self.refs[user.userId]; | ||||
| 
 | ||||
|             console.log("presence event " + JSON.stringify(event) + " user = " + user + " tile = " + tile); | ||||
| 
 | ||||
|             if (tile) { | ||||
|                 // update the whole list to get the order right, not just this cell...
 | ||||
|                 self.forceUpdate(); | ||||
|                 // tile.forceUpdate();
 | ||||
|                 self._updateList(); // reorder the membership list
 | ||||
|                 self.forceUpdate(); // FIXME: is the a more efficient way of reordering with react?
 | ||||
|                 // XXX: do we even need to do this, or is it done by the main list?
 | ||||
|                 tile.forceUpdate(); | ||||
|             } | ||||
|         } | ||||
|         // FIXME: we should probably also reset 'lastActiveAgo' to zero whenever
 | ||||
|         // we see a typing notif from a user, as we don't get presence updates for those.
 | ||||
|         MatrixClientPeg.get().on("User.presence", updateUserState); | ||||
|         this.userPresenceFn = updateUserState; | ||||
|     }, | ||||
|  | @ -133,17 +145,23 @@ module.exports = { | |||
|         var all_members = room.currentState.members; | ||||
|         var all_user_ids = Object.keys(all_members); | ||||
| 
 | ||||
|         // XXX: dirty hack until SYJS-28 is fixed
 | ||||
|         all_user_ids.map(function(userId) { | ||||
|             if (all_members[userId].user && !all_members[userId].user.lastPresenceTs) { | ||||
|                 all_members[userId].user.lastPresenceTs = Date.now(); | ||||
|             } | ||||
|         }); | ||||
| 
 | ||||
|         all_user_ids.sort(function(userIdA, userIdB) { | ||||
|             var userA = all_members[userIdA].user; | ||||
|             var userB = all_members[userIdB].user; | ||||
| 
 | ||||
|             var latA = userA ? userA.lastActiveAgo || Number.MAX_VALUE : Number.MAX_VALUE; | ||||
|             var latB = userB ? userB.lastActiveAgo || Number.MAX_VALUE : Number.MAX_VALUE; | ||||
|             var latA = userA ? (userA.lastPresenceTs - (userA.lastActiveAgo || userA.lastPresenceTs)) : 0; | ||||
|             var latB = userB ? (userB.lastPresenceTs - (userB.lastActiveAgo || userB.lastPresenceTs)) : 0; | ||||
| 
 | ||||
|             return latA - latB; | ||||
|             return latB - latA; | ||||
|         }); | ||||
| 
 | ||||
| 
 | ||||
|         var to_display = {}; | ||||
|         var count = 0; | ||||
|         for (var i = 0; i < all_user_ids.length && (limit === undefined || count < limit); ++i) { | ||||
|  | @ -151,6 +169,8 @@ module.exports = { | |||
|             var m = all_members[user_id]; | ||||
| 
 | ||||
|             if (m.membership == 'join' || m.membership == 'invite') { | ||||
|                 // XXX: this is evil, and relies on the fact that Object.keys() iterates
 | ||||
|                 // over the keys of a dict in insertion order (if those keys are strings)
 | ||||
|                 to_display[user_id] = m; | ||||
|                 ++count; | ||||
|             } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 David Baker
						David Baker