fix: harden offline fallback and track visitable pages
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 1m36s

This commit is contained in:
2026-03-01 18:33:11 +01:00
parent c704e24a53
commit e6fe5ac27f
6 changed files with 518 additions and 119 deletions

View File

@@ -36,6 +36,7 @@ interface CacheStats {
images: { size: number; entries: number };
books: { size: number; entries: number };
total: number;
visitablePages: number;
}
interface CacheEntry {
@@ -376,6 +377,9 @@ export function CacheSettings() {
<p className="text-xs text-muted-foreground text-right">
{t("settings.cache.imagesQuota", { used: Math.round(usagePercent) })}
</p>
<p className="text-xs text-muted-foreground">
{t("settings.cache.visitablePages", { count: stats.visitablePages })}
</p>
</div>
)}

View File

@@ -17,6 +17,7 @@ interface CacheStats {
images: { size: number; entries: number };
books: { size: number; entries: number };
total: number;
visitablePages: number;
}
interface CacheEntry {
@@ -112,7 +113,12 @@ export function ServiceWorkerProvider({ children }: { children: ReactNode }) {
case "CACHE_STATS":
const statsResolver = pendingRequests.current.get("CACHE_STATS");
if (statsResolver) {
statsResolver(payload);
const normalizedPayload = {
...payload,
visitablePages:
typeof payload?.visitablePages === "number" ? payload.visitablePages : 0,
};
statsResolver(normalizedPayload);
pendingRequests.current.delete("CACHE_STATS");
}
break;

View File

@@ -144,10 +144,11 @@
"initializing": "Initializing...",
"totalStorage": "Total storage",
"imagesQuota": "{used}% of images quota used",
"visitablePages": "{count} pages available offline",
"static": "Static resources",
"staticDesc": "Next.js scripts, styles and assets",
"pages": "Visited pages",
"pagesDesc": "Home, libraries, series and details",
"pagesDesc": "Pages and navigation data available offline",
"api": "API data",
"apiDesc": "Series, books and library metadata",
"images": "Images",

View File

@@ -144,10 +144,11 @@
"initializing": "Initialisation...",
"totalStorage": "Stockage total",
"imagesQuota": "{used}% du quota images utilisé",
"visitablePages": "{count} pages visitables hors ligne",
"static": "Ressources statiques",
"staticDesc": "Scripts, styles et assets Next.js",
"pages": "Pages visitées",
"pagesDesc": "Home, bibliothèques, séries et détails",
"pagesDesc": "Pages et données de navigation disponibles hors ligne",
"api": "Données API",
"apiDesc": "Métadonnées des séries, livres et bibliothèques",
"images": "Images",