diff options
Diffstat (limited to 'src/state/messages')
-rw-r--r-- | src/state/messages/convo/agent.ts | 36 | ||||
-rw-r--r-- | src/state/messages/convo/types.ts | 19 |
2 files changed, 27 insertions, 28 deletions
diff --git a/src/state/messages/convo/agent.ts b/src/state/messages/convo/agent.ts index 6d59e1369..420eff349 100644 --- a/src/state/messages/convo/agent.ts +++ b/src/state/messages/convo/agent.ts @@ -735,6 +735,8 @@ export class Convo { } } + private pendingFailed = false + async sendMessage(message: ChatBskyConvoSendMessage.InputSchema['message']) { // Ignore empty messages for now since they have no other purpose atm if (!message.text.trim()) return @@ -747,11 +749,9 @@ export class Convo { id: tempId, message, }) - // remove on each send, it might go through now without user having to click - this.footerItems.delete(ConvoItemError.PendingFailed) this.commit() - if (!this.isProcessingPendingMessages) { + if (!this.isProcessingPendingMessages && !this.pendingFailed) { this.processPendingMessages() } } @@ -805,16 +805,7 @@ export class Convo { this.commit() } catch (e: any) { logger.error(e, {context: `Convo: failed to send message`}) - this.footerItems.set(ConvoItemError.PendingFailed, { - type: 'error-recoverable', - key: ConvoItemError.PendingFailed, - code: ConvoItemError.PendingFailed, - retry: () => { - this.footerItems.delete(ConvoItemError.PendingFailed) - this.commit() - this.batchRetryPendingMessages() - }, - }) + this.pendingFailed = true this.commit() } finally { this.isProcessingPendingMessages = false @@ -868,16 +859,7 @@ export class Convo { ) } catch (e: any) { logger.error(e, {context: `Convo: failed to batch retry messages`}) - this.footerItems.set(ConvoItemError.PendingFailed, { - type: 'error-recoverable', - key: ConvoItemError.PendingFailed, - code: ConvoItemError.PendingFailed, - retry: () => { - this.footerItems.delete(ConvoItemError.PendingFailed) - this.commit() - this.batchRetryPendingMessages() - }, - }) + this.pendingFailed = true this.commit() } } @@ -958,6 +940,7 @@ export class Convo { key: m.id, message: { ...m.message, + $type: 'chat.bsky.convo.defs#messageView', id: nanoid(), rev: '__fake__', sentAt: new Date().toISOString(), @@ -968,6 +951,13 @@ export class Convo { sender: this.sender!, }, nextMessage: null, + retry: this.pendingFailed + ? () => { + this.pendingFailed = false + this.commit() + this.batchRetryPendingMessages() + } + : undefined, }) }) diff --git a/src/state/messages/convo/types.ts b/src/state/messages/convo/types.ts index 6ce4d40bd..3fb0eb6ad 100644 --- a/src/state/messages/convo/types.ts +++ b/src/state/messages/convo/types.ts @@ -35,10 +35,6 @@ export enum ConvoItemError { * Error fetching past messages */ HistoryFailed = 'historyFailed', - /** - * Error sending new message - */ - PendingFailed = 'pendingFailed', } export enum ConvoErrorCode { @@ -83,13 +79,26 @@ export type ConvoDispatch = export type ConvoItem = | { - type: 'message' | 'pending-message' + type: 'message' + key: string + message: ChatBskyConvoDefs.MessageView + nextMessage: + | ChatBskyConvoDefs.MessageView + | ChatBskyConvoDefs.DeletedMessageView + | null + } + | { + type: 'pending-message' key: string message: ChatBskyConvoDefs.MessageView nextMessage: | ChatBskyConvoDefs.MessageView | ChatBskyConvoDefs.DeletedMessageView | null + /** + * Retry sending the message. If present, the message is in a failed state. + */ + retry?: () => void } | { type: 'deleted-message' |