summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context/global-sync/queue.ts
diff options
context:
space:
mode:
authorLuke Parker <[email protected]>2026-04-30 08:39:19 +1000
committerGitHub <[email protected]>2026-04-29 22:39:19 +0000
commitd7b7be1909d614a4022b345bdbeef0c1ec32e159 (patch)
treeb25640c571a0333b62cf7f06a0ee7ea24b8d3c68 /packages/app/src/context/global-sync/queue.ts
parenta740d2c66782ef3371146cd55d70920ae9b94daf (diff)
downloadopencode-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.ts15
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