From ca7b88c74297aaf33886c8bb82e14c99e1aa2e14 Mon Sep 17 00:00:00 2001
From: RMidhunSuresh <hi@midhun.dev>
Date: Thu, 19 May 2022 14:56:34 +0530
Subject: [PATCH] Fix race in watchNotificationCount

---
 src/viewmodels/ChatterboxViewModel.ts | 1 +
 src/viewmodels/RootViewModel.ts       | 9 ++++++---
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/viewmodels/ChatterboxViewModel.ts b/src/viewmodels/ChatterboxViewModel.ts
index af2de40..f225dbc 100644
--- a/src/viewmodels/ChatterboxViewModel.ts
+++ b/src/viewmodels/ChatterboxViewModel.ts
@@ -55,6 +55,7 @@ export class ChatterboxViewModel extends ViewModel {
         const roomStatusObservable = await this._session.observeRoomStatus(roomBeingCreated.id);
         await roomStatusObservable.waitFor(status => status === (RoomStatus.BeingCreated | RoomStatus.Replaced)).promise;
         const roomId = roomBeingCreated.roomId;
+        await this.platform.settingsStorage.setString("created-room-id", roomId);
         room = this._session.rooms.get(roomId);
         return room;
     }
diff --git a/src/viewmodels/RootViewModel.ts b/src/viewmodels/RootViewModel.ts
index 43387c8..2ab96c3 100644
--- a/src/viewmodels/RootViewModel.ts
+++ b/src/viewmodels/RootViewModel.ts
@@ -1,4 +1,4 @@
-import { ViewModel, Client, Navigation, createRouter, Platform } from "hydrogen-view-sdk";
+import { ViewModel, Client, Navigation, createRouter, Platform, RoomStatus } from "hydrogen-view-sdk";
 import { IChatterboxConfig } from "../types/IChatterboxConfig";
 import { ChatterboxViewModel } from "./ChatterboxViewModel";
 import "hydrogen-view-sdk/style.css";
@@ -99,8 +99,11 @@ export class RootViewModel extends ViewModel {
         return false;
     }
 
-    private _watchNotificationCount() {
-        const [room] = this._client.session.rooms.values();
+    private async _watchNotificationCount() {
+        const roomId = await this.platform.settingsStorage.getString("created-room-id") ?? this._config.auto_join_room;
+        const observable = await this._client.session.observeRoomStatus(roomId);
+        await observable.waitFor((status) => status === RoomStatus.Joined) .promise;
+        const room = this._client.session.rooms.get(roomId);
         let previousCount = room.notificationCount;
         (window as any).sendNotificationCount(previousCount);
         const subscription = {
-- 
GitLab