Reset after 5 min (#4026)

zio/stable
Eric Bailey 2024-05-14 21:21:09 -05:00 committed by GitHub
parent 6efe90a5f5
commit 6382fec732
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 7 deletions

View File

@ -13,6 +13,7 @@ import {isNative} from '#/platform/detection'
import {
ACTIVE_POLL_INTERVAL,
BACKGROUND_POLL_INTERVAL,
INACTIVE_TIMEOUT,
} from '#/state/messages/convo/const'
import {
ConvoDispatch,
@ -79,6 +80,8 @@ export class Convo {
private isProcessingPendingMessages = false
private lastActiveTimestamp: number | undefined
convoId: string
convo: ChatBskyConvoDefs.ConvoView | undefined
sender: AppBskyActorDefs.ProfileViewBasic | undefined
@ -272,16 +275,19 @@ export class Convo {
}
case ConvoStatus.Backgrounded: {
switch (action.event) {
// TODO truncate history if needed
case ConvoDispatchEvent.Resume: {
if (this.convo) {
this.status = ConvoStatus.Ready
this.refreshConvo()
if (this.wasChatInactive()) {
this.reset()
} else {
this.status = ConvoStatus.Initializing
this.setup()
if (this.convo) {
this.status = ConvoStatus.Ready
this.refreshConvo()
} else {
this.status = ConvoStatus.Initializing
this.setup()
}
this.requestPollInterval(ACTIVE_POLL_INTERVAL)
}
this.requestPollInterval(ACTIVE_POLL_INTERVAL)
break
}
case ConvoDispatchEvent.Suspend: {
@ -354,6 +360,7 @@ export class Convo {
logger.DebugContext.convo,
)
this.updateLastActiveTimestamp()
this.commit()
}
@ -436,6 +443,18 @@ export class Convo {
DEBUG_ACTIVE_CHAT = undefined
}
/**
* Called on any state transition, like when the chat is backgrounded. This
* value is then checked on background -> foreground transitions.
*/
private updateLastActiveTimestamp() {
this.lastActiveTimestamp = Date.now()
}
private wasChatInactive() {
if (!this.lastActiveTimestamp) return true
return Date.now() - this.lastActiveTimestamp > INACTIVE_TIMEOUT
}
private requestedPollInterval: (() => void) | undefined
private requestPollInterval(interval: number) {
this.withdrawRequestedPollInterval()

View File

@ -1,2 +1,3 @@
export const ACTIVE_POLL_INTERVAL = 1e3
export const BACKGROUND_POLL_INTERVAL = 5e3
export const INACTIVE_TIMEOUT = 60e3 * 5