diff options
| author | HJ <30-hj@users.noreply.git.pleroma.social> | 2023-12-13 22:20:59 +0000 |
|---|---|---|
| committer | HJ <30-hj@users.noreply.git.pleroma.social> | 2023-12-13 22:20:59 +0000 |
| commit | 2b41c1cfe86cba814aba98da14d70ac1c09f422f (patch) | |
| tree | b90119b33d0d9cbcccc9193809864fe630020bf6 /src/services/desktop_notification_utils | |
| parent | a98e241a815a95a2a7dd073aec8a993719037dcc (diff) | |
| parent | 55ed65331fb5e53374a0be6710896c383e34d120 (diff) | |
Merge branch 'notifications-thru-sw' into 'develop'
Notifications improvements.
See merge request pleroma/pleroma-fe!1873
Diffstat (limited to 'src/services/desktop_notification_utils')
| -rw-r--r-- | src/services/desktop_notification_utils/desktop_notification_utils.js | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/src/services/desktop_notification_utils/desktop_notification_utils.js b/src/services/desktop_notification_utils/desktop_notification_utils.js index b84a1f75..80b8c6e0 100644 --- a/src/services/desktop_notification_utils/desktop_notification_utils.js +++ b/src/services/desktop_notification_utils/desktop_notification_utils.js @@ -1,9 +1,38 @@ +import { + showDesktopNotification as swDesktopNotification, + closeDesktopNotification as swCloseDesktopNotification, + isSWSupported +} from '../sw/sw.js' +const state = { failCreateNotif: false } + export const showDesktopNotification = (rootState, desktopNotificationOpts) => { if (!('Notification' in window && window.Notification.permission === 'granted')) return - if (rootState.statuses.notifications.desktopNotificationSilence) { return } + if (rootState.notifications.desktopNotificationSilence) { return } + + if (isSWSupported()) { + swDesktopNotification(desktopNotificationOpts) + } else if (!state.failCreateNotif) { + try { + const desktopNotification = new window.Notification(desktopNotificationOpts.title, desktopNotificationOpts) + setTimeout(desktopNotification.close.bind(desktopNotification), 5000) + } catch { + state.failCreateNotif = true + } + } +} + +export const closeDesktopNotification = (rootState, { id }) => { + if (!('Notification' in window && window.Notification.permission === 'granted')) return + + if (isSWSupported()) { + swCloseDesktopNotification({ id }) + } +} + +export const closeAllDesktopNotifications = (rootState) => { + if (!('Notification' in window && window.Notification.permission === 'granted')) return - const desktopNotification = new window.Notification(desktopNotificationOpts.title, desktopNotificationOpts) - // Chrome is known for not closing notifications automatically - // according to MDN, anyway. - setTimeout(desktopNotification.close.bind(desktopNotification), 5000) + if (isSWSupported()) { + swCloseDesktopNotification({}) + } } |
