♻️(frontend) sync publishing sources with Django backend settings

Replace hardcoded default publishing source constants with values from
Django backend settings to prevent desynchronization between frontend
and backend configurations.
This commit is contained in:
lebaudantoine
2025-08-28 14:24:06 +02:00
committed by aleb_the_flash
parent 57f63bf891
commit 3e69a2380f
3 changed files with 11 additions and 11 deletions

View File

@@ -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)

View File

@@ -44,6 +44,7 @@ export interface ApiConfig {
url: string
force_wss_protocol: boolean
enable_firefox_proxy_workaround: boolean
default_sources: string[]
}
}

View File

@@ -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> = [
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(