diff --git a/CHANGELOG.md b/CHANGELOG.md index b8d6abbf..2dd5a500 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to ### Changed - ✨(frontend) enhance noise reduction with BBBA audio processing pipeline +- 🚸(frontend) mute join notification sound in larger rooms ## [1.20.0] - 2026-06-12 diff --git a/src/backend/meet/settings.py b/src/backend/meet/settings.py index 4f7d696a..9fa2c1a0 100755 --- a/src/backend/meet/settings.py +++ b/src/backend/meet/settings.py @@ -411,6 +411,9 @@ class Base(Configuration): "transcription_destination": values.Value( None, environ_name="FRONTEND_TRANSCRIPTION_DESTINATION", environ_prefix=None ), + "max_participants_for_sound": values.PositiveIntegerValue( + 5, environ_name="FRONTEND_MAX_PARTICIPANTS_FOR_SOUND", environ_prefix=None + ) } # Mail diff --git a/src/frontend/src/api/useConfig.ts b/src/frontend/src/api/useConfig.ts index e7c84e67..1265b59e 100644 --- a/src/frontend/src/api/useConfig.ts +++ b/src/frontend/src/api/useConfig.ts @@ -55,6 +55,7 @@ export interface ApiConfig { default_sources: Source[] } transcription_destination?: string + max_participants_for_sound: number } const fetchConfig = (): Promise => { diff --git a/src/frontend/src/features/notifications/MainNotificationToast.tsx b/src/frontend/src/features/notifications/MainNotificationToast.tsx index 096d70d8..b912de64 100644 --- a/src/frontend/src/features/notifications/MainNotificationToast.tsx +++ b/src/frontend/src/features/notifications/MainNotificationToast.tsx @@ -14,9 +14,11 @@ import { useScreenReaderAnnounce } from '@/hooks/useScreenReaderAnnounce' import { Emoji } from '@/features/reactions/types' import { useReactions } from '@/features/reactions/hooks/useReactions' import { NotificationProvider } from './NotificationProvider' +import { useConfig } from '@/api/useConfig' export const MainNotificationToast = () => { const room = useRoomContext() + const { data } = useConfig() const { triggerNotificationSound } = useNotificationSound() const { t } = useTranslation('notifications') const announce = useScreenReaderAnnounce() @@ -135,12 +137,21 @@ export const MainNotificationToast = () => { } }, [room, handleEmoji]) + const triggerNotificationSoundIfRoomIsSmall = useCallback( + (type: NotificationType) => { + if (!data) return + if (room.numParticipants >= data.max_participants_for_sound) return + triggerNotificationSound(type) + }, + [room, data, triggerNotificationSound] + ) + useEffect(() => { const showJoinNotification = (participant: Participant) => { if (isMobileBrowser()) { return } - triggerNotificationSound(NotificationType.ParticipantJoined) + triggerNotificationSoundIfRoomIsSmall(NotificationType.ParticipantJoined) toastQueue.add( { participant, @@ -155,7 +166,7 @@ export const MainNotificationToast = () => { return () => { room.off(RoomEvent.ParticipantConnected, showJoinNotification) } - }, [room, triggerNotificationSound]) + }, [room, triggerNotificationSoundIfRoomIsSmall]) useEffect(() => { const removeParticipantNotifications = (participant: Participant) => {