mirror of
https://github.com/publiclab/image-sequencer.git
synced 2025-12-11 19:00:00 +01:00
87 lines
2.6 KiB
JavaScript
87 lines
2.6 KiB
JavaScript
const request = new XMLHttpRequest();
|
|
request.open("GET", "../manifest.json", false);
|
|
request.send(null);
|
|
const meta = JSON.parse(request.responseText).metadata,
|
|
ver = meta.version,
|
|
betaVer = meta.betaVersion;
|
|
const version = (self.location.toString().indexOf('beta') == 0 || self.location.toString().includes('localhost') || self.location.toString().includes('127.0.0.1')) ? betaVer : ver;
|
|
|
|
const staticCacheName = `image-sequencer-static-v${version}`;
|
|
|
|
|
|
const isVersionNewer = (version, old) => {
|
|
version = version.split('.');
|
|
var major = version[0],
|
|
minor = version[1],
|
|
patch = version[2];
|
|
old = old.split('.');
|
|
var oldMajor = old[0],
|
|
oldMinor = old[1],
|
|
oldPatch = old[2];
|
|
|
|
if (major > oldMajor) return true
|
|
else if (minor > oldMinor) return true
|
|
else if (patch > oldPatch) return true
|
|
else return false
|
|
}
|
|
|
|
self.addEventListener('install', event => {
|
|
console.log('Attempting to install service worker');
|
|
});
|
|
|
|
self.addEventListener('activate', function(e) {
|
|
console.log('[ServiceWorker] Activate');
|
|
e.waitUntil(
|
|
caches.keys().then(function(cacheNames) {
|
|
return Promise.all(
|
|
cacheNames.filter(function(cacheName){
|
|
return isVersionNewer(staticCacheName.slice(-5), cacheName.slice(-5));
|
|
}).map(function(cacheName){
|
|
|
|
return caches.delete(cacheName);
|
|
})
|
|
);
|
|
})
|
|
);
|
|
});
|
|
|
|
self.addEventListener('fetch', function(event) {
|
|
event.respondWith(
|
|
if (caches.keys().length < 1){
|
|
caches.open(staticCacheName).then(function(cache) {
|
|
return cache.match(event.request).then(function (response) {
|
|
|
|
return response || fetch(event.request).then(function(response) {
|
|
if(event.request.method == "GET")
|
|
cache.put(event.request, response.clone());
|
|
return response;
|
|
});
|
|
});
|
|
});
|
|
if (!('indexedDB' in window)) {
|
|
console.log('This browser doesn\'t support IndexedDB');
|
|
return;
|
|
}
|
|
|
|
var dbPromise = idb.open('cache-db', 1, function(upgradeDb) {
|
|
if (!upgradeDb.objectStoreNames.contains('caches')) {
|
|
var cachedb = upgradeDb.createObjectStore('cache', {keyPath: 'name'});
|
|
|
|
}
|
|
}
|
|
dbPromise.then(function(db) {
|
|
var tx = db.transaction('caches', 'readwrite');
|
|
var store = tx.objectStore('caches');
|
|
var item = {
|
|
name: 'new-cache-availalble',
|
|
version: staticCacheName,
|
|
created: new Date().getTime()
|
|
};
|
|
store.add(item);
|
|
return tx.complete;
|
|
})
|
|
}
|
|
else return false;
|
|
);
|
|
});
|