Push notification & session management cleanup (#92)
* Add some temporary logging to help suss out the session drop issue * Fix to session resumption: copy session tokens during a resumeSession attempt * Factor out notifee display into a lib and add to storybook * Tune the bg notifications fetch to only get what is needed * Fix: run account update inside a mobx action * Remove debugging logs for sessions * Fixes to bg notifications fetch
This commit is contained in:
parent
079e1dbe18
commit
5f18931915
7 changed files with 148 additions and 66 deletions
|
@ -4,6 +4,7 @@ import {RootStoreModel} from './root-store'
|
|||
import {FeedModel} from './feed-view'
|
||||
import {NotificationsViewModel} from './notifications-view'
|
||||
import {isObj, hasProp} from '../lib/type-guards'
|
||||
import {displayNotificationFromModel} from '../../view/lib/notifee'
|
||||
|
||||
export class MeModel {
|
||||
did: string = ''
|
||||
|
@ -125,19 +126,30 @@ export class MeModel {
|
|||
this.notificationCount = res.data.count
|
||||
notifee.setBadgeCount(this.notificationCount)
|
||||
if (newNotifications) {
|
||||
// trigger pre-emptive fetch on new notifications
|
||||
let oldMostRecent = this.notifications.mostRecentNotification
|
||||
this.notifications.refresh().then(() => {
|
||||
// if a new most recent notification is found, trigger a notification card
|
||||
const mostRecent = this.notifications.mostRecentNotification
|
||||
if (mostRecent && oldMostRecent?.uri !== mostRecent?.uri) {
|
||||
const notifeeOpts = mostRecent.toNotifeeOpts()
|
||||
if (notifeeOpts) {
|
||||
notifee.displayNotification(notifeeOpts)
|
||||
}
|
||||
}
|
||||
})
|
||||
this.notifications.refresh()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
async bgFetchNotifications() {
|
||||
const res = await this.rootStore.api.app.bsky.notification.getCount()
|
||||
// NOTE we don't update this.notificationCount to avoid repaints during bg
|
||||
// this means `newNotifications` may not be accurate, so we rely on
|
||||
// `mostRecent` to determine if there really is a new notif to show -prf
|
||||
const newNotifications = this.notificationCount !== res.data.count
|
||||
notifee.setBadgeCount(res.data.count)
|
||||
this.rootStore.log.debug(
|
||||
`Background fetch received unread count = ${res.data.count}`,
|
||||
)
|
||||
if (newNotifications) {
|
||||
this.rootStore.log.debug(
|
||||
'Background fetch detected potentially a new notification',
|
||||
)
|
||||
const mostRecent = await this.notifications.getNewMostRecent()
|
||||
if (mostRecent) {
|
||||
this.rootStore.log.debug('Got the notification, triggering a push')
|
||||
displayNotificationFromModel(mostRecent)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue