From f24c6cce76832ad9eb23765c406c8e15c16d8393 Mon Sep 17 00:00:00 2001 From: Gigiaj Date: Thu, 12 Jun 2025 17:34:29 -0500 Subject: [PATCH] Prevent firefox from crashing because of no badging API --- src/app/hooks/useRoomEventReaders.ts | 6 +++++- src/app/pages/client/ClientNonUIFeatures.tsx | 7 ++++++- src/sw.ts | 6 +++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/app/hooks/useRoomEventReaders.ts b/src/app/hooks/useRoomEventReaders.ts index 6c315f50..ffbb5918 100644 --- a/src/app/hooks/useRoomEventReaders.ts +++ b/src/app/hooks/useRoomEventReaders.ts @@ -48,7 +48,11 @@ export const useRoomEventReaders = (room: Room, eventId?: string): string[] => { room.on(RoomEvent.Receipt, handleReceipt); room.on(RoomEvent.LocalEchoUpdated, handleLocalEcho); - navigator.setAppBadge(unreadInfo.total); + try { + navigator.setAppBadge(unreadInfo.total); + } catch (e) { + // Likely Firefox/Gecko-based and doesn't support badging API + } return () => { room.removeListener(RoomEvent.Receipt, handleReceipt); room.removeListener(RoomEvent.LocalEchoUpdated, handleLocalEcho); diff --git a/src/app/pages/client/ClientNonUIFeatures.tsx b/src/app/pages/client/ClientNonUIFeatures.tsx index 09dda9dd..6b35961a 100644 --- a/src/app/pages/client/ClientNonUIFeatures.tsx +++ b/src/app/pages/client/ClientNonUIFeatures.tsx @@ -212,7 +212,12 @@ function MessageNotifications() { ) { return; } - navigator.setAppBadge(unreadInfo.total); + try { + navigator.setAppBadge(unreadInfo.total); + } catch (e) { + // Likely Firefox/Gecko-based and doesn't support badging API + } + if (showNotifications && notificationPermission('granted')) { const avatarMxc = room.getAvatarFallbackMember()?.getMxcAvatarUrl() ?? room.getMxcAvatarUrl(); diff --git a/src/sw.ts b/src/sw.ts index 3fd25134..96e26c11 100644 --- a/src/sw.ts +++ b/src/sw.ts @@ -127,7 +127,11 @@ const onPushNotification = async (event: PushEvent) => { options.data = { ...options.data, ...pushData.data }; } if (typeof pushData.unread === 'number') { - await self.navigator.setAppBadge(pushData.unread); + try { + self.navigator.setAppBadge(pushData.unread); + } catch (e) { + // Likely Firefox/Gecko-based and doesn't support badging API + } } else { await navigator.clearAppBadge(); }