Skip to content

Commit 294e67a

Browse files
authored
Show current SFU and Server Info in developer tab (#3000)
* Show current SFU and Server Info in developer tab * Lint
1 parent 6e3fd10 commit 294e67a

File tree

5 files changed

+48
-4
lines changed

5 files changed

+48
-4
lines changed

locales/en/app.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@
6666
"device_id": "Device ID: {{id}}",
6767
"duplicate_tiles_label": "Number of additional tile copies per participant",
6868
"hostname": "Hostname: {{hostname}}",
69+
"livekit_server_info": "LiveKit Server Info",
70+
"livekit_sfu": "LiveKit SFU: {{url}}",
6971
"matrix_id": "Matrix ID: {{id}}",
7072
"show_connection_stats": "Show connection statistics",
7173
"show_non_member_tiles": "Show tiles for non-member media"

src/room/InCallView.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,7 @@ export const InCallView: FC<InCallViewProps> = ({
679679
onDismiss={closeSettings}
680680
tab={settingsTab}
681681
onTabChange={setSettingsTab}
682+
livekitRoom={livekitRoom}
682683
/>
683684
</>
684685
)}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/*
2+
Copyright 2025 New Vector Ltd.
3+
4+
SPDX-License-Identifier: AGPL-3.0-only
5+
Please see LICENSE in the repository root for full details.
6+
*/
7+
8+
pre {
9+
font-size: var(--font-size-micro);
10+
}

src/settings/DeveloperSettingsTab.tsx

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only
55
Please see LICENSE in the repository root for full details.
66
*/
77

8-
import { type ChangeEvent, type FC, useCallback } from "react";
8+
import { type ChangeEvent, type FC, useCallback, useMemo } from "react";
99
import { useTranslation } from "react-i18next";
1010

1111
import { FieldRow, InputField } from "../input/Input";
@@ -17,12 +17,14 @@ import {
1717
showConnectionStats as showConnectionStatsSetting,
1818
} from "./settings";
1919
import type { MatrixClient } from "matrix-js-sdk/src/client";
20-
20+
import type { Room as LivekitRoom } from "livekit-client";
21+
import styles from "./DeveloperSettingsTab.module.css";
2122
interface Props {
2223
client: MatrixClient;
24+
livekitRoom?: LivekitRoom;
2325
}
2426

25-
export const DeveloperSettingsTab: FC<Props> = ({ client }) => {
27+
export const DeveloperSettingsTab: FC<Props> = ({ client, livekitRoom }) => {
2628
const { t } = useTranslation();
2729
const [duplicateTiles, setDuplicateTiles] = useSetting(duplicateTilesSetting);
2830
const [debugTileLayout, setDebugTileLayout] = useSetting(
@@ -36,6 +38,16 @@ export const DeveloperSettingsTab: FC<Props> = ({ client }) => {
3638
showConnectionStatsSetting,
3739
);
3840

41+
const sfuUrl = useMemo((): URL | null => {
42+
if (livekitRoom?.engine.client.ws?.url) {
43+
// strip the URL params
44+
const url = new URL(livekitRoom.engine.client.ws.url);
45+
url.search = "";
46+
return url;
47+
}
48+
return null;
49+
}, [livekitRoom]);
50+
3951
return (
4052
<>
4153
<p>
@@ -122,6 +134,22 @@ export const DeveloperSettingsTab: FC<Props> = ({ client }) => {
122134
)}
123135
/>
124136
</FieldRow>
137+
{livekitRoom ? (
138+
<>
139+
<p>
140+
{t("developer_mode.livekit_sfu", {
141+
url: sfuUrl?.href || "unknown",
142+
})}
143+
</p>
144+
<p>{t("developer_mode.livekit_server_info")}</p>
145+
<pre className={styles.pre}>
146+
{livekitRoom.serverInfo
147+
? JSON.stringify(livekitRoom.serverInfo, null, 2)
148+
: "undefined"}
149+
{livekitRoom.metadata}
150+
</pre>
151+
</>
152+
) : null}
125153
</>
126154
);
127155
};

src/settings/SettingsModal.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { type FC, useState } from "react";
99
import { useTranslation } from "react-i18next";
1010
import { type MatrixClient } from "matrix-js-sdk/src/matrix";
1111
import { Root as Form } from "@vector-im/compound-web";
12+
import { type Room as LivekitRoom } from "livekit-client";
1213

1314
import { Modal } from "../Modal";
1415
import styles from "./SettingsModal.module.css";
@@ -46,6 +47,7 @@ interface Props {
4647
onTabChange: (tab: SettingsTab) => void;
4748
client: MatrixClient;
4849
roomId?: string;
50+
livekitRoom?: LivekitRoom;
4951
}
5052

5153
export const defaultSettingsTab: SettingsTab = "audio";
@@ -57,6 +59,7 @@ export const SettingsModal: FC<Props> = ({
5759
onTabChange,
5860
client,
5961
roomId,
62+
livekitRoom,
6063
}) => {
6164
const { t } = useTranslation();
6265

@@ -138,7 +141,7 @@ export const SettingsModal: FC<Props> = ({
138141
const developerTab: Tab<SettingsTab> = {
139142
key: "developer",
140143
name: t("settings.developer_tab_title"),
141-
content: <DeveloperSettingsTab client={client} />,
144+
content: <DeveloperSettingsTab client={client} livekitRoom={livekitRoom} />,
142145
};
143146

144147
const tabs = [audioTab, videoTab];

0 commit comments

Comments
 (0)