forked from AkkomaGang/akkoma-fe
NotificationUtils: Extract preparation of notification object.
This commit is contained in:
parent
4e3ce18703
commit
a52a393266
2 changed files with 45 additions and 38 deletions
|
@ -13,7 +13,7 @@ import {
|
||||||
omitBy
|
omitBy
|
||||||
} from 'lodash'
|
} from 'lodash'
|
||||||
import { set } from 'vue'
|
import { set } from 'vue'
|
||||||
import { isStatusNotification } from '../services/notification_utils/notification_utils.js'
|
import { isStatusNotification, prepareNotificationObject } from '../services/notification_utils/notification_utils.js'
|
||||||
import apiService from '../services/api/api.service.js'
|
import apiService from '../services/api/api.service.js'
|
||||||
import { muteWordHits } from '../services/status_parser/status_parser.js'
|
import { muteWordHits } from '../services/status_parser/status_parser.js'
|
||||||
|
|
||||||
|
@ -344,42 +344,7 @@ const addNewNotifications = (state, { dispatch, notifications, older, visibleNot
|
||||||
state.notifications.idStore[notification.id] = notification
|
state.notifications.idStore[notification.id] = notification
|
||||||
|
|
||||||
if ('Notification' in window && window.Notification.permission === 'granted') {
|
if ('Notification' in window && window.Notification.permission === 'granted') {
|
||||||
const notifObj = {}
|
const notifObj = prepareNotificationObject(notification, rootGetters.i18n)
|
||||||
const status = notification.status
|
|
||||||
const title = notification.from_profile.name
|
|
||||||
notifObj.icon = notification.from_profile.profile_image_url
|
|
||||||
let i18nString
|
|
||||||
switch (notification.type) {
|
|
||||||
case 'like':
|
|
||||||
i18nString = 'favorited_you'
|
|
||||||
break
|
|
||||||
case 'repeat':
|
|
||||||
i18nString = 'repeated_you'
|
|
||||||
break
|
|
||||||
case 'follow':
|
|
||||||
i18nString = 'followed_you'
|
|
||||||
break
|
|
||||||
case 'move':
|
|
||||||
i18nString = 'migrated_to'
|
|
||||||
break
|
|
||||||
case 'follow_request':
|
|
||||||
i18nString = 'follow_request'
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notification.type === 'pleroma:emoji_reaction') {
|
|
||||||
notifObj.body = rootGetters.i18n.t('notifications.reacted_with', [notification.emoji])
|
|
||||||
} else if (i18nString) {
|
|
||||||
notifObj.body = rootGetters.i18n.t('notifications.' + i18nString)
|
|
||||||
} else if (isStatusNotification(notification.type)) {
|
|
||||||
notifObj.body = notification.status.text
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shows first attached non-nsfw image, if any. Should add configuration for this somehow...
|
|
||||||
if (status && status.attachments && status.attachments.length > 0 && !status.nsfw &&
|
|
||||||
status.attachments[0].mimetype.startsWith('image/')) {
|
|
||||||
notifObj.image = status.attachments[0].url
|
|
||||||
}
|
|
||||||
|
|
||||||
const reasonsToMuteNotif = (
|
const reasonsToMuteNotif = (
|
||||||
notification.seen ||
|
notification.seen ||
|
||||||
|
@ -393,7 +358,7 @@ const addNewNotifications = (state, { dispatch, notifications, older, visibleNot
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if (!reasonsToMuteNotif) {
|
if (!reasonsToMuteNotif) {
|
||||||
let desktopNotification = new window.Notification(title, notifObj)
|
let desktopNotification = new window.Notification(notifObj.title, notifObj)
|
||||||
// Chrome is known for not closing notifications automatically
|
// Chrome is known for not closing notifications automatically
|
||||||
// according to MDN, anyway.
|
// according to MDN, anyway.
|
||||||
setTimeout(desktopNotification.close.bind(desktopNotification), 5000)
|
setTimeout(desktopNotification.close.bind(desktopNotification), 5000)
|
||||||
|
|
|
@ -43,3 +43,45 @@ export const filteredNotificationsFromStore = (store, types) => {
|
||||||
|
|
||||||
export const unseenNotificationsFromStore = store =>
|
export const unseenNotificationsFromStore = store =>
|
||||||
filter(filteredNotificationsFromStore(store), ({ seen }) => !seen)
|
filter(filteredNotificationsFromStore(store), ({ seen }) => !seen)
|
||||||
|
|
||||||
|
export const prepareNotificationObject = (notification, i18n) => {
|
||||||
|
const notifObj = {}
|
||||||
|
const status = notification.status
|
||||||
|
const title = notification.from_profile.name
|
||||||
|
notifObj.title = title
|
||||||
|
notifObj.icon = notification.from_profile.profile_image_url
|
||||||
|
let i18nString
|
||||||
|
switch (notification.type) {
|
||||||
|
case 'like':
|
||||||
|
i18nString = 'favorited_you'
|
||||||
|
break
|
||||||
|
case 'repeat':
|
||||||
|
i18nString = 'repeated_you'
|
||||||
|
break
|
||||||
|
case 'follow':
|
||||||
|
i18nString = 'followed_you'
|
||||||
|
break
|
||||||
|
case 'move':
|
||||||
|
i18nString = 'migrated_to'
|
||||||
|
break
|
||||||
|
case 'follow_request':
|
||||||
|
i18nString = 'follow_request'
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if (notification.type === 'pleroma:emoji_reaction') {
|
||||||
|
notifObj.body = i18n.t('notifications.reacted_with', [notification.emoji])
|
||||||
|
} else if (i18nString) {
|
||||||
|
notifObj.body = i18n.t('notifications.' + i18nString)
|
||||||
|
} else if (isStatusNotification(notification.type)) {
|
||||||
|
notifObj.body = notification.status.text
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shows first attached non-nsfw image, if any. Should add configuration for this somehow...
|
||||||
|
if (status && status.attachments && status.attachments.length > 0 && !status.nsfw &&
|
||||||
|
status.attachments[0].mimetype.startsWith('image/')) {
|
||||||
|
notifObj.image = status.attachments[0].url
|
||||||
|
}
|
||||||
|
|
||||||
|
return notifObj
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue