forked from trent_larson/crowd-funder-for-time-pwa
add a share_target for people to add a photo
This commit is contained in:
@@ -81,7 +81,7 @@ self.addEventListener("push", function (event) {
|
||||
} else {
|
||||
title = payload.title || "Update";
|
||||
}
|
||||
// getNotificationCount is injected from safari-notifications.js at build time by the vue.config.js configureWebpack apply plugin
|
||||
// getNotificationCount is injected from safari-notifications.js at build time by the sw_combine.js script
|
||||
// eslint-disable-next-line no-undef
|
||||
message = await getNotificationCount();
|
||||
}
|
||||
@@ -131,8 +131,27 @@ self.addEventListener("notificationclick", (event) => {
|
||||
);
|
||||
});
|
||||
|
||||
// This is invoked when the user chooses this as a share_target, mapped to share-target in the manifest.
|
||||
self.addEventListener("fetch", (event) => {
|
||||
logConsoleAndDb("Service worker got fetch event.", event);
|
||||
|
||||
// Regular requests not related to Web Share Target.
|
||||
if (event.request.method !== "POST") {
|
||||
event.respondWith(fetch(event.request));
|
||||
return;
|
||||
}
|
||||
|
||||
// Requests related to Web Share share-target Target.
|
||||
event.respondWith(
|
||||
(async () => {
|
||||
const formData = await event.request.formData();
|
||||
const photo = formData.get("photo");
|
||||
// savePhoto is injected from safari-notifications.js at build time by the sw_combine.js script
|
||||
// eslint-disable-next-line no-undef
|
||||
await savePhoto(photo);
|
||||
return Response.redirect("/shared-photo", 303);
|
||||
})(),
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener("error", (event) => {
|
||||
|
||||
@@ -566,6 +566,20 @@ async function getNotificationCount() {
|
||||
return result;
|
||||
}
|
||||
|
||||
// Store the image blob and go immediate to a page to upload it.
|
||||
// @param photo - image Blob to store for later retrieval after redirect
|
||||
async function savePhoto(photo) {
|
||||
try {
|
||||
const db = await openIndexedDB("TimeSafari");
|
||||
const transaction = db.transaction("temp", "readwrite");
|
||||
const store = transaction.objectStore("temp");
|
||||
await updateRecord(store, { id: "shared-photo", blob: photo });
|
||||
transaction.oncomplete = () => db.close();
|
||||
} catch (error) {
|
||||
console.error("safari-notifications logMessage IndexedDB error", error);
|
||||
}
|
||||
}
|
||||
|
||||
self.appendDailyLog = appendDailyLog;
|
||||
self.getNotificationCount = getNotificationCount;
|
||||
self.decodeBase64 = decodeBase64;
|
||||
|
||||
Reference in New Issue
Block a user