diff --git a/public/scripts/ui.js b/public/scripts/ui.js index b26d600..f80a9b2 100644 --- a/public/scripts/ui.js +++ b/public/scripts/ui.js @@ -1191,12 +1191,17 @@ class WebShareTargetUI { console.log('Shared Target Text:', '"' + shareTargetText + '"'); Events.fire('activate-paste-mode', {files: [], text: shareTargetText}) } else if (share_target_type === "files") { - caches.match("share_target_files") - .then(files => { - console.debug(files) - Events.fire('activate-paste-mode', {files: files, text: ""}) - }) - caches.delete("share_target_files").then( _ => console.log("shared files deleted from cache")); + const openRequest = window.indexedDB.open('pairdrop_store') + openRequest.onsuccess( db => { + const tx = db.transaction('share_target_files', 'readwrite'); + const store = tx.objectStore('share_target_files'); + const request = store.getAll(); + request.onsuccess = _ => { + Events.fire('activate-paste-mode', {files: request.result, text: ""}) + const clearRequest = store.clear() + clearRequest.onsuccess = _ => db.close(); + } + }) } window.history.replaceState({}, "Rewrite URL", '/'); } @@ -1251,7 +1256,7 @@ class PersistentStorage { this.logBrowserNotCapable(); return; } - const DBOpenRequest = window.indexedDB.open('pairdrop_store'); + const DBOpenRequest = window.indexedDB.open('pairdrop_store', 2); DBOpenRequest.onerror = (e) => { this.logBrowserNotCapable(); console.log('Error initializing database: '); @@ -1263,9 +1268,24 @@ class PersistentStorage { DBOpenRequest.onupgradeneeded = (e) => { const db = e.target.result; db.onerror = e => console.log('Error loading database: ' + e); - db.createObjectStore('keyval'); - const roomSecretsObjectStore = db.createObjectStore('room_secrets', {autoIncrement: true}); - roomSecretsObjectStore.createIndex('secret', 'secret', { unique: true }); + try { + db.createObjectStore('keyval'); + } catch (error) { + console.log("Object store named 'keyval' already exists") + } + + try { + const roomSecretsObjectStore = db.createObjectStore('room_secrets', {autoIncrement: true}); + roomSecretsObjectStore.createIndex('secret', 'secret', { unique: true }); + } catch (error) { + console.log("Object store named 'room_secrets' already exists") + } + + try { + db.createObjectStore('share_target_files'); + } catch (error) { + console.log("Object store named 'share_target_files' already exists") + } } } @@ -1310,6 +1330,7 @@ class PersistentStorage { } }); } + static delete(key) { return new Promise((resolve, reject) => { const DBOpenRequest = window.indexedDB.open('pairdrop_store'); diff --git a/public/service-worker.js b/public/service-worker.js index 3a21c71..23c8b4b 100644 --- a/public/service-worker.js +++ b/public/service-worker.js @@ -36,19 +36,17 @@ self.addEventListener('fetch', function(event) { const text = formData.get("text"); const url = formData.get("url"); const files = formData.get("files"); - console.debug(title) - console.debug(text) - console.debug(url) - console.debug(files) let share_url = "/"; if (files.length > 0) { - // Save to Cache? - caches.open("share_target_files") - .then(cache => { - cache.addAll(files) - console.debug("files added to cache") - }); share_url = "/?share-target=files"; + const db = await window.indexedDB.open('pairdrop_store'); + const tx = db.transaction('share_target_files', 'readwrite'); + const store = tx.objectStore('share_target_files'); + for (let i=0; i 0 || text.length > 0 || url.length) { share_url = `/?share-target=text&title=${title}&text=${text}&url=${url}`; }