diff --git a/godot/index.html b/godot/index.html index 7d5f96c0..39bcf484 100644 --- a/godot/index.html +++ b/godot/index.html @@ -4,6 +4,7 @@ Godot MatrixRTC Widget + @@ -39,6 +65,7 @@ +
diff --git a/godot/main.ts b/godot/main.ts index ede612cb..c5ee29a8 100644 --- a/godot/main.ts +++ b/godot/main.ts @@ -30,12 +30,14 @@ import { widget, } from "./helper"; import { ElementWidgetActions } from "../src/widget"; +import { type MatrixLivekitMember } from "../src/state/CallViewModel/remoteMembers/MatrixLivekitMembers"; interface MatrixRTCSdk { join: () => LocalMemberConnectionState; /** @throws on leave errors */ leave: () => void; data$: Observable<{ sender: string; data: string }>; + members$: Behavior; sendData?: (data: unknown) => Promise; } export async function createMatrixRTCSdk(): Promise { @@ -143,7 +145,7 @@ export async function createMatrixRTCSdk(): Promise { // create sendData function const sendFn: Behavior<(data: string) => Promise> = scope.behavior( - callViewModel.localmatrixLivekitMembers$.pipe( + callViewModel.localMatrixLivekitMember$.pipe( switchMap((m) => { if (!m) return of((data: string): never => { @@ -223,6 +225,7 @@ export async function createMatrixRTCSdk(): Promise { livekitRoomItemsSub.unsubscribe(); }, data$, + members$: callViewModel.matrixLivekitMembers$, sendData, }; } diff --git a/src/state/CallViewModel/CallViewModel.ts b/src/state/CallViewModel/CallViewModel.ts index a4738f77..86def81e 100644 --- a/src/state/CallViewModel/CallViewModel.ts +++ b/src/state/CallViewModel/CallViewModel.ts @@ -264,7 +264,8 @@ export interface CallViewModel { livekitRoomItems$: Behavior; /** use the layout instead, this is just for the godot export. */ userMedia$: Behavior; - localmatrixLivekitMembers$: Behavior; + matrixLivekitMembers$: Behavior; + localMatrixLivekitMember$: Behavior; /** List of participants raising their hand */ handsRaised$: Behavior>; /** List of reactions. Keys are: membership.membershipId (currently predefined as: `${membershipEvent.userId}:${membershipEvent.deviceId}`)*/ @@ -446,7 +447,7 @@ export function createCallViewModel$( }, ), ), - logger: logger, + logger, }); const { matrixLivekitMembers$ } = createMatrixLivekitMembers$({ @@ -488,6 +489,9 @@ export function createCallViewModel$( mediaDevices, muteStates, trackProcessorState$, + logger.getChild( + "[Publisher " + connection.transport.livekit_service_url + "]", + ), ); }, connectionManager: connectionManager, @@ -515,7 +519,7 @@ export function createCallViewModel$( userId: userId, }; - const localmatrixLivekitMembers$: Behavior = + const localMatrixLivekitMember$: Behavior = scope.behavior( localRtcMembership$.pipe( switchMap((membership) => { @@ -685,7 +689,7 @@ export function createCallViewModel$( */ const userMedia$ = scope.behavior( combineLatest([ - localmatrixLivekitMembers$, + localMatrixLivekitMember$, matrixLivekitMembers$, duplicateTiles.value$, ]).pipe( @@ -1518,7 +1522,16 @@ export function createCallViewModel$( pip$: pip$, layout$: layout$, userMedia$, - localmatrixLivekitMembers$, + localMatrixLivekitMember$, + matrixLivekitMembers$: scope.behavior( + matrixLivekitMembers$.pipe( + // TODO flatten this so its not a obs of obs. + map((members) => members.value), + tap((v) => { + logger.debug("matrixLivekitMembers$ updated (exported)", v); + }), + ), + ), tileStoreGeneration$: tileStoreGeneration$, showSpotlightIndicators$: showSpotlightIndicators$, showSpeakingIndicators$: showSpeakingIndicators$, diff --git a/src/state/CallViewModel/localMember/Publisher.ts b/src/state/CallViewModel/localMember/Publisher.ts index 2508637e..51082f38 100644 --- a/src/state/CallViewModel/localMember/Publisher.ts +++ b/src/state/CallViewModel/localMember/Publisher.ts @@ -58,7 +58,7 @@ export class Publisher { trackerProcessorState$: Behavior, private logger: Logger, ) { - this.logger.info("[PublishConnection] Create LiveKit room"); + this.logger.info("Create LiveKit room"); const { controlledAudioDevices } = getUrlParams(); const room = connection.livekitRoom; @@ -74,9 +74,7 @@ export class Publisher { this.workaroundRestartAudioInputTrackChrome(devices, scope); this.scope.onEnd(() => { - this.logger.info( - "[PublishConnection] Scope ended -> stop publishing all tracks", - ); + this.logger.info("Scope ended -> stop publishing all tracks"); void this.stopPublishing(); }); } diff --git a/src/state/CallViewModel/remoteMembers/ConnectionFactory.ts b/src/state/CallViewModel/remoteMembers/ConnectionFactory.ts index 0fb0b5a7..4d4a23cb 100644 --- a/src/state/CallViewModel/remoteMembers/ConnectionFactory.ts +++ b/src/state/CallViewModel/remoteMembers/ConnectionFactory.ts @@ -13,6 +13,7 @@ import { type BaseKeyProvider, } from "livekit-client"; import { type Logger } from "matrix-js-sdk/lib/logger"; +// imported as inline to support worker when loaded from a cdn (cross domain) import E2EEWorker from "livekit-client/e2ee-worker?worker&inline"; import { type ObservableScope } from "../../ObservableScope.ts";