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";