diff options
Diffstat (limited to 'src/lib/notifee.ts')
-rw-r--r-- | src/lib/notifee.ts | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/src/lib/notifee.ts b/src/lib/notifee.ts deleted file mode 100644 index 485d79aed..000000000 --- a/src/lib/notifee.ts +++ /dev/null @@ -1,82 +0,0 @@ -import notifee, {EventType} from '@notifee/react-native' -import {AppBskyEmbedImages, AtUri} from '@atproto/api' -import {RootStoreModel} from 'state/models/root-store' -import {NotificationsFeedItemModel} from 'state/models/feeds/notifications' -import {enforceLen} from 'lib/strings/helpers' -import {sanitizeDisplayName} from './strings/display-names' -import {resetToTab} from '../Navigation' - -export function init(store: RootStoreModel) { - store.onUnreadNotifications(count => notifee.setBadgeCount(count)) - store.onPushNotification(displayNotificationFromModel) - store.onSessionLoaded(() => { - // request notifications permission once the user has logged in - notifee.requestPermission() - }) - notifee.onForegroundEvent(async ({type}: {type: EventType}) => { - store.log.debug('Notifee foreground event', {type}) - if (type === EventType.PRESS) { - store.log.debug('User pressed a notifee, opening notifications') - resetToTab('NotificationsTab') - } - }) - notifee.onBackgroundEvent(async _e => {}) // notifee requires this but we handle it with onForegroundEvent -} - -export function displayNotification( - title: string, - body?: string, - image?: string, -) { - const opts: {title: string; body?: string; ios?: any} = {title} - if (body) { - opts.body = enforceLen(body, 70, true) - } - if (image) { - opts.ios = { - attachments: [{url: image}], - } - } - return notifee.displayNotification(opts) -} - -export function displayNotificationFromModel( - notification: NotificationsFeedItemModel, -) { - let author = sanitizeDisplayName( - notification.author.displayName || notification.author.handle, - ) - let title: string - let body: string = '' - if (notification.isLike) { - title = `${author} liked your post` - body = notification.additionalPost?.thread?.postRecord?.text || '' - } else if (notification.isRepost) { - title = `${author} reposted your post` - body = notification.additionalPost?.thread?.postRecord?.text || '' - } else if (notification.isMention) { - title = `${author} mentioned you` - body = notification.additionalPost?.thread?.postRecord?.text || '' - } else if (notification.isReply) { - title = `${author} replied to your post` - body = notification.additionalPost?.thread?.postRecord?.text || '' - } else if (notification.isFollow) { - title = 'New follower!' - body = `${author} has followed you` - } else if (notification.isCustomFeedLike) { - title = `${author} liked your custom feed` - body = `${new AtUri(notification.subjectUri).rkey}` - } else { - return - } - let image - if ( - AppBskyEmbedImages.isView( - notification.additionalPost?.thread?.post.embed, - ) && - notification.additionalPost?.thread?.post.embed.images[0]?.thumb - ) { - image = notification.additionalPost.thread.post.embed.images[0].thumb - } - return displayNotification(title, body, image) -} |