feat: integrated Web Share Target API for PWA
This commit is contained in:
38
ui/src/custom-service-worker.js
Normal file
38
ui/src/custom-service-worker.js
Normal file
@@ -0,0 +1,38 @@
|
||||
const URL_PATTERN =
|
||||
/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/gi;
|
||||
|
||||
self.addEventListener("fetch", (event) => {
|
||||
if (event.request.method === "GET") {
|
||||
const url = new URL(event.request.url);
|
||||
|
||||
if (url.pathname.endsWith("/share-target")) {
|
||||
const urlRegExp = new RegExp(URL_PATTERN);
|
||||
const sharedText = url.searchParams.get("text");
|
||||
const matches = [...sharedText.matchAll(urlRegExp)].map((m) => m[0]);
|
||||
|
||||
event.respondWith(
|
||||
(async () => {
|
||||
await Promise.all(
|
||||
matches.map((url) => {
|
||||
return fetch("/add", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
url,
|
||||
quality: "best",
|
||||
format: "any",
|
||||
auto_start: true,
|
||||
}),
|
||||
});
|
||||
})
|
||||
);
|
||||
return Response.redirect("/", 303);
|
||||
})()
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
importScripts("./ngsw-worker.js");
|
||||
Reference in New Issue
Block a user