Merge branch 'develop' into sort-imports

This commit is contained in:
Aaron Raimist
2021-10-27 21:50:56 -05:00
107 changed files with 1722 additions and 1208 deletions
+23 -21
View File
@@ -16,7 +16,6 @@ limitations under the License.
import { Room } from "matrix-js-sdk/src/models/room";
import { EventType } from "matrix-js-sdk/src/@types/event";
import { logger } from "matrix-js-sdk/src/logger";
import { inviteUsersToRoom } from "../RoomInvite";
import Modal, { IHandle } from "../Modal";
@@ -25,6 +24,9 @@ import ErrorDialog from "../components/views/dialogs/ErrorDialog";
import SpaceStore from "../stores/SpaceStore";
import Spinner from "../components/views/elements/Spinner";
import { logger } from "matrix-js-sdk/src/logger";
import { MatrixClient } from "matrix-js-sdk/src/client";
interface IProgress {
roomUpgraded: boolean;
roomSynced?: boolean;
@@ -34,6 +36,23 @@ interface IProgress {
updateSpacesTotal: number;
}
export async function awaitRoomDownSync(cli: MatrixClient, roomId: string): Promise<Room> {
const room = cli.getRoom(roomId);
if (room) return room; // already have the room
return new Promise<Room>(resolve => {
// We have to wait for the js-sdk to give us the room back so
// we can more effectively abuse the MultiInviter behaviour
// which heavily relies on the Room object being available.
const checkForRoomFn = (room: Room) => {
if (room.roomId !== roomId) return;
resolve(room);
cli.off("Room", checkForRoomFn);
};
cli.on("Room", checkForRoomFn);
});
}
export async function upgradeRoom(
room: Room,
targetVersion: string,
@@ -49,7 +68,7 @@ export async function upgradeRoom(
spinnerModal = Modal.createDialog(Spinner, null, "mx_Dialog_spinner");
}
let toInvite: string[];
let toInvite: string[] = [];
if (inviteUsers) {
toInvite = [
...room.getMembersWithMembership("join"),
@@ -57,7 +76,7 @@ export async function upgradeRoom(
].map(m => m.userId).filter(m => m !== cli.getUserId());
}
let parentsToRelink: Room[];
let parentsToRelink: Room[] = [];
if (updateSpaces) {
parentsToRelink = Array.from(SpaceStore.instance.getKnownParents(room.roomId))
.map(roomId => cli.getRoom(roomId))
@@ -92,24 +111,7 @@ export async function upgradeRoom(
progressCallback?.(progress);
if (awaitRoom || inviteUsers) {
await new Promise<void>(resolve => {
// already have the room
if (room.client.getRoom(newRoomId)) {
resolve();
return;
}
// We have to wait for the js-sdk to give us the room back so
// we can more effectively abuse the MultiInviter behaviour
// which heavily relies on the Room object being available.
const checkForRoomFn = (newRoom: Room) => {
if (newRoom.roomId !== newRoomId) return;
resolve();
cli.off("Room", checkForRoomFn);
};
cli.on("Room", checkForRoomFn);
});
await awaitRoomDownSync(room.client, newRoomId);
progress.roomSynced = true;
progressCallback?.(progress);
}