diff options
| author | Luke Parker <[email protected]> | 2026-04-30 08:39:19 +1000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-04-29 22:39:19 +0000 |
| commit | d7b7be1909d614a4022b345bdbeef0c1ec32e159 (patch) | |
| tree | b25640c571a0333b62cf7f06a0ee7ea24b8d3c68 /packages/app/src/context/global-sync/queue.ts | |
| parent | a740d2c66782ef3371146cd55d70920ae9b94daf (diff) | |
| download | opencode-d7b7be1909d614a4022b345bdbeef0c1ec32e159.tar.gz opencode-d7b7be1909d614a4022b345bdbeef0c1ec32e159.zip | |
fix(desktop): Path mismatches cause sessions missing + strong ID + existing data fix (#25013)
Diffstat (limited to 'packages/app/src/context/global-sync/queue.ts')
| -rw-r--r-- | packages/app/src/context/global-sync/queue.ts | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/packages/app/src/context/global-sync/queue.ts b/packages/app/src/context/global-sync/queue.ts index 5c228dac0..947e31ac9 100644 --- a/packages/app/src/context/global-sync/queue.ts +++ b/packages/app/src/context/global-sync/queue.ts @@ -2,22 +2,25 @@ type QueueInput = { paused: () => boolean bootstrap: () => Promise<void> bootstrapInstance: (directory: string) => Promise<void> | void + key?: (directory: string) => string } export function createRefreshQueue(input: QueueInput) { - const queued = new Set<string>() + const queued = new Map<string, string>() let root = false let running = false let timer: ReturnType<typeof setTimeout> | undefined + const key = input.key ?? ((directory: string) => directory) + const tick = () => new Promise<void>((resolve) => setTimeout(resolve, 0)) const take = (count: number) => { if (queued.size === 0) return [] as string[] const items: string[] = [] - for (const item of queued) { - queued.delete(item) - items.push(item) + for (const [id, directory] of queued) { + queued.delete(id) + items.push(directory) if (items.length >= count) break } return items @@ -33,7 +36,7 @@ export function createRefreshQueue(input: QueueInput) { const push = (directory: string) => { if (!directory) return - queued.add(directory) + queued.set(key(directory), directory) if (input.paused()) return schedule() } @@ -73,7 +76,7 @@ export function createRefreshQueue(input: QueueInput) { push, refresh, clear(directory: string) { - queued.delete(directory) + queued.delete(key(directory)) }, dispose() { if (!timer) return |
