Ensure room is synced with account before sending invites
This commit is contained in:
parent
8d95c012ef
commit
f89bbea3f1
1 changed files with 10 additions and 6 deletions
|
@ -618,13 +618,14 @@ export default class InviteDialog extends React.PureComponent<IInviteDialogProps
|
|||
|
||||
_startDm = async () => {
|
||||
this.setState({busy: true});
|
||||
const client = MatrixClientPeg.get();
|
||||
const targets = this._convertFilter();
|
||||
const targetIds = targets.map(t => t.userId);
|
||||
|
||||
// Check if there is already a DM with these people and reuse it if possible.
|
||||
let existingRoom: Room;
|
||||
if (targetIds.length === 1) {
|
||||
existingRoom = findDMForUser(MatrixClientPeg.get(), targetIds[0]);
|
||||
existingRoom = findDMForUser(client, targetIds[0]);
|
||||
} else {
|
||||
existingRoom = DMRoomMap.shared().getDMRoomForIdentifiers(targetIds);
|
||||
}
|
||||
|
@ -646,7 +647,6 @@ export default class InviteDialog extends React.PureComponent<IInviteDialogProps
|
|||
// If so, enable encryption in the new room.
|
||||
const has3PidMembers = targets.some(t => t instanceof ThreepidMember);
|
||||
if (!has3PidMembers) {
|
||||
const client = MatrixClientPeg.get();
|
||||
const allHaveDeviceKeys = await canEncryptToAllUsers(client, targetIds);
|
||||
if (allHaveDeviceKeys) {
|
||||
createRoomOptions.encryption = true;
|
||||
|
@ -656,9 +656,8 @@ export default class InviteDialog extends React.PureComponent<IInviteDialogProps
|
|||
|
||||
// Check if it's a traditional DM and create the room if required.
|
||||
// TODO: [Canonical DMs] Remove this check and instead just create the multi-person DM
|
||||
|
||||
try {
|
||||
const isSelf = targetIds.length === 1 && targetIds[0] === MatrixClientPeg.get().getUserId();
|
||||
const isSelf = targetIds.length === 1 && targetIds[0] === client.getUserId();
|
||||
if (targetIds.length === 1 && !isSelf) {
|
||||
createRoomOptions.dmUserId = targetIds[0];
|
||||
await createRoom(createRoomOptions);
|
||||
|
@ -666,10 +665,15 @@ export default class InviteDialog extends React.PureComponent<IInviteDialogProps
|
|||
await createRoom(createRoomOptions);
|
||||
} else {
|
||||
const roomId = await createRoom(createRoomOptions);
|
||||
/**
|
||||
* To avoid race condition we want to make sure the room information
|
||||
* is properly synced with the account before sending invites to targets
|
||||
* It can otherwise result in a "Cannot find room" error
|
||||
*/
|
||||
await client.peekInRoom(roomId);
|
||||
const invitesState = await inviteMultipleToRoom(roomId, targetIds);
|
||||
|
||||
const abort = this._shouldAbortAfterInviteError(invitesState);
|
||||
if (abort === false) {
|
||||
if (!this._shouldAbortAfterInviteError(invitesState)) {
|
||||
this.props.onFinished();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue