[Clipclops] Deletions (#3824)

* Handle message deletions

* Handle failures
zio/stable
Eric Bailey 2024-05-02 13:12:34 -05:00 committed by GitHub
parent 1a07e23192
commit a20fe4c9a0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 58 additions and 24 deletions

View File

@ -106,6 +106,7 @@ export class Convo {
string, string,
{id: string; message: ChatBskyConvoSendMessage.InputSchema['message']} {id: string; message: ChatBskyConvoSendMessage.InputSchema['message']}
> = new Map() > = new Map()
private deletedMessages: Set<string> = new Set()
private footerItems: Map<string, ConvoItem> = new Map() private footerItems: Map<string, ConvoItem> = new Map()
private pendingEventIngestion: Promise<void> | undefined private pendingEventIngestion: Promise<void> | undefined
@ -278,6 +279,8 @@ export class Convo {
* this.pastMessages.set(log.message.id, log.message) * this.pastMessages.set(log.message.id, log.message)
*/ */
this.pastMessages.delete(log.message.id) this.pastMessages.delete(log.message.id)
this.newMessages.delete(log.message.id)
this.deletedMessages.delete(log.message.id)
} }
} }
} }
@ -411,6 +414,30 @@ export class Convo {
} }
} }
async deleteMessage(messageId: string) {
this.deletedMessages.add(messageId)
this.commit()
try {
await this.agent.api.chat.bsky.convo.deleteMessageForSelf(
{
convoId: this.convoId,
messageId,
},
{
encoding: 'application/json',
headers: {
Authorization: this.__tempFromUserDid,
},
},
)
} catch (e) {
this.deletedMessages.delete(messageId)
this.commit()
throw e
}
}
/* /*
* Items in reverse order, since FlatList inverts * Items in reverse order, since FlatList inverts
*/ */
@ -474,36 +501,43 @@ export class Convo {
} }
}) })
return items.map((item, i) => { return items
let nextMessage = null .filter(item => {
const isMessage = isConvoItemMessage(item) if (isConvoItemMessage(item)) {
return !this.deletedMessages.has(item.message.id)
if (isMessage) { }
if ( return true
isMessage && })
(ChatBskyConvoDefs.isMessageView(item.message) || .map((item, i) => {
ChatBskyConvoDefs.isDeletedMessageView(item.message)) let nextMessage = null
) { const isMessage = isConvoItemMessage(item)
const next = items[i - 1]
if (isMessage) {
if ( if (
isConvoItemMessage(next) && isMessage &&
next && (ChatBskyConvoDefs.isMessageView(item.message) ||
(ChatBskyConvoDefs.isMessageView(next.message) || ChatBskyConvoDefs.isDeletedMessageView(item.message))
ChatBskyConvoDefs.isDeletedMessageView(next.message))
) { ) {
nextMessage = next.message const next = items[i - 1]
if (
isConvoItemMessage(next) &&
next &&
(ChatBskyConvoDefs.isMessageView(next.message) ||
ChatBskyConvoDefs.isDeletedMessageView(next.message))
) {
nextMessage = next.message
}
}
return {
...item,
nextMessage,
} }
} }
return { return item
...item, })
nextMessage,
}
}
return item
})
} }
destroy() { destroy() {