## Objectif Cache local SQLite pour éviter les appels API répétés, avec TTLs différenciés par type de donnée. ## TTLs | Table | TTL | |---|---| | items (listings) | 5 min | | metadata (détails item) | 1 heure | | artwork (blobs) | 24 heures | | nfo (XML généré) | 1 heure | ## Tâches - [ ] Schema SQLite : tables `items`, `metadata`, `artwork` (+ expiry timestamp) - [ ] `cache.GetItems()` / `StoreItems()` avec sérialisation JSON - [ ] `cache.GetMetadata()` / `StoreMetadata()` - [ ] `cache.GetArtwork()` / `StoreArtwork()` (blob binaire) - [ ] `cache.Invalidate(serverKey)` — déclenché par "Refresh" dans le tray - [ ] Purge automatique des entrées expirées au démarrage - [ ] Emplacement : `%APPDATA%\MediaFS\cache.db` (Windows) / `~/.cache/mediafs/cache.db` (Linux) ## Refs - `internal/cache/cache.go` - [SPECS.md — Cache et performances](../blob/main/SPECS.md#cache-et-performances) - [docs/ARCHITECTURE.md](../blob/main/docs/ARCHITECTURE.md)
Objectif
Cache local SQLite pour éviter les appels API répétés, avec TTLs différenciés par type de donnée.
TTLs
Tâches
items,metadata,artwork(+ expiry timestamp)cache.GetItems()/StoreItems()avec sérialisation JSONcache.GetMetadata()/StoreMetadata()cache.GetArtwork()/StoreArtwork()(blob binaire)cache.Invalidate(serverKey)— déclenché par "Refresh" dans le tray%APPDATA%\MediaFS\cache.db(Windows) /~/.cache/mediafs/cache.db(Linux)Refs
internal/cache/cache.go