diff --git a/src/Rooms.js b/src/Rooms.js index b70aad90a7..cf62f2dda0 100644 --- a/src/Rooms.js +++ b/src/Rooms.js @@ -68,11 +68,11 @@ export function looksLikeDirectMessageRoom(room, me) { // Used to split rooms via tags const tagNames = Object.keys(room.tags); // Used for 1:1 direct chats - const joinedMembers = room.getJoinedMembers(); + const members = room.currentState.getMembers(); // Show 1:1 chats in seperate "Direct Messages" section as long as they haven't // been moved to a different tag section - if (joinedMembers.length === 2 && !tagNames.length) { + if (members.length === 2 && !tagNames.length) { return true; } } diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 91d1918c0f..ae1b0febe8 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -451,6 +451,7 @@ module.exports = React.createClass({ room: room, joining: false, }); + this._onRoomLoaded(room); } }, @@ -520,6 +521,17 @@ module.exports = React.createClass({ // into. var me = MatrixClientPeg.get().credentials.userId; if (this.state.joining && this.state.room.hasMembershipState(me, "join")) { + // Having just joined a room, check to see if it looks like a DM room, and if so, + // mark it as one. This is to work around the fact that some clients don't support + // is_direct. We should remove this once they do. + const me = this.state.room.getMember(MatrixClientPeg.get().credentials.userId); + if (Rooms.looksLikeDirectMessageRoom(this.state.room, me)) { + // XXX: There's not a whole lot we can really do if this fails: at best + // perhaps we could try a couple more times, but since it's a temporary + // compatability workaround, let's not bother. + Rooms.setDMRoom(this.state.room.roomId, me.events.member.getSender()).done(); + } + this.setState({ joining: false }); @@ -679,9 +691,9 @@ module.exports = React.createClass({ if (this.state.room) { const me = this.state.room.getMember(MatrixClientPeg.get().credentials.userId); if (me && me.membership == 'invite') { - // The 'direct' hihnt is there, so declare that this is a DM room for - // whoever invited us. if (me.events.member.getContent().is_direct) { + // The 'direct' hint is there, so declare that this is a DM room for + // whoever invited us. return Rooms.setDMRoom(this.state.room.roomId, me.events.member.getSender()); } }