refactor: use EnterRTCSessionOptions instead of unnamed bools

This commit is contained in:
Valere
2025-10-13 13:52:01 +02:00
parent c846ea6447
commit 8e6eb70e5b
3 changed files with 51 additions and 13 deletions

View File

@@ -15,6 +15,7 @@ import { mockConfig } from "./utils/test";
import { ElementWidgetActions, widget } from "./widget"; import { ElementWidgetActions, widget } from "./widget";
import { ErrorCode } from "./utils/errors.ts"; import { ErrorCode } from "./utils/errors.ts";
const USE_MUTI_SFU = false;
const getUrlParams = vi.hoisted(() => vi.fn(() => ({}))); const getUrlParams = vi.hoisted(() => vi.fn(() => ({})));
vi.mock("./UrlParams", () => ({ getUrlParams })); vi.mock("./UrlParams", () => ({ getUrlParams }));
@@ -93,7 +94,10 @@ test("It joins the correct Session", async () => {
livekit_service_url: "http://my-well-known-service-url.com", livekit_service_url: "http://my-well-known-service-url.com",
type: "livekit", type: "livekit",
}, },
true, {
encryptMedia: true,
useMultiSfu: USE_MUTI_SFU,
}
); );
expect(mockedSession.joinRoomSession).toHaveBeenLastCalledWith( expect(mockedSession.joinRoomSession).toHaveBeenLastCalledWith(
@@ -123,12 +127,12 @@ test("It joins the correct Session", async () => {
focus_selection: "oldest_membership", focus_selection: "oldest_membership",
type: "livekit", type: "livekit",
}, },
{ expect.objectContaining({
manageMediaKeys: false, manageMediaKeys: false,
useLegacyMemberEvents: false, useLegacyMemberEvents: false,
useNewMembershipManager: true, useNewMembershipManager: true,
useExperimentalToDeviceTransport: false, useExperimentalToDeviceTransport: false,
}, }),
); );
}); });
@@ -197,7 +201,10 @@ test("It fails with configuration error if no live kit url config is set in fall
livekit_service_url: "http://my-well-known-service-url.com", livekit_service_url: "http://my-well-known-service-url.com",
type: "livekit", type: "livekit",
}, },
true, {
encryptMedia: true,
useMultiSfu: USE_MUTI_SFU,
}
), ),
).rejects.toThrowError( ).rejects.toThrowError(
expect.objectContaining({ code: ErrorCode.MISSING_MATRIX_RTC_TRANSPORT }), expect.objectContaining({ code: ErrorCode.MISSING_MATRIX_RTC_TRANSPORT }),
@@ -240,6 +247,9 @@ test("It should not fail with configuration error if homeserver config has livek
livekit_service_url: "http://my-well-known-service-url.com", livekit_service_url: "http://my-well-known-service-url.com",
type: "livekit", type: "livekit",
}, },
true, {
encryptMedia: true,
useMultiSfu: USE_MUTI_SFU,
}
); );
}); });

View File

@@ -97,14 +97,40 @@ export async function makeTransport(
return transport; return transport;
} }
export interface EnterRTCSessionOptions {
encryptMedia: boolean;
// TODO: remove this flag, the new membership manager is stable enough
useNewMembershipManager?: boolean;
// TODO: remove this flag, to-device transport is stable enough now
useExperimentalToDeviceTransport?: boolean;
/** EXPERIMENTAL: If true, will use the multi-sfu codepath where each member connects to its SFU instead of everyone connecting to an elected on. */
useMultiSfu?: boolean;
}
/**
* TODO! document this function properly
* @param rtcSession
* @param transport
* @param options
*/
export async function enterRTCSession( export async function enterRTCSession(
rtcSession: MatrixRTCSession, rtcSession: MatrixRTCSession,
transport: LivekitTransport, transport: LivekitTransport,
encryptMedia: boolean, options: EnterRTCSessionOptions = {
useNewMembershipManager = true, encryptMedia: true,
useExperimentalToDeviceTransport = false, useNewMembershipManager: true,
useMultiSfu = true, useExperimentalToDeviceTransport: false,
useMultiSfu: true,
},
): Promise<void> { ): Promise<void> {
const {
encryptMedia,
useNewMembershipManager = true,
useExperimentalToDeviceTransport = false,
useMultiSfu = true,
} = options;
PosthogAnalytics.instance.eventCallEnded.cacheStartCall(new Date()); PosthogAnalytics.instance.eventCallEnded.cacheStartCall(new Date());
PosthogAnalytics.instance.eventCallStarted.track(rtcSession.room.roomId); PosthogAnalytics.instance.eventCallStarted.track(rtcSession.room.roomId);

View File

@@ -2016,10 +2016,12 @@ export class CallViewModel extends ViewModel {
await enterRTCSession( await enterRTCSession(
this.matrixRTCSession, this.matrixRTCSession,
localTransport.value, localTransport.value,
this.options.encryptionSystem.kind !== E2eeType.NONE, {
true, encryptMedia: this.options.encryptionSystem.kind !== E2eeType.NONE,
true, useExperimentalToDeviceTransport: true,
multiSfu.value$.value, useNewMembershipManager: true,
useMultiSfu: multiSfu.value$.value
}
); );
} catch (e) { } catch (e) {
logger.error("Error entering RTC session", e); logger.error("Error entering RTC session", e);