diff --git a/src/TabCompleteEntries.js b/src/TabCompleteEntries.js index a23050063f..488aaa57a6 100644 --- a/src/TabCompleteEntries.js +++ b/src/TabCompleteEntries.js @@ -113,8 +113,26 @@ class MemberEntry extends Entry { } } -MemberEntry.fromMemberList = function(members) { +MemberEntry.fromMemberList = function(room, members) { + // build up a dict of when, in the history we have cached, + // each member last spoke + const lastSpoke = {}; + const timelineEvents = room.getLiveTimeline().getEvents(); + for (var i = timelineEvents.length - 1; i >= 0; --i) { + const ev = timelineEvents[i]; + lastSpoke[ev.sender.userId] = ev.getTs(); + } + return members.sort(function(a, b) { + const lastSpokeA = lastSpoke[a.userId] || 0; + const lastSpokeB = lastSpoke[b.userId] || 0; + + if (lastSpokeA != lastSpokeB) { + // B - A here because the highest value + // is most recent + return lastSpokeB - lastSpokeA; + } + var userA = a.user; var userB = b.user; if (userA && !userB) { diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index cfd359ea01..64a29f9ffc 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -533,7 +533,7 @@ module.exports = React.createClass({ UserProvider.getInstance().setUserList(members); this.tabComplete.setCompletionList( - MemberEntry.fromMemberList(members).concat( + MemberEntry.fromMemberList(this.state.room, members).concat( CommandEntry.fromCommands(SlashCommands.getCommandList()) ) );