feat: auto-reload grid when background cache refresh completes
Docker / docker (push) Successful in 1m49s
Docker / docker (push) Successful in 1m49s
Poll /api/cache-ts every 30s; silently reload concerts if the cache timestamp increased (background scrape finished). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -90,6 +90,12 @@ async def api_concerts(page: int = 1, search: str = "", page_size: int = 24, cat
|
||||
return await fetch_concerts(page=page, search=search, page_size=page_size, category=category)
|
||||
|
||||
|
||||
@app.get("/api/cache-ts")
|
||||
async def api_cache_ts():
|
||||
from arte_api import _cache
|
||||
return {"ts": _cache["ts"], "count": len(_cache["data"])}
|
||||
|
||||
|
||||
@app.post("/api/refresh")
|
||||
async def api_refresh():
|
||||
count = await invalidate_cache()
|
||||
|
||||
@@ -449,8 +449,25 @@ document.addEventListener('keydown', e => {
|
||||
}
|
||||
});
|
||||
|
||||
// ── Cache auto-update polling ─────────────────────────────────────────────────
|
||||
let _cacheTs = 0;
|
||||
|
||||
async function pollCacheTs() {
|
||||
try {
|
||||
const { ts, count } = await fetch('/api/cache-ts').then(r => r.json());
|
||||
if (_cacheTs && ts > _cacheTs && count > 0) {
|
||||
_cacheTs = ts;
|
||||
await refresh();
|
||||
} else if (!_cacheTs) {
|
||||
_cacheTs = ts;
|
||||
}
|
||||
} catch {}
|
||||
}
|
||||
|
||||
// ── Init ─────────────────────────────────────────────────────────────────────
|
||||
(async () => {
|
||||
await Promise.all([loadCategories(), refreshDlHistory()]);
|
||||
await refresh();
|
||||
_cacheTs = (await fetch('/api/cache-ts').then(r => r.json()).catch(() => ({ts:0}))).ts;
|
||||
setInterval(pollCacheTs, 30_000);
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user