[🐴] Convo agent cleanup (#4109)
* Move comment, remove unused code * Clean up sending * Remove temp hack * Remove debugzio/stable
parent
3ca671d9aa
commit
7de0b0a58c
|
@ -34,9 +34,6 @@ import {MessagesEventBus} from '#/state/messages/events/agent'
|
||||||
import {MessagesEventBusError} from '#/state/messages/events/types'
|
import {MessagesEventBusError} from '#/state/messages/events/types'
|
||||||
import {DM_SERVICE_HEADERS} from '#/state/queries/messages/const'
|
import {DM_SERVICE_HEADERS} from '#/state/queries/messages/const'
|
||||||
|
|
||||||
// TODO temporary
|
|
||||||
let DEBUG_ACTIVE_CHAT: string | undefined
|
|
||||||
|
|
||||||
export function isConvoItemMessage(
|
export function isConvoItemMessage(
|
||||||
item: ConvoItem,
|
item: ConvoItem,
|
||||||
): item is ConvoItem & {type: 'message'} {
|
): item is ConvoItem & {type: 'message'} {
|
||||||
|
@ -102,14 +99,6 @@ export class Convo {
|
||||||
this.ingestFirehose = this.ingestFirehose.bind(this)
|
this.ingestFirehose = this.ingestFirehose.bind(this)
|
||||||
this.onFirehoseConnect = this.onFirehoseConnect.bind(this)
|
this.onFirehoseConnect = this.onFirehoseConnect.bind(this)
|
||||||
this.onFirehoseError = this.onFirehoseError.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() {
|
private commit() {
|
||||||
|
@ -494,7 +483,6 @@ export class Convo {
|
||||||
|
|
||||||
suspend() {
|
suspend() {
|
||||||
this.dispatch({event: ConvoDispatchEvent.Suspend})
|
this.dispatch({event: ConvoDispatchEvent.Suspend})
|
||||||
DEBUG_ACTIVE_CHAT = undefined
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -602,15 +590,6 @@ export class Convo {
|
||||||
this.isFetchingHistory = true
|
this.isFetchingHistory = true
|
||||||
this.commit()
|
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 nextCursor = this.oldestRev // for TS
|
||||||
const response = await networkRetry(2, () => {
|
const response = await networkRetry(2, () => {
|
||||||
return this.agent.api.chat.bsky.convo.getMessages(
|
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},
|
{convoId: this.convoId},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -725,12 +707,6 @@ export class Convo {
|
||||||
*/
|
*/
|
||||||
this.latestRev = ev.rev
|
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 (
|
if (
|
||||||
ChatBskyConvoDefs.isLogCreateMessage(ev) &&
|
ChatBskyConvoDefs.isLogCreateMessage(ev) &&
|
||||||
ChatBskyConvoDefs.isMessageView(ev.message)
|
ChatBskyConvoDefs.isMessageView(ev.message)
|
||||||
|
@ -775,7 +751,7 @@ export class Convo {
|
||||||
|
|
||||||
private pendingMessageFailure: 'recoverable' | 'unrecoverable' | null = null
|
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
|
// Ignore empty messages for now since they have no other purpose atm
|
||||||
if (!message.text.trim()) return
|
if (!message.text.trim()) return
|
||||||
|
|
||||||
|
@ -828,6 +804,9 @@ export class Convo {
|
||||||
})
|
})
|
||||||
const res = response.data
|
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
|
* 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.
|
* we get an event log back, we can replace in situ.
|
||||||
|
@ -836,15 +815,14 @@ export class Convo {
|
||||||
...res,
|
...res,
|
||||||
$type: 'chat.bsky.convo.defs#messageView',
|
$type: 'chat.bsky.convo.defs#messageView',
|
||||||
})
|
})
|
||||||
this.pendingMessages.delete(id)
|
// render new message state, prior to firehose
|
||||||
|
|
||||||
await this.processPendingMessages()
|
|
||||||
|
|
||||||
this.commit()
|
this.commit()
|
||||||
|
|
||||||
|
// continue queue processing
|
||||||
|
await this.processPendingMessages()
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
logger.error(e, {context: `Convo: failed to send message`})
|
logger.error(e, {context: `Convo: failed to send message`})
|
||||||
this.handleSendMessageFailure(e)
|
this.handleSendMessageFailure(e)
|
||||||
} finally {
|
|
||||||
this.isProcessingPendingMessages = false
|
this.isProcessingPendingMessages = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,7 +124,7 @@ export type ConvoItem =
|
||||||
type DeleteMessage = (messageId: string) => Promise<void>
|
type DeleteMessage = (messageId: string) => Promise<void>
|
||||||
type SendMessage = (
|
type SendMessage = (
|
||||||
message: ChatBskyConvoSendMessage.InputSchema['message'],
|
message: ChatBskyConvoSendMessage.InputSchema['message'],
|
||||||
) => Promise<void>
|
) => void
|
||||||
type FetchMessageHistory = () => Promise<void>
|
type FetchMessageHistory = () => Promise<void>
|
||||||
|
|
||||||
export type ConvoStateUninitialized = {
|
export type ConvoStateUninitialized = {
|
||||||
|
|
Loading…
Reference in New Issue