| 332 | } |
| 333 | |
| 334 | const trackPartChange = (sessionID: string, messageID: string, partID: string) => { |
| 335 | const load = messageLoads.get(sessionID) |
| 336 | if (!load) return |
| 337 | // A part event keeps an existing parent when the fetched page omits it without overriding fetched metadata. |
| 338 | const messages = data.message[sessionID] |
| 339 | if (messages && Binary.search(messages, messageID, (message) => message.id).found) |
| 340 | load.retainedMessages.add(messageID) |
| 341 | const parts = load.touchedParts.get(messageID) |
| 342 | if (parts) { |
| 343 | parts.add(partID) |
| 344 | return |
| 345 | } |
| 346 | load.touchedParts.set(messageID, new Set([partID])) |
| 347 | } |
| 348 | |
| 349 | const resetMessageLoad = (sessionID: string, load: MessageLoadState) => { |
| 350 | load.touchedMessages.clear() |