From be58e1095e7ce5da5a994f3ae471761cf6c10a38 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Fri, 16 Jun 2017 18:24:07 +0100 Subject: [PATCH] Don't peek when creating a room This causes a race between receiving the room when starting to peek and receiving the room from joining it - https://github.com/vector-im/riot-web/issues/4330, https://github.com/matrix-org/riot-web-rageshakes/issues/196 --- src/components/structures/RoomView.js | 15 ++++++++++----- src/createRoom.js | 1 + src/stores/RoomViewStore.js | 6 ++++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 9306008e71..25500d7739 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -93,6 +93,7 @@ module.exports = React.createClass({ roomId: null, roomLoading: true, peekLoading: false, + shouldPeek: true, // The event to be scrolled to initially initialEventId: null, @@ -168,8 +169,13 @@ module.exports = React.createClass({ initialEventId: RoomViewStore.getInitialEventId(), initialEventPixelOffset: RoomViewStore.getInitialEventPixelOffset(), isInitialEventHighlighted: RoomViewStore.isInitialEventHighlighted(), + shouldPeek: RoomViewStore.shouldPeek(), }; + // finished joining, start waiting for a room and show a spinner. See onRoom. + newState.waitingForRoom = this.state.joining && !newState.joining && + !RoomViewStore.getJoinError(); + // Temporary logging to diagnose https://github.com/vector-im/riot-web/issues/4307 console.log( 'RVS update:', @@ -177,12 +183,11 @@ module.exports = React.createClass({ newState.roomAlias, 'loading?', newState.roomLoading, 'joining?', newState.joining, + 'initial?', initial, + 'waiting?', newState.waitingForRoom, + 'shouldPeek?', newState.shouldPeek, ); - // finished joining, start waiting for a room and show a spinner. See onRoom. - newState.waitingForRoom = this.state.joining && !newState.joining && - !RoomViewStore.getJoinError(); - // NB: This does assume that the roomID will not change for the lifetime of // the RoomView instance if (initial) { @@ -238,7 +243,7 @@ module.exports = React.createClass({ if (!this.state.joining && this.state.roomId) { if (this.props.autoJoin) { this.onJoinButtonClicked(); - } else if (!room) { + } else if (!room && this.state.shouldPeek) { console.log("Attempting to peek into room %s", this.state.roomId); this.setState({ peekLoading: true, diff --git a/src/createRoom.js b/src/createRoom.js index 4d7f5792f3..bf0c0fee1c 100644 --- a/src/createRoom.js +++ b/src/createRoom.js @@ -100,6 +100,7 @@ function createRoom(opts) { dis.dispatch({ action: 'view_room', room_id: roomId, + should_peek: false, }); } return roomId; diff --git a/src/stores/RoomViewStore.js b/src/stores/RoomViewStore.js index ac06d41e81..38f16f945b 100644 --- a/src/stores/RoomViewStore.js +++ b/src/stores/RoomViewStore.js @@ -129,6 +129,8 @@ class RoomViewStore extends Store { isInitialEventHighlighted: payload.highlighted, roomLoading: false, roomLoadError: null, + // should peek by default + shouldPeek: payload.should_peek === undefined ? true : payload.should_peek, }; // If an event ID wasn't specified, default to the one saved for this room @@ -276,6 +278,10 @@ class RoomViewStore extends Store { getJoinError() { return this._state.joinError; } + + shouldPeek() { + return this._state.shouldPeek; + } } let singletonRoomViewStore = null;