mirror of
https://github.com/9001/copyparty.git
synced 2026-06-21 05:32:25 -06:00
PWA: serviceworker wip
This commit is contained in:
parent
d80f3b76c5
commit
4ce26d337a
|
|
@ -336,6 +336,7 @@ class HttpCli(object):
|
||||||
"""returns true if connection can be reused"""
|
"""returns true if connection can be reused"""
|
||||||
self.out_headers = {
|
self.out_headers = {
|
||||||
"Cache-Control": "no-store, max-age=0",
|
"Cache-Control": "no-store, max-age=0",
|
||||||
|
"Service-Worker-Allowed": "/",
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.args.early_ban and self.is_banned():
|
if self.args.early_ban and self.is_banned():
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
// service worker. required for PWAs
|
// service worker. required for PWAs
|
||||||
// https://www.digitalapplied.com/blog/progressive-web-apps-2026-pwa-performance-guide
|
// https://www.digitalapplied.com/blog/progressive-web-apps-2026-pwa-performance-guide
|
||||||
// Register service worker on page load
|
// Register service worker on page load
|
||||||
|
console.log('sw.js')
|
||||||
if ('serviceWorker' in navigator) {
|
if ('serviceWorker' in navigator) {
|
||||||
|
console.log('sw load')
|
||||||
self.addEventListener("fetch", (event) => {
|
self.addEventListener("fetch", (event) => {
|
||||||
// Regular requests not related to Web Share Target.
|
// Regular requests not related to Web Share Target.
|
||||||
if (event.request.method !== "POST" || !event.request.action.has("share-target")) {
|
if (event.request.method !== "POST" || !event.request.action.has("share-target")) {
|
||||||
|
console.log('normal response')
|
||||||
event.respondWith(fetch(event.request));
|
event.respondWith(fetch(event.request));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -12,15 +15,41 @@ if ('serviceWorker' in navigator) {
|
||||||
// Requests related to Web Share Target.
|
// Requests related to Web Share Target.
|
||||||
event.respondWith(
|
event.respondWith(
|
||||||
(async () => {
|
(async () => {
|
||||||
const formData = await event.request.formData();
|
const formData = await event.request.formData();
|
||||||
const files = formData.get("files") || "";
|
const files = formData.get("files") || "";
|
||||||
const responseUrl = '/'; // (ToDo: remember last upload dir)
|
console.log('sw share:')
|
||||||
// ToDo: keep file references in clipboard
|
console.log(files)
|
||||||
// -> upload on paste
|
await addResourcesToCache(files)
|
||||||
event.respondWith(fetch(event.request));
|
|
||||||
alert(files);
|
// const responseUrl = '/'; // (ToDo: remember last upload dir)
|
||||||
return;
|
// ToDo: keep file references in clipboard
|
||||||
|
// (maybe read from cache on page load somehow)
|
||||||
|
// -> upload on paste
|
||||||
|
|
||||||
|
// Copy existing headers
|
||||||
|
const headers = new Headers(event.request.headers);
|
||||||
|
|
||||||
|
// Set a new header
|
||||||
|
var pw = await CookieStore.get('cppwd');
|
||||||
|
headers.set('pw', pw);
|
||||||
|
|
||||||
|
headers.delete('origin'); // 99% sure this doesn't work, but hey
|
||||||
|
|
||||||
|
const newRequest = new Request(event.request, {
|
||||||
|
mode: 'cors',
|
||||||
|
credentials: 'omit',
|
||||||
|
headers: headers
|
||||||
|
})
|
||||||
|
return fetch(newRequest)
|
||||||
})(),
|
})(),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
self.addEventListener('install', (event) => {
|
||||||
|
console.log('sw wait skip')
|
||||||
|
self.skipWaiting(); // insta replace old service workers (helpful for dev)
|
||||||
|
});
|
||||||
|
const addResourcesToCache = async (resources) => {
|
||||||
|
const cache = await caches.open("files");
|
||||||
|
await cache.addAll(resources);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue