From 08006d640aa89756fb4777a336dc22b0ffb0faca Mon Sep 17 00:00:00 2001 From: Valere Date: Wed, 8 Apr 2026 11:10:27 +0200 Subject: [PATCH] fix: Ensure to publish on the correct transport --- src/state/CallViewModel/CallViewModel.ts | 25 +++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/state/CallViewModel/CallViewModel.ts b/src/state/CallViewModel/CallViewModel.ts index 6dca08dc..2cb59810 100644 --- a/src/state/CallViewModel/CallViewModel.ts +++ b/src/state/CallViewModel/CallViewModel.ts @@ -120,6 +120,7 @@ import { type LocalMatrixLivekitMember, type RemoteMatrixLivekitMember, type MatrixLivekitMember, + areLivekitTransportsEqual, } from "./remoteMembers/MatrixLivekitMembers.ts"; import { type AutoLeaveReason, @@ -517,6 +518,26 @@ export function createCallViewModel$( ), ); + // Observe the transport we should publish + const publishingTransport$ = localTransport$.pipe( + // observe the active$ transport + switchMap((t) => { + return combineLatest([t.active$, t.advertised$]).pipe( + map(([active, advertised]) => { + if (active?.transport) { + // use the active one (oldest member transport) + return active.transport; + } else { + // There is no active transport, we might just be the first member in the call + // so use the advertised to start + return advertised; + } + }), + ); + }), + distinctUntilChanged(areLivekitTransportsEqual), + ); + const localMembership = createLocalMembership$({ scope, homeserverConnected: createHomeserverConnected$( @@ -546,9 +567,7 @@ export function createCallViewModel$( }, connectionManager, matrixRTCSession, - localTransport$: scope.behavior( - localTransport$.pipe(switchMap((t) => t.advertised$)), - ), + localTransport$: scope.behavior(publishingTransport$), logger: logger.getChild(`[${Date.now()}]`), });