diff --git a/src/components/settings_modal/tabs/notifications_tab.vue b/src/components/settings_modal/tabs/notifications_tab.vue index dd3806ed..5b3a62a9 100644 --- a/src/components/settings_modal/tabs/notifications_tab.vue +++ b/src/components/settings_modal/tabs/notifications_tab.vue @@ -65,6 +65,14 @@ {{ $t('settings.enable_web_push_notifications') }} </BooleanSetting> </li> + <li> + <BooleanSetting + path="webPushHideIfCW" + expert="1" + > + {{ $t('settings.notification_setting_hide_if_cw') }} + </BooleanSetting> + </li> <li> <BooleanSetting path="serverSide_webPushHideContents" diff --git a/src/i18n/en.json b/src/i18n/en.json index d17310d6..d48c51dd 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -546,6 +546,7 @@ "notification_setting_block_from_strangers": "Block notifications from users who you do not follow", "notification_setting_privacy": "Privacy", "notification_setting_hide_notification_contents": "Hide the sender and contents of push notifications", + "notification_setting_hide_if_cw": "Hide the contents of push notifications if under a Content Warning", "notification_mutes": "To stop receiving notifications from a specific user, use a mute.", "notification_blocks": "Blocking a user stops all notifications as well as unsubscribes them.", "enable_web_push_notifications": "Enable web push notifications", diff --git a/src/modules/config.js b/src/modules/config.js index 3afeeebe..6eeafe78 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -63,6 +63,7 @@ export const defaultState = { polls: true }, webPushNotifications: false, + webPushHideIfCW: true, muteWords: [], highlight: {}, interfaceLanguage: browserLocale, diff --git a/src/services/notification_utils/notification_utils.js b/src/services/notification_utils/notification_utils.js index a221b022..fc5b4d8b 100644 --- a/src/services/notification_utils/notification_utils.js +++ b/src/services/notification_utils/notification_utils.js @@ -58,7 +58,7 @@ export const maybeShowNotification = (store, notification) => { if (!visibleTypes(store).includes(notification.type)) return if (notification.type === 'mention' && isMutedNotification(store, notification)) return - const notificationObject = prepareNotificationObject(notification, store.rootGetters.i18n) + const notificationObject = prepareNotificationObject(notification, store.rootGetters.i18n, store) showDesktopNotification(rootState, notificationObject) } @@ -74,7 +74,7 @@ export const filteredNotificationsFromStore = (store, types) => { export const unseenNotificationsFromStore = store => filter(filteredNotificationsFromStore(store), ({ seen }) => !seen) -export const prepareNotificationObject = (notification, i18n) => { +export const prepareNotificationObject = (notification, i18n, store) => { const notifObj = { tag: notification.id } @@ -109,7 +109,15 @@ export const prepareNotificationObject = (notification, i18n) => { } else if (i18nString) { notifObj.body = i18n.t('notifications.' + i18nString) } else if (isStatusNotification(notification.type)) { - notifObj.body = notification.status.text + if (notification.status.summary) { + if (store.getters.mergedConfig.webPushHideIfCW) { + notifObj.body = notification.status.summary + } else { + notifObj.body = `${notification.status.summary}:\n${notification.status.text}` + } + } else { + notifObj.body = notification.status.text + } } // Shows first attached non-nsfw image, if any. Should add configuration for this somehow...