Aggregate quickly-sent messages into batches (#4061)
parent
a84a14d084
commit
d424945eed
|
@ -766,12 +766,12 @@ export class Convo {
|
||||||
logger.DebugContext.convo,
|
logger.DebugContext.convo,
|
||||||
)
|
)
|
||||||
|
|
||||||
const pendingMessage = Array.from(this.pendingMessages.values()).shift()
|
const pendingMessages = Array.from(this.pendingMessages.values())
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If there are no pending messages, we're done.
|
* If there are no pending messages, we're done.
|
||||||
*/
|
*/
|
||||||
if (!pendingMessage) {
|
if (pendingMessages.length === 0) {
|
||||||
this.isProcessingPendingMessages = false
|
this.isProcessingPendingMessages = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -779,28 +779,34 @@ export class Convo {
|
||||||
try {
|
try {
|
||||||
this.isProcessingPendingMessages = true
|
this.isProcessingPendingMessages = true
|
||||||
|
|
||||||
const {id, message} = pendingMessage
|
|
||||||
|
|
||||||
const response = await networkRetry(2, () => {
|
const response = await networkRetry(2, () => {
|
||||||
return this.agent.api.chat.bsky.convo.sendMessage(
|
return this.agent.api.chat.bsky.convo.sendMessageBatch(
|
||||||
{
|
{
|
||||||
convoId: this.convoId,
|
items: pendingMessages.map(({message}) => ({
|
||||||
message,
|
convoId: this.convoId,
|
||||||
|
message,
|
||||||
|
})),
|
||||||
},
|
},
|
||||||
{encoding: 'application/json', headers: DM_SERVICE_HEADERS},
|
{encoding: 'application/json', headers: DM_SERVICE_HEADERS},
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
const res = response.data
|
|
||||||
|
|
||||||
/*
|
const {items} = response.data
|
||||||
* 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.
|
for (let i = 0; i < items.length; i++) {
|
||||||
*/
|
const msg = items[i]
|
||||||
this.newMessages.set(res.id, {
|
const tempId = pendingMessages[i].id
|
||||||
...res,
|
|
||||||
$type: 'chat.bsky.convo.defs#messageView',
|
/*
|
||||||
})
|
* Insert into `newMessages` as soon as we have a real ID. That way, when
|
||||||
this.pendingMessages.delete(id)
|
* we get an event log back, we can replace in situ.
|
||||||
|
*/
|
||||||
|
this.newMessages.set(msg.id, {
|
||||||
|
...msg,
|
||||||
|
$type: 'chat.bsky.convo.defs#messageView',
|
||||||
|
})
|
||||||
|
this.pendingMessages.delete(tempId)
|
||||||
|
}
|
||||||
|
|
||||||
await this.processPendingMessages()
|
await this.processPendingMessages()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue