diff --git a/src/state/messages/convo/agent.ts b/src/state/messages/convo/agent.ts index 0a75401c2e..4418eaae77 100644 --- a/src/state/messages/convo/agent.ts +++ b/src/state/messages/convo/agent.ts @@ -34,9 +34,6 @@ import {MessagesEventBus} from '#/state/messages/events/agent' import {MessagesEventBusError} from '#/state/messages/events/types' import {DM_SERVICE_HEADERS} from '#/state/queries/messages/const' -// TODO temporary -let DEBUG_ACTIVE_CHAT: string | undefined - export function isConvoItemMessage( item: ConvoItem, ): item is ConvoItem & {type: 'message'} { @@ -102,14 +99,6 @@ export class Convo { this.ingestFirehose = this.ingestFirehose.bind(this) this.onFirehoseConnect = this.onFirehoseConnect.bind(this) this.onFirehoseError = this.onFirehoseError.bind(this) - - if (DEBUG_ACTIVE_CHAT) { - logger.error(`Convo: another chat was already active`, { - convoId: this.convoId, - }) - } else { - DEBUG_ACTIVE_CHAT = this.convoId - } } private commit() { @@ -494,7 +483,6 @@ export class Convo { suspend() { this.dispatch({event: ConvoDispatchEvent.Suspend}) - DEBUG_ACTIVE_CHAT = undefined } /** @@ -602,15 +590,6 @@ export class Convo { this.isFetchingHistory = true this.commit() - /* - * Delay if paginating while scrolled to prevent momentum scrolling from - * jerking the list around, plus makes it feel a little more human. - */ - if (this.pastMessages.size > 0) { - await new Promise(y => setTimeout(y, 500)) - // throw new Error('UNCOMMENT TO TEST RETRY') - } - const nextCursor = this.oldestRev // for TS const response = await networkRetry(2, () => { return this.agent.api.chat.bsky.convo.getMessages( @@ -679,6 +658,9 @@ export class Convo { } } }, + /* + * This is VERY important — we only want events for this convo. + */ {convoId: this.convoId}, ) } @@ -725,12 +707,6 @@ export class Convo { */ this.latestRev = ev.rev - /* - * This is VERY important. We don't want to insert any messages from - * your other chats. - */ - if (ev.convoId !== this.convoId) continue - if ( ChatBskyConvoDefs.isLogCreateMessage(ev) && ChatBskyConvoDefs.isMessageView(ev.message) @@ -775,7 +751,7 @@ export class Convo { private pendingMessageFailure: 'recoverable' | 'unrecoverable' | null = null - async sendMessage(message: ChatBskyConvoSendMessage.InputSchema['message']) { + sendMessage(message: ChatBskyConvoSendMessage.InputSchema['message']) { // Ignore empty messages for now since they have no other purpose atm if (!message.text.trim()) return @@ -828,6 +804,9 @@ export class Convo { }) const res = response.data + // remove from queue + this.pendingMessages.delete(id) + /* * Insert into `newMessages` as soon as we have a real ID. That way, when * we get an event log back, we can replace in situ. @@ -836,15 +815,14 @@ export class Convo { ...res, $type: 'chat.bsky.convo.defs#messageView', }) - this.pendingMessages.delete(id) + // render new message state, prior to firehose + this.commit() + // continue queue processing await this.processPendingMessages() - - this.commit() } catch (e: any) { logger.error(e, {context: `Convo: failed to send message`}) this.handleSendMessageFailure(e) - } finally { this.isProcessingPendingMessages = false } } diff --git a/src/state/messages/convo/types.ts b/src/state/messages/convo/types.ts index 6197a3b424..53e205e211 100644 --- a/src/state/messages/convo/types.ts +++ b/src/state/messages/convo/types.ts @@ -124,7 +124,7 @@ export type ConvoItem = type DeleteMessage = (messageId: string) => Promise type SendMessage = ( message: ChatBskyConvoSendMessage.InputSchema['message'], -) => Promise +) => void type FetchMessageHistory = () => Promise export type ConvoStateUninitialized = {