Fix stale Notifications after push (#3507)
This commit is contained in:
parent
14208eef11
commit
835f2e6548
2 changed files with 31 additions and 7 deletions
|
@ -3,24 +3,28 @@
|
|||
*/
|
||||
|
||||
import React from 'react'
|
||||
import {AppState} from 'react-native'
|
||||
import * as Notifications from 'expo-notifications'
|
||||
import {useQueryClient} from '@tanstack/react-query'
|
||||
import EventEmitter from 'eventemitter3'
|
||||
|
||||
import BroadcastChannel from '#/lib/broadcast'
|
||||
import {useSession, getAgent} from '#/state/session'
|
||||
import {useModerationOpts} from '../preferences'
|
||||
import {fetchPage} from './util'
|
||||
import {CachedFeedPage, FeedPage} from './types'
|
||||
import {logger} from '#/logger'
|
||||
import {isNative} from '#/platform/detection'
|
||||
import {useMutedThreads} from '#/state/muted-threads'
|
||||
import {RQKEY as RQKEY_NOTIFS} from './feed'
|
||||
import {logger} from '#/logger'
|
||||
import {getAgent, useSession} from '#/state/session'
|
||||
import {useModerationOpts} from '../preferences'
|
||||
import {truncateAndInvalidate} from '../util'
|
||||
import {AppState} from 'react-native'
|
||||
import {RQKEY as RQKEY_NOTIFS} from './feed'
|
||||
import {CachedFeedPage, FeedPage} from './types'
|
||||
import {fetchPage} from './util'
|
||||
|
||||
const UPDATE_INTERVAL = 30 * 1e3 // 30sec
|
||||
|
||||
const broadcast = new BroadcastChannel('NOTIFS_BROADCAST_CHANNEL')
|
||||
|
||||
const emitter = new EventEmitter()
|
||||
|
||||
type StateContext = string
|
||||
|
||||
interface ApiContext {
|
||||
|
@ -56,6 +60,18 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
|
|||
unreadCount: 0,
|
||||
})
|
||||
|
||||
React.useEffect(() => {
|
||||
function markAsUnusable() {
|
||||
if (cacheRef.current) {
|
||||
cacheRef.current.usableInFeed = false
|
||||
}
|
||||
}
|
||||
emitter.addListener('invalidate', markAsUnusable)
|
||||
return () => {
|
||||
emitter.removeListener('invalidate', markAsUnusable)
|
||||
}
|
||||
}, [])
|
||||
|
||||
// periodic sync
|
||||
React.useEffect(() => {
|
||||
if (!hasSession || !checkUnreadRef.current) {
|
||||
|
@ -214,3 +230,7 @@ function countUnread(page: FeedPage) {
|
|||
}
|
||||
return num
|
||||
}
|
||||
|
||||
export function invalidateCachedUnreadPage() {
|
||||
emitter.emit('invalidate')
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue