diff --git a/src/components/structures/RoomDirectory.js b/src/components/structures/RoomDirectory.js index c6aca6189f..1f1d4a8cb2 100644 --- a/src/components/structures/RoomDirectory.js +++ b/src/components/structures/RoomDirectory.js @@ -81,15 +81,15 @@ module.exports = React.createClass({ // }); }, - showRoom: function(roomIdOrAlias) { + showRoom: function(roomId, roomAlias) { // extract the metadata from the publicRooms structure to pass // as out-of-band data to view_room, because we get information // here that we can't get other than by joining the room in some // cases. var room; - if (roomIdOrAlias[0] == '!') { + if (roomId) { for (var i = 0; i < this.state.publicRooms.length; ++i) { - if (this.state.publicRooms[i].room_id == roomIdOrAlias) { + if (this.state.publicRooms[i].room_id == roomId) { room = this.state.publicRooms[i]; break; } @@ -97,14 +97,6 @@ module.exports = React.createClass({ } var oob_data = {}; if (room) { - // pluck the alias out of the room data and use it to join the room, as we cannot - // really join rooms by ID (the HS has no way to get candidate servers). However, - // we still have to do this for room in the public room list that don't have an alias - // since this is currently the only choice. - // (Note we don't just pass the room alias to this function: we still want to be able to - // look up the oob data for which we need the room id). - var alias = room.canonical_alias || (room.aliases ? room.aliases[0] : undefined); - if (alias) roomIdOrAlias = alias; if (MatrixClientPeg.get().isGuest()) { if (!room.world_readable && !room.guest_can_join) { var NeedToRegisterDialog = sdk.getComponent("dialogs.NeedToRegisterDialog"); @@ -124,14 +116,21 @@ module.exports = React.createClass({ }; } - // XXX: this interface needs to change to officially accept room IDs - // or aliases, rather than it happening to work if you pass an alias - // as room_id - dis.dispatch({ - action: 'view_room', - room_id: roomIdOrAlias, + var payload = { oob_data: oob_data, - }); + }; + if (roomAlias) { + payload.action = 'view_room_alias'; + payload.room_alias = roomAlias; + } else { + // It's not really possible to join Matrix rooms by ID because the HS has no way to know + // which servers to start querying. However, there's no other way to join rooms in + // this list without aliases at present. + payload.action = 'view_room'; + payload.room_id = roomId; + } + + dis.dispatch(payload); }, getRows: function(filter) { @@ -177,7 +176,7 @@ module.exports = React.createClass({ topic = linkifyString(sanitizeHtml(topic)); rows.unshift( - +