feat: download button and page

This commit is contained in:
Julien Froidefond
2025-02-21 13:08:52 +01:00
parent dd49d80744
commit ade8b372b6
13 changed files with 8794 additions and 697 deletions

View File

@@ -1,4 +1,5 @@
const CACHE_NAME = "stripstream-cache-v1";
const BOOKS_CACHE_NAME = "stripstream-books";
const OFFLINE_PAGE = "/offline.html";
const STATIC_ASSETS = [
@@ -11,7 +12,12 @@ const STATIC_ASSETS = [
// Installation du service worker
self.addEventListener("install", (event) => {
event.waitUntil(caches.open(CACHE_NAME).then((cache) => cache.addAll(STATIC_ASSETS)));
event.waitUntil(
Promise.all([
caches.open(CACHE_NAME).then((cache) => cache.addAll(STATIC_ASSETS)),
caches.open(BOOKS_CACHE_NAME),
])
);
});
// Activation et nettoyage des anciens caches
@@ -19,7 +25,9 @@ self.addEventListener("activate", (event) => {
event.waitUntil(
caches.keys().then((cacheNames) => {
return Promise.all(
cacheNames.filter((name) => name !== CACHE_NAME).map((name) => caches.delete(name))
cacheNames
.filter((name) => name !== CACHE_NAME && name !== BOOKS_CACHE_NAME)
.map((name) => caches.delete(name))
);
})
);
@@ -41,6 +49,11 @@ const isNextStaticResource = (url) => {
return url.includes("/_next/static") && !isWebpackResource(url);
};
// Fonction pour vérifier si c'est une ressource de livre
const isBookResource = (url) => {
return url.includes("/api/v1/books/") && (url.includes("/pages") || url.includes("/thumbnail"));
};
self.addEventListener("fetch", (event) => {
// Ignorer les requêtes non GET
if (event.request.method !== "GET") return;
@@ -48,6 +61,19 @@ self.addEventListener("fetch", (event) => {
// Ignorer les ressources webpack
if (isWebpackResource(event.request.url)) return;
// Pour les ressources de livre
if (isBookResource(event.request.url)) {
event.respondWith(
caches.match(event.request).then((response) => {
if (response) {
return response;
}
return fetch(event.request);
})
);
return;
}
// Pour les ressources statiques de Next.js et les autres requêtes
event.respondWith(
fetch(event.request)