// One queue for the records screen: visible previews get four network slots. const waiting: Array<() => void> = []; let active = 0; function pump() { while (active < 4 && waiting.length) waiting.shift()?.(); } export function queuePreview(start: (release: () => void) => void) { let released = false; let started = false; const release = () => { if (released) return; released = true; if (started) active--; else { const index = waiting.indexOf(run); if (index >= 0) waiting.splice(index, 1); } pump(); }; const run = () => { started = true; active++; start(release); }; waiting.push(run); pump(); // Active fetches release their slot in finally, after abort has settled. return () => { if (!started) release(); }; }