From 9728603f72d2b76f90652b697d6bc91e46a585b7 Mon Sep 17 00:00:00 2001 From: lebaudantoine Date: Wed, 13 Aug 2025 12:38:51 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(frontend)=20add=20persistence=20for?= =?UTF-8?q?=20subscribed=20video=20resolution=20preferences?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implement user choice persistence for video resolution settings of subscribed tracks from other participants. Maintains user preferences for received video quality across sessions, allowing consistent bandwidth optimization and viewing experience without reconfiguring subscription settings each visit. --- .../features/rooms/livekit/hooks/usePersistentUserChoices.ts | 4 ++++ src/frontend/src/stores/userChoices.ts | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/frontend/src/features/rooms/livekit/hooks/usePersistentUserChoices.ts b/src/frontend/src/features/rooms/livekit/hooks/usePersistentUserChoices.ts index b9a90153..445b38ee 100644 --- a/src/frontend/src/features/rooms/livekit/hooks/usePersistentUserChoices.ts +++ b/src/frontend/src/features/rooms/livekit/hooks/usePersistentUserChoices.ts @@ -2,6 +2,7 @@ import { useSnapshot } from 'valtio' import { userChoicesStore } from '@/stores/userChoices' import type { VideoResolution } from '@/stores/userChoices' import { ProcessorSerialized } from '@/features/rooms/livekit/components/blur' +import type { VideoQuality } from 'livekit-client' export function usePersistentUserChoices() { const userChoicesSnap = useSnapshot(userChoicesStore) @@ -26,6 +27,9 @@ export function usePersistentUserChoices() { saveVideoPublishResolution: (resolution: VideoResolution) => { userChoicesStore.videoPublishResolution = resolution }, + saveVideoSubscribeQuality: (quality: VideoQuality) => { + userChoicesStore.videoSubscribeQuality = quality + }, saveUsername: (username: string) => { userChoicesStore.username = username }, diff --git a/src/frontend/src/stores/userChoices.ts b/src/frontend/src/stores/userChoices.ts index 56105662..345838cb 100644 --- a/src/frontend/src/stores/userChoices.ts +++ b/src/frontend/src/stores/userChoices.ts @@ -5,6 +5,7 @@ import { saveUserChoices, LocalUserChoices as LocalUserChoicesLK, } from '@livekit/components-core' +import { VideoQuality } from 'livekit-client' export type VideoResolution = 'h720' | 'h360' | 'h180' @@ -13,6 +14,7 @@ export type LocalUserChoices = LocalUserChoicesLK & { noiseReductionEnabled?: boolean audioOutputDeviceId?: string videoPublishResolution?: VideoResolution + videoSubscribeQuality?: VideoQuality } function getUserChoicesState(): LocalUserChoices { @@ -20,6 +22,7 @@ function getUserChoicesState(): LocalUserChoices { noiseReductionEnabled: false, audioOutputDeviceId: 'default', // Use 'default' to match LiveKit's standard device selection behavior videoPublishResolution: 'h720', + videoSubscribeQuality: VideoQuality.HIGH, ...loadUserChoices(), } }