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)
|
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")
|
@app.post("/api/refresh")
|
||||||
async def api_refresh():
|
async def api_refresh():
|
||||||
count = await invalidate_cache()
|
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 ─────────────────────────────────────────────────────────────────────
|
// ── Init ─────────────────────────────────────────────────────────────────────
|
||||||
(async () => {
|
(async () => {
|
||||||
await Promise.all([loadCategories(), refreshDlHistory()]);
|
await Promise.all([loadCategories(), refreshDlHistory()]);
|
||||||
await refresh();
|
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