remove "fetching" state again (we have to be able to deal with those

kind of switches!) Optimize to not always fetch the oldest member jwt
(only do so in legacy mode)
This commit is contained in:
Timo K
2026-01-15 18:11:08 +01:00
parent b49411abfa
commit c74accb906

View File

@@ -19,6 +19,7 @@ import {
first, first,
from, from,
map, map,
of,
switchMap, switchMap,
} from "rxjs"; } from "rxjs";
import { logger as rootLogger } from "matrix-js-sdk/lib/logger"; import { logger as rootLogger } from "matrix-js-sdk/lib/logger";
@@ -126,38 +127,41 @@ export const createLocalTransport$ = ({
* The transport over which we should be actively publishing our media. * The transport over which we should be actively publishing our media.
* undefined when not joined. * undefined when not joined.
*/ */
const oldestMemberTransport$ = scope.behavior< const oldestMemberTransport$ =
LocalTransportWithSFUConfig | null | "fetching" scope.behavior<LocalTransportWithSFUConfig | null>(
>( combineLatest([memberships$, useOldestMember$]).pipe(
combineLatest([memberships$]).pipe( map(([memberships, useOldestMember]) => {
map(([memberships]) => { if (!useOldestMember) return null; // No need to do any prefetching if not using oldest member
const oldestMember = memberships.value[0]; const oldestMember = memberships.value[0];
const transport = oldestMember?.getTransport(memberships.value[0]); const transport = oldestMember?.getTransport(oldestMember);
if (!transport) return null; if (!transport) return null;
return transport; return transport;
}), }),
first((t) => t != null && isLivekitTransport(t)), switchMap((transport) => {
switchMap((transport) => { if (transport !== null && isLivekitTransport(transport)) {
// Get the open jwt token to connect to the sfu // Get the open jwt token to connect to the sfu
const computeLocalTransportWithSFUConfig = const computeLocalTransportWithSFUConfig =
async (): Promise<LocalTransportWithSFUConfig> => { async (): Promise<LocalTransportWithSFUConfig> => {
return { // await sleep(1000);
transport, return {
sfuConfig: await getSFUConfigWithOpenID( transport,
client, sfuConfig: await getSFUConfigWithOpenID(
ownMembershipIdentity, client,
transport.livekit_service_url, ownMembershipIdentity,
roomId, transport.livekit_service_url,
{ forceJwtEndpoint: JwtEndpointVersion.Legacy }, roomId,
logger, { forceJwtEndpoint: JwtEndpointVersion.Legacy },
), logger,
}; ),
}; };
return from(computeLocalTransportWithSFUConfig()); };
}), return from(computeLocalTransportWithSFUConfig());
), }
"fetching", return of(null);
); }),
),
null,
);
/** /**
* The transport that we would personally prefer to publish on (if not for the * The transport that we would personally prefer to publish on (if not for the
@@ -202,18 +206,23 @@ export const createLocalTransport$ = ({
oldestMemberTransport$, oldestMemberTransport$,
preferredTransport$, preferredTransport$,
]).pipe( ]).pipe(
map(([useOldestMember, oldestMemberTransport, preferredTransport]) => map(([useOldestMember, oldestMemberTransport, preferredTransport]) => {
useOldestMember return useOldestMember
? oldestMemberTransport === null ? (oldestMemberTransport ?? preferredTransport)
? preferredTransport : preferredTransport;
: oldestMemberTransport === "fetching" }),
? null distinctUntilChanged((t1, t2) => {
: oldestMemberTransport logger.info(
: preferredTransport, "Local Transport Update from:",
), t1?.transport.livekit_service_url,
distinctUntilChanged((t1, t2) => " to ",
areLivekitTransportsEqual(t1?.transport ?? null, t2?.transport ?? null), t2?.transport.livekit_service_url,
), );
return areLivekitTransportsEqual(
t1?.transport ?? null,
t2?.transport ?? null,
);
}),
), ),
); );
}; };