From 63cd4f79dd76e5d1dc5613c4f75b1fa1605151ad Mon Sep 17 00:00:00 2001 From: Timo K Date: Mon, 1 Dec 2025 17:29:21 +0100 Subject: [PATCH] fix playwright test! (It caught an actual bug!!! so the right wording would be: fix implementation thanks to the playwright test! --- src/state/CallViewModel/CallViewModel.ts | 7 +++---- .../CallViewModel/localMember/LocalMembership.ts | 13 ++++++++++--- src/state/CallViewModel/remoteMembers/Connection.ts | 11 ++++++++--- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/state/CallViewModel/CallViewModel.ts b/src/state/CallViewModel/CallViewModel.ts index e48dd8c4..cb933995 100644 --- a/src/state/CallViewModel/CallViewModel.ts +++ b/src/state/CallViewModel/CallViewModel.ts @@ -584,7 +584,6 @@ export function createCallViewModel$( // in a split-brained state. // DISCUSSION own membership manager ALSO this probably can be simplifis const reconnecting$ = localMembership.reconnecting$; - const pretendToBeDisconnected$ = reconnecting$; const audioParticipants$ = scope.behavior( matrixLivekitMembers$.pipe( @@ -633,7 +632,7 @@ export function createCallViewModel$( ); const handsRaised$ = scope.behavior( - handsRaisedSubject$.pipe(pauseWhen(pretendToBeDisconnected$)), + handsRaisedSubject$.pipe(pauseWhen(reconnecting$)), ); const reactions$ = scope.behavior( @@ -646,7 +645,7 @@ export function createCallViewModel$( ]), ), ), - pauseWhen(pretendToBeDisconnected$), + pauseWhen(reconnecting$), ), ); @@ -737,7 +736,7 @@ export function createCallViewModel$( livekitRoom$, focusUrl$, mediaDevices, - pretendToBeDisconnected$, + reconnecting$, displayName$, matrixMemberMetadataStore.createAvatarUrlBehavior$(userId), handsRaised$.pipe(map((v) => v[participantId]?.time ?? null)), diff --git a/src/state/CallViewModel/localMember/LocalMembership.ts b/src/state/CallViewModel/localMember/LocalMembership.ts index 3e9cd0cf..21d9c3f9 100644 --- a/src/state/CallViewModel/localMember/LocalMembership.ts +++ b/src/state/CallViewModel/localMember/LocalMembership.ts @@ -234,19 +234,26 @@ export const createLocalMembership$ = ({ // */ const connected$ = scope.behavior( and$( - homeserverConnected$, + homeserverConnected$.pipe( + tap((v) => logger.info("matrix: Connected state changed", v)), + ), localConnectionState$.pipe( switchMap((state) => { + logger.info("livekit: Connected state changed", state); if (!state) return of(false); if (state.state === "ConnectedToLkRoom") { - state.livekitConnectionState$.pipe( + logger.info( + "livekit: Connected state changed (inner livekitConnectionState$)", + state.livekitConnectionState$.value, + ); + return state.livekitConnectionState$.pipe( map((lkState) => lkState === ConnectionState.Connected), ); } return of(false); }), ), - ), + ).pipe(tap((v) => logger.info("combined: Connected state changed", v))), ); // MATRIX RELATED diff --git a/src/state/CallViewModel/remoteMembers/Connection.ts b/src/state/CallViewModel/remoteMembers/Connection.ts index afa519fb..4f3bbda4 100644 --- a/src/state/CallViewModel/remoteMembers/Connection.ts +++ b/src/state/CallViewModel/remoteMembers/Connection.ts @@ -19,7 +19,7 @@ import { RoomEvent, } from "livekit-client"; import { type LivekitTransport } from "matrix-js-sdk/lib/matrixrtc"; -import { BehaviorSubject, map, type Observable } from "rxjs"; +import { BehaviorSubject, map } from "rxjs"; import { type Logger } from "matrix-js-sdk/lib/logger"; import { @@ -54,7 +54,7 @@ export type ConnectionState = | { state: "ConnectingToLkRoom" } | { state: "ConnectedToLkRoom"; - livekitConnectionState$: Observable; + livekitConnectionState$: Behavior; } | { state: "FailedToStart"; error: Error } | { state: "Stopped" }; @@ -82,6 +82,8 @@ export class Connection { public readonly livekitRoom: LivekitRoom; + private scope: ObservableScope; + /** * An observable of the participants that are publishing on this connection. (Excluding our local participant) * This is derived from `participantsIncludingSubscribers$` and `remoteTransports$`. @@ -154,7 +156,9 @@ export class Connection { this._state$.next({ state: "ConnectedToLkRoom", - livekitConnectionState$: connectionStateObserver(this.livekitRoom), + livekitConnectionState$: this.scope.behavior( + connectionStateObserver(this.livekitRoom), + ), }); } catch (error) { this.logger.debug(`Failed to connect to LiveKit room: ${error}`); @@ -209,6 +213,7 @@ export class Connection { ); const { transport, client, scope } = opts; + this.scope = scope; this.livekitRoom = opts.livekitRoomFactory(); this.transport = transport; this.client = client;