diff options
author | Eric Bailey <git@esb.lol> | 2024-05-17 18:05:21 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-17 16:05:21 -0700 |
commit | 49314e2d1f20d7471f1d05ce2b118bd030c44aa2 (patch) | |
tree | 01a7db1360ac945debbbf2294c0b98709e9909c5 /src/state/messages/convo | |
parent | 8b3bfb3cf7459af59fb4535241a6251e35e88eb9 (diff) | |
download | voidsky-49314e2d1f20d7471f1d05ce2b118bd030c44aa2.tar.zst |
[🐴] Mod disabled (#4089)
* Handle send failures * Add chat disabled state
Diffstat (limited to 'src/state/messages/convo')
-rw-r--r-- | src/state/messages/convo/agent.ts | 46 | ||||
-rw-r--r-- | src/state/messages/convo/index.tsx | 2 | ||||
-rw-r--r-- | src/state/messages/convo/types.ts | 18 | ||||
-rw-r--r-- | src/state/messages/convo/util.ts | 10 |
4 files changed, 71 insertions, 5 deletions
diff --git a/src/state/messages/convo/agent.ts b/src/state/messages/convo/agent.ts index 8673c70ad..0a75401c2 100644 --- a/src/state/messages/convo/agent.ts +++ b/src/state/messages/convo/agent.ts @@ -152,6 +152,7 @@ export class Convo { fetchMessageHistory: undefined, } } + case ConvoStatus.Disabled: case ConvoStatus.Suspended: case ConvoStatus.Backgrounded: case ConvoStatus.Ready: { @@ -241,6 +242,13 @@ export class Convo { this.withdrawRequestedPollInterval() break } + case ConvoDispatchEvent.Disable: { + this.status = ConvoStatus.Disabled + this.fetchMessageHistory() // finish init + this.cleanupFirehoseConnection?.() + this.withdrawRequestedPollInterval() + break + } } break } @@ -269,6 +277,12 @@ export class Convo { this.withdrawRequestedPollInterval() break } + case ConvoDispatchEvent.Disable: { + this.status = ConvoStatus.Disabled + this.cleanupFirehoseConnection?.() + this.withdrawRequestedPollInterval() + break + } } break } @@ -303,6 +317,12 @@ export class Convo { this.withdrawRequestedPollInterval() break } + case ConvoDispatchEvent.Disable: { + this.status = ConvoStatus.Disabled + this.cleanupFirehoseConnection?.() + this.withdrawRequestedPollInterval() + break + } } break } @@ -321,6 +341,10 @@ export class Convo { this.error = action.payload break } + case ConvoDispatchEvent.Disable: { + this.status = ConvoStatus.Disabled + break + } } break } @@ -343,9 +367,17 @@ export class Convo { this.error = action.payload break } + case ConvoDispatchEvent.Disable: { + this.status = ConvoStatus.Disabled + break + } } break } + case ConvoStatus.Disabled: { + // can't do anything + break + } default: break } @@ -424,9 +456,13 @@ export class Convo { throw new Error('Convo: could not find recipients in convo') } - // await new Promise(y => setTimeout(y, 2000)) - // throw new Error('UNCOMMENT TO TEST INIT FAILURE') - this.dispatch({event: ConvoDispatchEvent.Ready}) + const userIsDisabled = this.sender.chatDisabled as boolean + + if (userIsDisabled) { + this.dispatch({event: ConvoDispatchEvent.Disable}) + } else { + this.dispatch({event: ConvoDispatchEvent.Ready}) + } } catch (e: any) { logger.error(e, {context: 'Convo: setup failed'}) @@ -829,6 +865,10 @@ export class Convo { ], }) break + case 'Account is disabled': + this.pendingMessageFailure = 'unrecoverable' + this.dispatch({event: ConvoDispatchEvent.Disable}) + break default: logger.warn( `Convo handleSendMessageFailure could not handle error`, diff --git a/src/state/messages/convo/index.tsx b/src/state/messages/convo/index.tsx index d6648f480..79e61f88a 100644 --- a/src/state/messages/convo/index.tsx +++ b/src/state/messages/convo/index.tsx @@ -8,6 +8,7 @@ import { ConvoParams, ConvoState, ConvoStateBackgrounded, + ConvoStateDisabled, ConvoStateReady, ConvoStateSuspended, } from '#/state/messages/convo/types' @@ -40,6 +41,7 @@ export function useConvoActive() { | ConvoStateReady | ConvoStateBackgrounded | ConvoStateSuspended + | ConvoStateDisabled if (!ctx) { throw new Error('useConvo must be used within a ConvoProvider') } diff --git a/src/state/messages/convo/types.ts b/src/state/messages/convo/types.ts index 25e79aba6..6197a3b42 100644 --- a/src/state/messages/convo/types.ts +++ b/src/state/messages/convo/types.ts @@ -20,6 +20,7 @@ export enum ConvoStatus { Error = 'error', Backgrounded = 'backgrounded', Suspended = 'suspended', + Disabled = 'disabled', } export enum ConvoItemError { @@ -50,6 +51,7 @@ export enum ConvoDispatchEvent { Background = 'background', Suspend = 'suspend', Error = 'error', + Disable = 'disable', } export type ConvoDispatch = @@ -72,6 +74,9 @@ export type ConvoDispatch = event: ConvoDispatchEvent.Error payload: ConvoError } + | { + event: ConvoDispatchEvent.Disable + } export type ConvoItem = | { @@ -194,6 +199,18 @@ export type ConvoStateError = { sendMessage: undefined fetchMessageHistory: undefined } +export type ConvoStateDisabled = { + status: ConvoStatus.Disabled + items: ConvoItem[] + convo: ChatBskyConvoDefs.ConvoView + error: undefined + sender: AppBskyActorDefs.ProfileViewBasic + recipients: AppBskyActorDefs.ProfileViewBasic[] + isFetchingHistory: boolean + deleteMessage: DeleteMessage + sendMessage: SendMessage + fetchMessageHistory: FetchMessageHistory +} export type ConvoState = | ConvoStateUninitialized | ConvoStateInitializing @@ -201,6 +218,7 @@ export type ConvoState = | ConvoStateBackgrounded | ConvoStateSuspended | ConvoStateError + | ConvoStateDisabled export type ConvoEvent = { type: 'invalidate-block-state' diff --git a/src/state/messages/convo/util.ts b/src/state/messages/convo/util.ts index ffaa4104a..200d85dfa 100644 --- a/src/state/messages/convo/util.ts +++ b/src/state/messages/convo/util.ts @@ -1,6 +1,7 @@ import { ConvoState, ConvoStateBackgrounded, + ConvoStateDisabled, ConvoStateReady, ConvoStateSuspended, ConvoStatus, @@ -13,10 +14,15 @@ import { */ export function isConvoActive( convo: ConvoState, -): convo is ConvoStateReady | ConvoStateBackgrounded | ConvoStateSuspended { +): convo is + | ConvoStateReady + | ConvoStateBackgrounded + | ConvoStateSuspended + | ConvoStateDisabled { return ( convo.status === ConvoStatus.Ready || convo.status === ConvoStatus.Backgrounded || - convo.status === ConvoStatus.Suspended + convo.status === ConvoStatus.Suspended || + convo.status === ConvoStatus.Disabled ) } |