[add] service worker & offline reader
This commit is contained in:
78
assets/index.js
Normal file
78
assets/index.js
Normal file
@@ -0,0 +1,78 @@
|
||||
// Install Service Worker
|
||||
async function installServiceWorker() {
|
||||
// Attempt Installation
|
||||
await SW.install()
|
||||
.then(() => console.log("[installServiceWorker] Service Worker Installed"))
|
||||
.catch((e) =>
|
||||
console.log("[installServiceWorker] Service Worker Install Error:", e)
|
||||
);
|
||||
}
|
||||
|
||||
// Flush Cached Progress & Activity
|
||||
async function flushCachedData() {
|
||||
let allProgress = await IDB.find(/^PROGRESS-/, true);
|
||||
let allActivity = await IDB.get("ACTIVITY");
|
||||
|
||||
console.log("[flushCachedData] Flushing Data:", { allProgress, allActivity });
|
||||
|
||||
Object.entries(allProgress).forEach(([id, progressEvent]) => {
|
||||
flushProgress(progressEvent)
|
||||
.then(() => {
|
||||
console.log("[flushCachedData] Progress Flush Success:", id);
|
||||
return IDB.del(id);
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log("[flushCachedData] Progress Flush Failure:", id, e);
|
||||
});
|
||||
});
|
||||
|
||||
if (!allActivity) return;
|
||||
|
||||
flushActivity(allActivity)
|
||||
.then(() => {
|
||||
console.log("[flushCachedData] Activity Flush Success");
|
||||
return IDB.del("ACTIVITY");
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log("[flushCachedData] Activity Flush Failure", e);
|
||||
});
|
||||
}
|
||||
|
||||
function flushActivity(activityEvent) {
|
||||
console.log("[flushActivity] Flushing Activity...");
|
||||
|
||||
// Flush Activity
|
||||
return fetch("/api/ko/activity", {
|
||||
method: "POST",
|
||||
body: JSON.stringify(activityEvent),
|
||||
}).then(async (r) =>
|
||||
console.log("[flushActivity] Flushed Activity:", {
|
||||
response: r,
|
||||
json: await r.json(),
|
||||
data: activityEvent,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
function flushProgress(progressEvent) {
|
||||
console.log("[flushProgress] Flushing Progress...");
|
||||
|
||||
// Flush Progress
|
||||
return fetch("/api/ko/syncs/progress", {
|
||||
method: "PUT",
|
||||
body: JSON.stringify(progressEvent),
|
||||
}).then(async (r) =>
|
||||
console.log("[flushProgress] Flushed Progress:", {
|
||||
response: r,
|
||||
json: await r.json(),
|
||||
data: progressEvent,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
// Event Listeners
|
||||
window.addEventListener("online", flushCachedData);
|
||||
|
||||
// Initial Load
|
||||
flushCachedData();
|
||||
installServiceWorker();
|
||||
Reference in New Issue
Block a user