use the matrixRtcSdk

This commit is contained in:
Timo K.
2026-10-14 10:23:29 +02:00
committed by Timo
parent 10b34b0218
commit 5f3db07b76
94 changed files with 1664 additions and 12281 deletions
+47 -17
View File
@@ -16,9 +16,8 @@ import {
type Room,
SyncState,
} from "matrix-js-sdk";
import { ConnectionState, type Room as LivekitRoom } from "livekit-client";
import { E2eeType } from "../e2ee/e2eeType";
import { E2eeType } from "@element-hq/matrixrtc-sdk";
import {
type CallViewModel,
createCallViewModel$,
@@ -26,20 +25,22 @@ import {
} from "../state/CallViewModel/CallViewModel";
import {
mockConfig,
mockLivekitRoom,
mockLocalParticipant,
mockMatrixRoom,
mockMatrixRTCClient,
mockMediaDevices,
mockMemberMedia,
mockMuteStates,
MockRTCSession,
mockRTCMember,
testScope,
} from "./test";
import { type MediaDevices } from "../state/MediaDevices";
import { aliceRtcMember, localRtcMember } from "./test-fixtures";
import { type RaisedHandInfo, type ReactionInfo } from "../reactions";
import { constant } from "../state/Behavior";
import { MatrixRTCMode } from "../config/ConfigOptions";
import { constant } from "@element-hq/matrixrtc-sdk";
import { map } from "rxjs";
import { createCallFooterViewModel } from "../components/CallFooterViewModel";
import { createSentCallNotification$ } from "../state/CallViewModel/CallNotificationLifecycle";
import { HeaderStyle } from "../UrlParams";
import { type FooterSnapshot } from "../components/CallFooter";
import { type ViewModel } from "../state/ViewModel";
@@ -159,29 +160,58 @@ export function getBasicCallViewModelEnvironment(
const scope = testScope();
const muteStates = mockMuteStates();
const mediaDevices = mediaDevicesOverride ?? mockMediaDevices({});
// Every membership is a member whose media has arrived
const rtcClient = mockMatrixRTCClient(scope, {
localMember$: scope.behavior(
rtcMemberships$.pipe(
map((memberships) =>
memberships.some((m) => m.userId === localRtcMember.userId)
? mockRTCMember(true, {
membership: localRtcMember,
roomMember: members.find(
(m) => m.userId === localRtcMember.userId,
),
transportUrl: "https://example.com",
media$: constant(mockMemberMedia({ local: true })),
})
: null,
),
),
),
remoteMembers$: scope.behavior(
rtcMemberships$.pipe(
map((memberships) =>
memberships
.filter((m) => m.userId !== localRtcMember.userId)
.map((membership) =>
mockRTCMember(false, {
membership,
roomMember: members.find((m) => m.userId === membership.userId),
transportUrl: "https://example.com",
media$: constant(mockMemberMedia()),
}),
),
),
),
),
});
const vm = createCallViewModel$(
scope,
rtcSession.asMockedSession(),
rtcClient,
matrixRoom,
mediaDevices,
muteStates,
{
encryptionSystem: { kind: E2eeType.PER_PARTICIPANT },
livekitRoomFactory: (): LivekitRoom =>
mockLivekitRoom({
localParticipant: mockLocalParticipant({ identity: "" }),
remoteParticipants: new Map(),
disconnect: async () => Promise.resolve(),
setE2EEEnabled: async () => Promise.resolve(),
}),
connectionState$: constant(ConnectionState.Connected),
matrixRTCMode: MatrixRTCMode.Compatibility,
sentCallNotification$: createSentCallNotification$(
scope,
rtcSession.asMockedSession(),
),
windowSize$: constant({ width: 1000, height: 800 }),
...callViewModelOptions,
},
handRaisedSubject$,
reactionsSubject$,
constant({ processor: undefined, supported: false }),
);
const footerVm = createCallFooterViewModel(
testScope(),