From ddbd194f5f6d7e4a2c13e1a28d6e746a61b8503f Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 16 Aug 2022 11:32:49 +0100 Subject: [PATCH 1/2] Fix soft crash around room view store metrics --- src/stores/RoomViewStore.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/stores/RoomViewStore.tsx b/src/stores/RoomViewStore.tsx index ea2b7e93ad2..a31e9e99caa 100644 --- a/src/stores/RoomViewStore.tsx +++ b/src/stores/RoomViewStore.tsx @@ -209,10 +209,9 @@ export class RoomViewStore extends Store { this.setState({ shouldPeek: false }); } - const cli = MatrixClientPeg.get(); + const updateMetrics = (room: Room) => { + if (room.roomId !== payload.roomId) return; // not the room we're interested in - const updateMetrics = () => { - const room = cli.getRoom(payload.roomId); const numMembers = room.getJoinedMemberCount(); const roomSize = numMembers > 1000 ? "MoreThanAThousand" : numMembers > 100 ? "OneHundredAndOneToAThousand" @@ -232,8 +231,10 @@ export class RoomViewStore extends Store { cli.off(ClientEvent.Room, updateMetrics); }; - if (cli.getRoom(payload.roomId)) { - updateMetrics(); + const cli = MatrixClientPeg.get(); + const room = cli.getRoom(payload.roomId); + if (room) { + updateMetrics(room); } else { cli.on(ClientEvent.Room, updateMetrics); } From d9461f87d98561e59040284e3c5c3bb21a17a6aa Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 16 Aug 2022 11:38:53 +0100 Subject: [PATCH 2/2] Use awaitRoomDownSync utility --- src/stores/RoomViewStore.tsx | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/stores/RoomViewStore.tsx b/src/stores/RoomViewStore.tsx index a31e9e99caa..4f0e7d5b13b 100644 --- a/src/stores/RoomViewStore.tsx +++ b/src/stores/RoomViewStore.tsx @@ -24,7 +24,6 @@ import { ViewRoom as ViewRoomEvent } from "@matrix-org/analytics-events/types/ty import { JoinedRoom as JoinedRoomEvent } from "@matrix-org/analytics-events/types/typescript/JoinedRoom"; import { JoinRule } from "matrix-js-sdk/src/@types/partials"; import { Room } from "matrix-js-sdk/src/models/room"; -import { ClientEvent } from "matrix-js-sdk/src/client"; import { MatrixEvent } from "matrix-js-sdk/src/models/event"; import { Optional } from "matrix-events-sdk"; @@ -48,6 +47,7 @@ import { JoinRoomErrorPayload } from "../dispatcher/payloads/JoinRoomErrorPayloa import { ViewRoomErrorPayload } from "../dispatcher/payloads/ViewRoomErrorPayload"; import ErrorDialog from "../components/views/dialogs/ErrorDialog"; import { ActiveRoomChangedPayload } from "../dispatcher/payloads/ActiveRoomChangedPayload"; +import { awaitRoomDownSync } from "../utils/RoomUpgrade"; const NUM_JOIN_RETRY = 5; @@ -209,9 +209,7 @@ export class RoomViewStore extends Store { this.setState({ shouldPeek: false }); } - const updateMetrics = (room: Room) => { - if (room.roomId !== payload.roomId) return; // not the room we're interested in - + awaitRoomDownSync(MatrixClientPeg.get(), payload.roomId).then(room => { const numMembers = room.getJoinedMemberCount(); const roomSize = numMembers > 1000 ? "MoreThanAThousand" : numMembers > 100 ? "OneHundredAndOneToAThousand" @@ -227,17 +225,7 @@ export class RoomViewStore extends Store { isDM: !!DMRoomMap.shared().getUserIdForRoomId(room.roomId), isSpace: room.isSpaceRoom(), }); - - cli.off(ClientEvent.Room, updateMetrics); - }; - - const cli = MatrixClientPeg.get(); - const room = cli.getRoom(payload.roomId); - if (room) { - updateMetrics(room); - } else { - cli.on(ClientEvent.Room, updateMetrics); - } + }); break; }