diff --git a/src/App.tsx b/src/App.tsx index b87f587c..e124b0bd 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -32,6 +32,7 @@ import { type AppViewModel } from "./state/AppViewModel"; import { MediaDevicesContext } from "./MediaDevicesContext"; import { getUrlParams, HeaderStyle } from "./UrlParams"; import { AppBar } from "./AppBar"; +import { LivekitLogLevelSync } from "./LivekitLogLevelSync.tsx"; const SentryRoute = Sentry.withSentryReactRouterV7Routing(Route); @@ -81,6 +82,7 @@ export const App: FC = ({ vm }) => { const content = loaded ? ( + } diff --git a/src/LivekitLogLevelSync.tsx b/src/LivekitLogLevelSync.tsx new file mode 100644 index 00000000..5d3916d2 --- /dev/null +++ b/src/LivekitLogLevelSync.tsx @@ -0,0 +1,22 @@ +/* +Copyright 2026 Element Creations Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE in the repository root for full details. +*/ + +// Syncs the livekit log level with the "Enable extended Livekit logs" developer setting. +import { type FC, useEffect } from "react"; +import { setLogLevel } from "livekit-client"; + +import { useSetting, enableExtendedLivekitLogs } from "./settings/settings.ts"; + +export const LivekitLogLevelSync: FC = () => { + const [extendedLivekitLogs] = useSetting(enableExtendedLivekitLogs); + + useEffect(() => { + setLogLevel(extendedLivekitLogs ? "trace" : "info"); + }, [extendedLivekitLogs]); + + return <>; +}; diff --git a/src/settings/DeveloperSettingsTab.tsx b/src/settings/DeveloperSettingsTab.tsx index 9df6181f..0db5e2ef 100644 --- a/src/settings/DeveloperSettingsTab.tsx +++ b/src/settings/DeveloperSettingsTab.tsx @@ -43,6 +43,7 @@ import { matrixRTCMode as matrixRTCModeSetting, customLivekitUrl as customLivekitUrlSetting, MatrixRTCMode, + enableExtendedLivekitLogs as enableExtendedLivekitLogsSetting, } from "./settings"; import styles from "./DeveloperSettingsTab.module.css"; import { useUrlParams } from "../UrlParams"; @@ -101,6 +102,10 @@ export const DeveloperSettingsTab: FC = ({ alwaysShowIphoneEarpieceSetting, ); + const [enableExtendedLivekitLogs, setEnableExtendedLivekitLogs] = useSetting( + enableExtendedLivekitLogsSetting, + ); + const [customLivekitUrlUpdateError, setCustomLivekitUrlUpdateError] = useState(null); const [customLivekitUrl, setCustomLivekitUrl] = useSetting( @@ -227,6 +232,20 @@ export const DeveloperSettingsTab: FC = ({ )} />{" "} + + ): void => { + setEnableExtendedLivekitLogs(event.target.checked); + }, + [setEnableExtendedLivekitLogs], + )} + />{" "} + e.preventDefault()} helpLabel={ diff --git a/src/settings/settings.ts b/src/settings/settings.ts index 917c79f1..cf0d9d66 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -129,6 +129,11 @@ export const alwaysShowIphoneEarpiece = new Setting( false, ); +export const enableExtendedLivekitLogs = new Setting( + "extended-livekit-logs", + false, +); + export enum MatrixRTCMode { Legacy = "legacy", Compatibility = "compatibility",