diff --git a/src/ScalarMessaging.js b/src/ScalarMessaging.js index fa7b8c5b76..3325044b84 100644 --- a/src/ScalarMessaging.js +++ b/src/ScalarMessaging.js @@ -480,7 +480,7 @@ function getMembershipCount(event, roomId) { sendError(event, _t('This room is not recognised.')); return; } - const count = room.getJoinedMemberCount(); + const count = room.getJoinedMembers().length; sendResponse(event, count); } @@ -497,11 +497,12 @@ function canSendEvent(event, roomId) { sendError(event, _t('This room is not recognised.')); return; } - if (room.getMyMembership() !== "join") { + const me = client.credentials.userId; + const member = room.getMember(me); + if (!member || member.membership !== "join") { sendError(event, _t('You are not in this room.')); return; } - const me = client.credentials.userId; let canSend = false; if (isState) { diff --git a/src/VectorConferenceHandler.js b/src/VectorConferenceHandler.js index c53a01d464..9ba46b2ab6 100644 --- a/src/VectorConferenceHandler.js +++ b/src/VectorConferenceHandler.js @@ -72,7 +72,7 @@ ConferenceCall.prototype._getConferenceUserRoom = function() { for (var i = 0; i < rooms.length; i++) { var confUser = rooms[i].getMember(this.confUserId); if (confUser && confUser.membership === "join" && - rooms[i].getJoinedMemberCount() === 2) { + rooms[i].getJoinedMembers().length === 2) { confRoom = rooms[i]; break; } diff --git a/src/components/structures/RightPanel.js b/src/components/structures/RightPanel.js index bd4ed722cb..18523ceb59 100644 --- a/src/components/structures/RightPanel.js +++ b/src/components/structures/RightPanel.js @@ -280,7 +280,7 @@ module.exports = React.createClass({ const room = cli.getRoom(this.props.roomId); let isUserInRoom; if (room) { - const numMembers = room.getJoinedMemberCount(); + const numMembers = room.getJoinedMembers().length; membersTitle = _t('%(count)s Members', { count: numMembers }); membersBadge =
{ formatCount(numMembers) }
; isUserInRoom = room.hasMembershipState(this.context.matrixClient.credentials.userId, 'join'); diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 7b7a7bb813..855090873f 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -310,7 +310,7 @@ module.exports = React.createClass({ }); } else if (room) { //viewing a previously joined room, try to lazy load members - + // Stop peeking because we have joined this room previously MatrixClientPeg.get().stopPeeking(); this.setState({isPeeking: false}); @@ -363,7 +363,7 @@ module.exports = React.createClass({ // XXX: EVIL HACK to autofocus inviting on empty rooms. // We use the setTimeout to avoid racing with focus_composer. if (this.state.room && - this.state.room.getJoinedMemberCount() == 1 && + this.state.room.getJoinedMembers().length == 1 && this.state.room.getLiveTimeline() && this.state.room.getLiveTimeline().getEvents() && this.state.room.getLiveTimeline().getEvents().length <= 6) { @@ -1507,8 +1507,9 @@ module.exports = React.createClass({ } } - const myMembership = this.state.room.getMyMembership(); - if (myMembership == 'invite') { + const myUserId = MatrixClientPeg.get().credentials.userId; + const myMember = this.state.room.getMember(myUserId); + if (myMember && myMember.membership == 'invite') { if (this.state.joining || this.state.rejecting) { return (
@@ -1516,8 +1517,6 @@ module.exports = React.createClass({
); } else { - const myUserId = MatrixClientPeg.get().credentials.userId; - const myMember = this.state.room.getMember(myUserId); const inviteEvent = myMember.events.member; var inviterName = inviteEvent.sender ? inviteEvent.sender.name : inviteEvent.getSender(); @@ -1601,7 +1600,7 @@ module.exports = React.createClass({ } else if (this.state.showingPinned) { hideCancel = true; // has own cancel aux = ; - } else if (myMembership !== "join") { + } else if (!myMember || myMember.membership !== "join") { // We do have a room object for this room, but we're not currently in it. // We may have a 3rd party invite to it. var inviterName = undefined; @@ -1643,7 +1642,7 @@ module.exports = React.createClass({ let messageComposer, searchInfo; const canSpeak = ( // joined and not showing search results - myMembership == 'join' && !this.state.searchResults + myMember && (myMember.membership == 'join') && !this.state.searchResults ); if (canSpeak) { messageComposer = @@ -1778,15 +1777,15 @@ module.exports = React.createClass({ oobData={this.props.oobData} editing={this.state.editingRoomSettings} saving={this.state.uploadingRoomSettings} - inRoom={myMembership === 'join'} + inRoom={myMember && myMember.membership === 'join'} collapsedRhs={this.props.collapsedRhs} onSearchClick={this.onSearchClick} onSettingsClick={this.onSettingsClick} onPinnedClick={this.onPinnedClick} onSaveClick={this.onSettingsSaveClick} onCancelClick={(aux && !hideCancel) ? this.onCancelClick : null} - onForgetClick={(myMembership === "leave") ? this.onForgetClick : null} - onLeaveClick={(myMembership === "join") ? this.onLeaveClick : null} + onForgetClick={(myMember && myMember.membership === "leave") ? this.onForgetClick : null} + onLeaveClick={(myMember && myMember.membership === "join") ? this.onLeaveClick : null} /> { auxPanel }
diff --git a/src/components/views/context_menus/RoomTileContextMenu.js b/src/components/views/context_menus/RoomTileContextMenu.js index ce9895447e..77f71fa8fa 100644 --- a/src/components/views/context_menus/RoomTileContextMenu.js +++ b/src/components/views/context_menus/RoomTileContextMenu.js @@ -346,18 +346,20 @@ module.exports = React.createClass({ }, render: function() { - const myMembership = this.props.room.getMyMembership(); + const myMember = this.props.room.getMember( + MatrixClientPeg.get().credentials.userId, + ); // Can't set notif level or tags on non-join rooms - if (myMembership !== 'join') { - return this._renderLeaveMenu(myMembership); + if (myMember.membership !== 'join') { + return this._renderLeaveMenu(myMember.membership); } return (
{ this._renderNotifMenu() }
- { this._renderLeaveMenu(myMembership) } + { this._renderLeaveMenu(myMember.membership) }
{ this._renderRoomTagMenu() }
diff --git a/src/components/views/rooms/RoomSettings.js b/src/components/views/rooms/RoomSettings.js index 3b95fa9905..7a78d205b9 100644 --- a/src/components/views/rooms/RoomSettings.js +++ b/src/components/views/rooms/RoomSettings.js @@ -794,15 +794,15 @@ module.exports = React.createClass({ } let leaveButton = null; - const myMemberShip = this.props.room.getMyMembership(); - if (myMemberShip) { - if (myMemberShip === "join") { + const myMember = this.props.room.getMember(myUserId); + if (myMember) { + if (myMember.membership === "join") { leaveButton = ( { _t('Leave room') } ); - } else if (myMemberShip === "leave") { + } else if (myMember.membership === "leave") { leaveButton = ( { _t('Forget room') } diff --git a/test/test-utils.js b/test/test-utils.js index 25df9686ff..975a4df0ee 100644 --- a/test/test-utils.js +++ b/test/test-utils.js @@ -256,7 +256,6 @@ export function mkStubRoom(roomId = null) { getAccountData: () => null, hasMembershipState: () => null, getVersion: () => '1', - getMyMembership: () => "join", currentState: { getStateEvents: sinon.stub(), mayClientSendStateEvent: sinon.stub().returns(true),