diff --git a/service-worker.js b/service-worker.js index 0e95b51..3a0a3f6 100644 --- a/service-worker.js +++ b/service-worker.js @@ -1,5 +1,5 @@ -const CURRENT_VERSION = 'v74'; -const CACHE_NAME = `cache-${CURRENT_VERSION}`; +const CURRENT_VERSION = 'v75'; // Güncel versiyon +const CACHE_NAME = cache-v${CURRENT_VERSION}; // Cache ismi 'cache-vX' formatında const urlsToCache = [ '/', @@ -38,41 +38,83 @@ const urlsToCache = [ '/.htaccess.txt' ]; -// Install event - cache files +// Install event - Cache dosyalarını ekle self.addEventListener('install', event => { event.waitUntil( caches.open(CACHE_NAME) .then(cache => { - console.log(`Caching files for version: ${CURRENT_VERSION}`); - return cache.addAll(urlsToCache); + console.log(✅ Caching files for version: ${CURRENT_VERSION}); + return cache.addAll(urlsToCache); // Tüm dosyaları cache'e ekle }) ); }); -// Fetch event - serve from cache if available, else fetch from network +// Fetch event - İnternetten dosya al, yoksa cache'den al self.addEventListener('fetch', event => { event.respondWith( - caches.match(event.request).then(response => { - return response || fetch(event.request); - }) + fetch(event.request) + .then(response => { + // Eğer internetten başarılı bir şekilde dosya alındıysa + if (!response || response.status !== 200 || response.type !== 'basic') { + return response; // Geçerli değilse, direkt döndür + } + + // Cache'e yeni dosyayı ekleyelim + caches.open(CACHE_NAME).then(cache => { + cache.match(event.request).then(cachedResponse => { + // Yeni versiyon, eski versiyondan büyükse eski cache'i silip yeni cache'i ekle + if (parseInt(CURRENT_VERSION.replace('v', ''), 10) > parseInt(CACHE_NAME.replace('cache-v', ''), 10)) { + console.log(🚨 New version found. Updating cache...); + caches.keys().then(cacheNames => { + return Promise.all( + cacheNames.map(cacheName => { + if (cacheName.startsWith('cache-v') && cacheName !== CACHE_NAME) { + console.log(🗑 Deleting old cache: ${cacheName}); + return caches.delete(cacheName); // Eski cache'i sil + } + }) + ); + }).then(() => { + // Yeni versiyon cache'i ekle + cache.put(event.request, response.clone()); + }); + } + }); + }); + + // Yeni versiyonlu cache'i döndür + return response; + }) + .catch(() => { + // Eğer offline durumdaysak, cache'den döndür + return caches.match(event.request).then(cachedResponse => { + if (cachedResponse) { + console.log('🗂 Offline - Serving from cache'); + return cachedResponse; // Cache'den döndür + } + + // Cache'de de yoksa, 404 sayfasını döndür + return caches.match('/404.html'); + }); + }) ); }); -// Activate event - delete old caches if version is different +// Activate event - Eski cache'leri sil ve yeni cache'i aktif et self.addEventListener('activate', event => { event.waitUntil( caches.keys().then(cacheNames => { return Promise.all( cacheNames.map(cacheName => { - if (cacheName.startsWith('cache-') && cacheName !== CACHE_NAME) { - console.log(`Deleting old cache: ${cacheName}`); - return caches.delete(cacheName); + if (cacheName.startsWith('cache-v') && cacheName !== CACHE_NAME) { + console.log(🗑 Deleting old cache: ${cacheName}); + return caches.delete(cacheName); // Eski cache'i sil } }) ); }).then(() => { - console.log(`Cache updated to version: ${CURRENT_VERSION}`); - return self.clients.claim(); + console.log(✅ Cache updated to version: ${CURRENT_VERSION}); + return self.clients.claim(); // Yeni cache versiyonunu hemen aktif et }) ); });