Merge pull request #995 from matrix-org/luke/new-guest-access-fix-wrong-room-shown

Fix to show the correct room
pull/21833/head
David Baker 2017-06-02 09:50:50 +01:00 committed by GitHub
commit d81160d52f
3 changed files with 55 additions and 24 deletions

View File

@ -171,7 +171,7 @@ module.exports = React.createClass({
});
// Start listening for RoomViewStore updates
RoomViewStore.addListener(this._onRoomViewStoreUpdate);
this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate);
this._onRoomViewStoreUpdate(true);
},
@ -182,6 +182,8 @@ module.exports = React.createClass({
this.setState({
roomId: RoomViewStore.getRoomId(),
roomAlias: RoomViewStore.getRoomAlias(),
roomLoading: RoomViewStore.isRoomLoading(),
roomLoadError: RoomViewStore.getRoomLoadError(),
joining: RoomViewStore.isJoining(),
joinError: RoomViewStore.getJoinError(),
}, () => {
@ -343,6 +345,11 @@ module.exports = React.createClass({
document.removeEventListener("keydown", this.onKeyDown);
// Remove RoomStore listener
if (this._roomStoreToken) {
this._roomStoreToken.remove();
}
// cancel any pending calls to the rate_limited_funcs
this._updateRoomMembers.cancelPendingCall();

View File

@ -58,6 +58,9 @@ class RoomViewStore extends Store {
case 'view_room':
this._viewRoom(payload);
break;
case 'view_room_error':
this._viewRoomError(payload);
break;
case 'will_join':
this._setState({
joining: true,
@ -80,33 +83,47 @@ class RoomViewStore extends Store {
}
_viewRoom(payload) {
const address = payload.room_alias || payload.room_id;
if (address[0] == '#') {
// Always set the room ID if present
if (payload.room_id) {
this._setState({
roomLoading: true,
roomId: payload.room_id,
roomLoading: false,
roomLoadError: null,
});
MatrixClientPeg.get().getRoomIdForAlias(address).then(
} else if (payload.room_alias) {
this._setState({
roomId: null,
roomAlias: payload.room_alias,
roomLoading: true,
roomLoadError: null,
});
MatrixClientPeg.get().getRoomIdForAlias(payload.room_alias).done(
(result) => {
this._setState({
roomId: result.room_id,
roomAlias: address,
roomLoading: false,
roomLoadError: null,
dis.dispatch({
action: 'view_room',
room_id: result.room_id,
room_alias: payload.room_alias,
});
}, (err) => {
console.error(err);
this._setState({
roomLoading: false,
roomLoadError: err,
dis.dispatch({
action: 'view_room_error',
room_id: null,
room_alias: payload.room_alias,
err: err,
});
});
} else {
this._setState({
roomId: address,
});
}
}
_viewRoomError(payload) {
this._setState({
roomId: payload.room_id,
roomAlias: payload.room_alias,
roomLoading: false,
roomLoadError: payload.err,
});
}
_joinRoom(payload) {
this._setState({
joining: true,
@ -140,6 +157,10 @@ class RoomViewStore extends Store {
return this._state.roomLoading;
}
getRoomLoadError() {
return this._state.roomLoadError;
}
isJoining() {
return this._state.joining;
}

View File

@ -45,12 +45,15 @@ describe('RoomViewStore', function() {
done();
};
dispatch({ action: 'view_room', room_alias: '#somealias2:aser.ver' });
RoomViewStore.addListener(() => {
// Wait until the room alias has resolved and the room ID is
if (!RoomViewStore.isRoomLoading()) {
expect(RoomViewStore.getRoomId()).toBe("!randomcharacters:aser.ver");
dispatch({ action: 'join_room' });
expect(RoomViewStore.isJoining()).toBe(true);
}
});
// Wait for the next event loop to allow for room alias resolution
setTimeout(() => {
dispatch({ action: 'join_room' });
expect(RoomViewStore.isJoining()).toBe(true);
}, 0);
dispatch({ action: 'view_room', room_alias: '#somealias2:aser.ver' });
});
});