Prune reverted messages from session store
This commit is contained in:
@@ -636,9 +636,60 @@ export function createInstanceMessageStore(instanceId: string): InstanceMessageS
|
|||||||
return { entry, active }
|
return { entry, active }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function pruneMessagesAfterRevert(sessionId: string, revertMessageId: string) {
|
||||||
|
const session = state.sessions[sessionId]
|
||||||
|
if (!session) return
|
||||||
|
const stopIndex = session.messageIds.indexOf(revertMessageId)
|
||||||
|
if (stopIndex === -1) return
|
||||||
|
const removedIds = session.messageIds.slice(stopIndex)
|
||||||
|
const keptIds = session.messageIds.slice(0, stopIndex)
|
||||||
|
if (removedIds.length === 0) return
|
||||||
|
|
||||||
|
setState("sessions", sessionId, "messageIds", keptIds)
|
||||||
|
|
||||||
|
setState("messages", (prev) => {
|
||||||
|
const next = { ...prev }
|
||||||
|
removedIds.forEach((id) => delete next[id])
|
||||||
|
return next
|
||||||
|
})
|
||||||
|
|
||||||
|
setState("messageInfoVersion", (prev) => {
|
||||||
|
const next = { ...prev }
|
||||||
|
removedIds.forEach((id) => delete next[id])
|
||||||
|
return next
|
||||||
|
})
|
||||||
|
|
||||||
|
removedIds.forEach((id) => messageInfoCache.delete(id))
|
||||||
|
|
||||||
|
setState("pendingParts", (prev) => {
|
||||||
|
const next = { ...prev }
|
||||||
|
removedIds.forEach((id) => {
|
||||||
|
if (next[id]) delete next[id]
|
||||||
|
})
|
||||||
|
return next
|
||||||
|
})
|
||||||
|
|
||||||
|
setState("permissions", "byMessage", (prev) => {
|
||||||
|
const next = { ...prev }
|
||||||
|
removedIds.forEach((id) => {
|
||||||
|
if (next[id]) delete next[id]
|
||||||
|
})
|
||||||
|
return next
|
||||||
|
})
|
||||||
|
|
||||||
|
withUsageState(sessionId, (draft) => {
|
||||||
|
removedIds.forEach((id) => removeUsageEntry(draft, id))
|
||||||
|
})
|
||||||
|
|
||||||
|
bumpSessionRevision(sessionId)
|
||||||
|
}
|
||||||
|
|
||||||
function setSessionRevert(sessionId: string, revert?: SessionRecord["revert"] | null) {
|
function setSessionRevert(sessionId: string, revert?: SessionRecord["revert"] | null) {
|
||||||
if (!sessionId) return
|
if (!sessionId) return
|
||||||
ensureSessionEntry(sessionId)
|
ensureSessionEntry(sessionId)
|
||||||
|
if (revert?.messageID) {
|
||||||
|
pruneMessagesAfterRevert(sessionId, revert.messageID)
|
||||||
|
}
|
||||||
setState("sessions", sessionId, "revert", revert ?? null)
|
setState("sessions", sessionId, "revert", revert ?? null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user