| 77 | } |
| 78 | |
| 79 | export async function cleanup(session: Session.Info) { |
| 80 | if (!session.revert) return |
| 81 | const sessionID = session.id |
| 82 | let msgs = await Session.messages({ sessionID }) |
| 83 | const messageID = session.revert.messageID |
| 84 | const [preserve, remove] = splitWhen(msgs, (x) => x.info.id === messageID) |
| 85 | msgs = preserve |
| 86 | for (const msg of remove) { |
| 87 | await Storage.remove(["message", sessionID, msg.info.id]) |
| 88 | await Bus.publish(MessageV2.Event.Removed, { sessionID: sessionID, messageID: msg.info.id }) |
| 89 | } |
| 90 | const last = preserve.at(-1) |
| 91 | if (session.revert.partID && last) { |
| 92 | const partID = session.revert.partID |
| 93 | const [preserveParts, removeParts] = splitWhen(last.parts, (x) => x.id === partID) |
| 94 | last.parts = preserveParts |
| 95 | for (const part of removeParts) { |
| 96 | await Storage.remove(["part", last.info.id, part.id]) |
| 97 | await Bus.publish(MessageV2.Event.PartRemoved, { |
| 98 | sessionID: sessionID, |
| 99 | messageID: last.info.id, |
| 100 | partID: part.id, |
| 101 | }) |
| 102 | } |
| 103 | } |
| 104 | await Session.update(sessionID, (draft) => { |
| 105 | draft.revert = undefined |
| 106 | }) |
| 107 | } |
| 108 | } |