( db: DatabaseAdapter, messageIds: number[], contextSize: number = 20 )
| 581 | * Uses simple id-based ordering (not session-aware). |
| 582 | */ |
| 583 | export function getMessageContext( |
| 584 | db: DatabaseAdapter, |
| 585 | messageIds: number[], |
| 586 | contextSize: number = 20 |
| 587 | ): MappedMessage[] { |
| 588 | if (messageIds.length === 0) return [] |
| 589 | |
| 590 | const contextIds = new Set<number>() |
| 591 | |
| 592 | for (const messageId of messageIds) { |
| 593 | contextIds.add(messageId) |
| 594 | |
| 595 | const beforeRows = db |
| 596 | .prepare('SELECT id FROM message WHERE id < ? ORDER BY id DESC LIMIT ?') |
| 597 | .all(messageId, contextSize) as { id: number }[] |
| 598 | beforeRows.forEach((r) => contextIds.add(r.id)) |
| 599 | |
| 600 | const afterRows = db |
| 601 | .prepare('SELECT id FROM message WHERE id > ? ORDER BY id ASC LIMIT ?') |
| 602 | .all(messageId, contextSize) as { id: number }[] |
| 603 | afterRows.forEach((r) => contextIds.add(r.id)) |
| 604 | } |
| 605 | |
| 606 | return hydrateMessagesByIds(db, Array.from(contextIds)) |
| 607 | } |
| 608 | |
| 609 | /** |
| 610 | * Get context messages around search results. |
nothing calls this directly
no test coverage detected