Merge pull request #2126 from matrix-org/bwindels/fixllpeek

Fix showing peek preview while LL members are loading
This commit is contained in:
Bruno Windels 2018-08-22 16:11:12 +02:00 committed by GitHub
commit 6967bcb445
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 25 additions and 26 deletions

View file

@ -480,7 +480,7 @@ function getMembershipCount(event, roomId) {
sendError(event, _t('This room is not recognised.')); sendError(event, _t('This room is not recognised.'));
return; return;
} }
const count = room.getJoinedMembers().length; const count = room.getJoinedMemberCount();
sendResponse(event, count); sendResponse(event, count);
} }
@ -497,12 +497,11 @@ function canSendEvent(event, roomId) {
sendError(event, _t('This room is not recognised.')); sendError(event, _t('This room is not recognised.'));
return; return;
} }
const me = client.credentials.userId; if (room.getMyMembership() !== "join") {
const member = room.getMember(me);
if (!member || member.membership !== "join") {
sendError(event, _t('You are not in this room.')); sendError(event, _t('You are not in this room.'));
return; return;
} }
const me = client.credentials.userId;
let canSend = false; let canSend = false;
if (isState) { if (isState) {

View file

@ -72,7 +72,7 @@ ConferenceCall.prototype._getConferenceUserRoom = function() {
for (var i = 0; i < rooms.length; i++) { for (var i = 0; i < rooms.length; i++) {
var confUser = rooms[i].getMember(this.confUserId); var confUser = rooms[i].getMember(this.confUserId);
if (confUser && confUser.membership === "join" && if (confUser && confUser.membership === "join" &&
rooms[i].getJoinedMembers().length === 2) { rooms[i].getJoinedMemberCount() === 2) {
confRoom = rooms[i]; confRoom = rooms[i];
break; break;
} }

View file

@ -280,7 +280,7 @@ module.exports = React.createClass({
const room = cli.getRoom(this.props.roomId); const room = cli.getRoom(this.props.roomId);
let isUserInRoom; let isUserInRoom;
if (room) { if (room) {
const numMembers = room.getJoinedMembers().length; const numMembers = room.getJoinedMemberCount();
membersTitle = _t('%(count)s Members', { count: numMembers }); membersTitle = _t('%(count)s Members', { count: numMembers });
membersBadge = <div title={membersTitle}>{ formatCount(numMembers) }</div>; membersBadge = <div title={membersTitle}>{ formatCount(numMembers) }</div>;
isUserInRoom = room.hasMembershipState(this.context.matrixClient.credentials.userId, 'join'); isUserInRoom = room.hasMembershipState(this.context.matrixClient.credentials.userId, 'join');

View file

@ -363,7 +363,7 @@ module.exports = React.createClass({
// XXX: EVIL HACK to autofocus inviting on empty rooms. // XXX: EVIL HACK to autofocus inviting on empty rooms.
// We use the setTimeout to avoid racing with focus_composer. // We use the setTimeout to avoid racing with focus_composer.
if (this.state.room && if (this.state.room &&
this.state.room.getJoinedMembers().length == 1 && this.state.room.getJoinedMemberCount() == 1 &&
this.state.room.getLiveTimeline() && this.state.room.getLiveTimeline() &&
this.state.room.getLiveTimeline().getEvents() && this.state.room.getLiveTimeline().getEvents() &&
this.state.room.getLiveTimeline().getEvents().length <= 6) { this.state.room.getLiveTimeline().getEvents().length <= 6) {
@ -1507,9 +1507,8 @@ module.exports = React.createClass({
} }
} }
const myUserId = MatrixClientPeg.get().credentials.userId; const myMembership = this.state.room.getMyMembership();
const myMember = this.state.room.getMember(myUserId); if (myMembership == 'invite') {
if (myMember && myMember.membership == 'invite') {
if (this.state.joining || this.state.rejecting) { if (this.state.joining || this.state.rejecting) {
return ( return (
<div className="mx_RoomView"> <div className="mx_RoomView">
@ -1517,6 +1516,8 @@ module.exports = React.createClass({
</div> </div>
); );
} else { } else {
const myUserId = MatrixClientPeg.get().credentials.userId;
const myMember = this.state.room.getMember(myUserId);
const inviteEvent = myMember.events.member; const inviteEvent = myMember.events.member;
var inviterName = inviteEvent.sender ? inviteEvent.sender.name : inviteEvent.getSender(); var inviterName = inviteEvent.sender ? inviteEvent.sender.name : inviteEvent.getSender();
@ -1600,7 +1601,7 @@ module.exports = React.createClass({
} else if (this.state.showingPinned) { } else if (this.state.showingPinned) {
hideCancel = true; // has own cancel hideCancel = true; // has own cancel
aux = <PinnedEventsPanel room={this.state.room} onCancelClick={this.onPinnedClick} />; aux = <PinnedEventsPanel room={this.state.room} onCancelClick={this.onPinnedClick} />;
} else if (!myMember || myMember.membership !== "join") { } else if (myMembership !== "join") {
// We do have a room object for this room, but we're not currently in it. // 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. // We may have a 3rd party invite to it.
var inviterName = undefined; var inviterName = undefined;
@ -1642,7 +1643,7 @@ module.exports = React.createClass({
let messageComposer, searchInfo; let messageComposer, searchInfo;
const canSpeak = ( const canSpeak = (
// joined and not showing search results // joined and not showing search results
myMember && (myMember.membership == 'join') && !this.state.searchResults myMembership == 'join' && !this.state.searchResults
); );
if (canSpeak) { if (canSpeak) {
messageComposer = messageComposer =
@ -1777,15 +1778,15 @@ module.exports = React.createClass({
oobData={this.props.oobData} oobData={this.props.oobData}
editing={this.state.editingRoomSettings} editing={this.state.editingRoomSettings}
saving={this.state.uploadingRoomSettings} saving={this.state.uploadingRoomSettings}
inRoom={myMember && myMember.membership === 'join'} inRoom={myMembership === 'join'}
collapsedRhs={this.props.collapsedRhs} collapsedRhs={this.props.collapsedRhs}
onSearchClick={this.onSearchClick} onSearchClick={this.onSearchClick}
onSettingsClick={this.onSettingsClick} onSettingsClick={this.onSettingsClick}
onPinnedClick={this.onPinnedClick} onPinnedClick={this.onPinnedClick}
onSaveClick={this.onSettingsSaveClick} onSaveClick={this.onSettingsSaveClick}
onCancelClick={(aux && !hideCancel) ? this.onCancelClick : null} onCancelClick={(aux && !hideCancel) ? this.onCancelClick : null}
onForgetClick={(myMember && myMember.membership === "leave") ? this.onForgetClick : null} onForgetClick={(myMembership === "leave") ? this.onForgetClick : null}
onLeaveClick={(myMember && myMember.membership === "join") ? this.onLeaveClick : null} onLeaveClick={(myMembership === "join") ? this.onLeaveClick : null}
/> />
{ auxPanel } { auxPanel }
<div className={fadableSectionClasses}> <div className={fadableSectionClasses}>

View file

@ -346,20 +346,18 @@ module.exports = React.createClass({
}, },
render: function() { render: function() {
const myMember = this.props.room.getMember( const myMembership = this.props.room.getMyMembership();
MatrixClientPeg.get().credentials.userId,
);
// Can't set notif level or tags on non-join rooms // Can't set notif level or tags on non-join rooms
if (myMember.membership !== 'join') { if (myMembership !== 'join') {
return this._renderLeaveMenu(myMember.membership); return this._renderLeaveMenu(myMembership);
} }
return ( return (
<div> <div>
{ this._renderNotifMenu() } { this._renderNotifMenu() }
<hr className="mx_RoomTileContextMenu_separator" /> <hr className="mx_RoomTileContextMenu_separator" />
{ this._renderLeaveMenu(myMember.membership) } { this._renderLeaveMenu(myMembership) }
<hr className="mx_RoomTileContextMenu_separator" /> <hr className="mx_RoomTileContextMenu_separator" />
{ this._renderRoomTagMenu() } { this._renderRoomTagMenu() }
</div> </div>

View file

@ -794,15 +794,15 @@ module.exports = React.createClass({
} }
let leaveButton = null; let leaveButton = null;
const myMember = this.props.room.getMember(myUserId); const myMemberShip = this.props.room.getMyMembership();
if (myMember) { if (myMemberShip) {
if (myMember.membership === "join") { if (myMemberShip === "join") {
leaveButton = ( leaveButton = (
<AccessibleButton className="mx_RoomSettings_leaveButton" onClick={this.onLeaveClick}> <AccessibleButton className="mx_RoomSettings_leaveButton" onClick={this.onLeaveClick}>
{ _t('Leave room') } { _t('Leave room') }
</AccessibleButton> </AccessibleButton>
); );
} else if (myMember.membership === "leave") { } else if (myMemberShip === "leave") {
leaveButton = ( leaveButton = (
<AccessibleButton className="mx_RoomSettings_leaveButton" onClick={this.onForgetClick}> <AccessibleButton className="mx_RoomSettings_leaveButton" onClick={this.onForgetClick}>
{ _t('Forget room') } { _t('Forget room') }

View file

@ -256,6 +256,7 @@ export function mkStubRoom(roomId = null) {
getAccountData: () => null, getAccountData: () => null,
hasMembershipState: () => null, hasMembershipState: () => null,
getVersion: () => '1', getVersion: () => '1',
getMyMembership: () => "join",
currentState: { currentState: {
getStateEvents: sinon.stub(), getStateEvents: sinon.stub(),
mayClientSendStateEvent: sinon.stub().returns(true), mayClientSendStateEvent: sinon.stub().returns(true),