From 3e69a2380f0a1caf28df305ce621c6f151e427c7 Mon Sep 17 00:00:00 2001 From: lebaudantoine Date: Thu, 28 Aug 2025 14:24:06 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F(frontend)=20sync=20publishin?= =?UTF-8?q?g=20sources=20with=20Django=20backend=20settings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace hardcoded default publishing source constants with values from Django backend settings to prevent desynchronization between frontend and backend configurations. --- src/backend/core/api/__init__.py | 1 + src/frontend/src/api/useConfig.ts | 1 + .../livekit/hooks/usePublishSourcesManager.ts | 20 +++++++++---------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/backend/core/api/__init__.py b/src/backend/core/api/__init__.py index 45bfaf6b..cee68ac7 100644 --- a/src/backend/core/api/__init__.py +++ b/src/backend/core/api/__init__.py @@ -55,6 +55,7 @@ def get_frontend_configuration(request): "url": settings.LIVEKIT_CONFIGURATION["url"], "force_wss_protocol": settings.LIVEKIT_FORCE_WSS_PROTOCOL, "enable_firefox_proxy_workaround": settings.LIVEKIT_ENABLE_FIREFOX_PROXY_WORKAROUND, + "default_sources": settings.LIVEKIT_DEFAULT_SOURCES, }, } frontend_configuration.update(settings.FRONTEND_CONFIGURATION) diff --git a/src/frontend/src/api/useConfig.ts b/src/frontend/src/api/useConfig.ts index e64bd02e..d9047c1c 100644 --- a/src/frontend/src/api/useConfig.ts +++ b/src/frontend/src/api/useConfig.ts @@ -44,6 +44,7 @@ export interface ApiConfig { url: string force_wss_protocol: boolean enable_firefox_proxy_workaround: boolean + default_sources: string[] } } diff --git a/src/frontend/src/features/rooms/livekit/hooks/usePublishSourcesManager.ts b/src/frontend/src/features/rooms/livekit/hooks/usePublishSourcesManager.ts index 5fe4b707..e14f70d0 100644 --- a/src/frontend/src/features/rooms/livekit/hooks/usePublishSourcesManager.ts +++ b/src/frontend/src/features/rooms/livekit/hooks/usePublishSourcesManager.ts @@ -2,6 +2,7 @@ import { Track } from 'livekit-client' import { useCallback, useMemo } from 'react' import { queryClient } from '@/api/queryClient' import { keys } from '@/api/queryKeys' +import { useConfig } from '@/api/useConfig' import { usePatchRoom } from '@/features/rooms/api/patchRoom' import { useRemoteParticipants } from '@livekit/components-react' import { useUpdateParticipantsPermissions } from '@/features/rooms/api/updateParticipantsPermissions' @@ -9,14 +10,6 @@ import { useRoomData } from '@/features/rooms/livekit/hooks/useRoomData' import { isSubsetOf } from '@/features/rooms/utils/isSubsetOf' import Source = Track.Source -// todo - synchronisation with backend -export const DEFAULT_PUBLISH_SOURCES: Array = [ - Source.Microphone, - Source.Camera, - Source.ScreenShare, - Source.ScreenShareAudio, -] - export const updatePublishSources = ( currentSources: Source[], sources: Source[], @@ -36,8 +29,13 @@ export const usePublishSourcesManager = () => { const { mutateAsync: patchRoom } = usePatchRoom() const data = useRoomData() + const { data: configData } = useConfig() const configuration = data?.configuration + const defaultSources = configData?.livekit?.default_sources?.map((source) => { + return source as Source + }) + // The name can be misleading—use the slug instead to ensure the correct React Query key is updated. const roomId = data?.slug @@ -51,16 +49,16 @@ export const usePublishSourcesManager = () => { configuration?.can_publish_sources == undefined || !Array.isArray(configuration?.can_publish_sources) ) { - return DEFAULT_PUBLISH_SOURCES + return defaultSources } return configuration.can_publish_sources.map((source) => { return source as Source }) - }, [configuration?.can_publish_sources]) + }, [defaultSources, configuration?.can_publish_sources]) const updateSource = useCallback( async (sources: Source[], enabled: boolean) => { - if (!roomId) return + if (!roomId || currentSources == undefined) return try { const newSources = updatePublishSources(