| 347 | } |
| 348 | |
| 349 | const resetMessageLoad = (sessionID: string, load: MessageLoadState) => { |
| 350 | load.touchedMessages.clear() |
| 351 | load.retainedMessages.clear() |
| 352 | load.touchedParts.clear() |
| 353 | load.carriedDeltaParts.clear() |
| 354 | load.clearedMessageParts.clear() |
| 355 | for (const messageID of load.removedMessages) { |
| 356 | load.touchedMessages.add(messageID) |
| 357 | load.clearedMessageParts.add(messageID) |
| 358 | } |
| 359 | for (const [messageID, parts] of load.deltaParts) { |
| 360 | load.touchedParts.set(messageID, new Set(parts)) |
| 361 | load.carriedDeltaParts.set(messageID, new Set(parts)) |
| 362 | const messages = data.message[sessionID] |
| 363 | if (messages && Binary.search(messages, messageID, (message) => message.id).found) |
| 364 | load.retainedMessages.add(messageID) |
| 365 | } |
| 366 | for (const [messageID, parts] of load.removedParts) { |
| 367 | const touched = load.touchedParts.get(messageID) ?? new Set<string>() |
| 368 | parts.forEach((partID) => touched.add(partID)) |
| 369 | load.touchedParts.set(messageID, touched) |
| 370 | const messages = data.message[sessionID] |
| 371 | if (messages && Binary.search(messages, messageID, (message) => message.id).found) |
| 372 | load.retainedMessages.add(messageID) |
| 373 | } |
| 374 | for (const [messageID, parts] of load.optimisticParts) { |
| 375 | load.removedMessages.delete(messageID) |
| 376 | load.clearedMessageParts.add(messageID) |
| 377 | load.touchedMessages.add(messageID) |
| 378 | const touched = load.touchedParts.get(messageID) ?? new Set<string>() |
| 379 | parts.forEach((partID) => touched.add(partID)) |
| 380 | load.touchedParts.set(messageID, touched) |
| 381 | } |
| 382 | } |
| 383 | |
| 384 | const evict = (sessionIDs: string[]) => { |
| 385 | if (sessionIDs.length === 0) return |