Browse Source

Flatten payload params

Artur Paikin 7 years ago
parent
commit
ef1c3306c6

+ 27 - 20
examples/bundled-example/sw.js

@@ -1,12 +1,19 @@
 /* globals clients */
 
-const fileCache = {}
+const fileCache = Object.create(null)
+
+function getCache (name) {
+  if (!fileCache[name]) {
+    fileCache[name] = Object.create(null)
+  }
+  return fileCache[name]
+}
 
 self.addEventListener('install', (event) => {
   console.log('Installing Uppy Service Worker...')
 
   event.waitUntil(Promise.resolve()
-      .then(() => self.skipWaiting()))
+    .then(() => self.skipWaiting()))
 })
 
 self.addEventListener('activate', (event) => {
@@ -21,34 +28,34 @@ function sendMessageToAllClients (msg) {
   })
 }
 
-function addFile (file) {
-  fileCache[file.id] = file
-  console.log('Added file to service worker cache:', file)
+function addFile (store, file) {
+  getCache(store)[file.id] = file.data
+  console.log('Added file blob to service worker cache:', file.data)
 }
 
-function removeFile (fileID) {
-  delete fileCache[fileID]
-  console.log('Removed file from service worker cache:', fileID)
+function removeFile (store, fileID) {
+  delete getCache(store)[fileID]
+  console.log('Removed file blob from service worker cache:', fileID)
 }
 
-function getFiles () {
-  // console.log(Object.keys(fileCache))
-  sendMessageToAllClients({ type: 'ALL_FILES', files: fileCache })
-  // if (Object.keys(fileCache).length > 0) {
-  //   sendMessageToAllClients({ type: 'ALL_FILES', files: fileCache })
-  // }
+function getFiles (store) {
+  sendMessageToAllClients({
+    type: 'uppy/ALL_FILES',
+    store: store,
+    files: getCache(store)
+  })
 }
 
 self.addEventListener('message', (event) => {
   switch (event.data.type) {
-    case 'ADD_FILE':
-      addFile(event.data.data)
+    case 'uppy/ADD_FILE':
+      addFile(event.data.store, event.data.file)
       break
-    case 'REMOVE_FILE':
-      removeFile(event.data.data)
+    case 'uppy/REMOVE_FILE':
+      removeFile(event.data.store, event.data.fileID)
       break
-    case 'GET_FILES':
-      getFiles()
+    case 'uppy/GET_FILES':
+      getFiles(event.data.store)
       break
   }
 })

+ 6 - 6
src/plugins/RestoreFiles/ServiceWorker.js

@@ -29,19 +29,19 @@ function sendMessageToAllClients (msg) {
 }
 
 function addFile (store, file) {
-  getCache(store)[file.id] = file
-  console.log('Added file to service worker cache:', file)
+  getCache(store)[file.id] = file.data
+  console.log('Added file blob to service worker cache:', file.data)
 }
 
 function removeFile (store, fileID) {
   delete getCache(store)[fileID]
-  console.log('Removed file from service worker cache:', fileID)
+  console.log('Removed file blob from service worker cache:', fileID)
 }
 
 function getFiles (store) {
   sendMessageToAllClients({
     type: 'uppy/ALL_FILES',
-    store,
+    store: store,
     files: getCache(store)
   })
 }
@@ -49,10 +49,10 @@ function getFiles (store) {
 self.addEventListener('message', (event) => {
   switch (event.data.type) {
     case 'uppy/ADD_FILE':
-      addFile(event.data.store, event.data.data)
+      addFile(event.data.store, event.data.file)
       break
     case 'uppy/REMOVE_FILE':
-      removeFile(event.data.store, event.data.data)
+      removeFile(event.data.store, event.data.fileID)
       break
     case 'uppy/GET_FILES':
       getFiles(event.data.store)

+ 4 - 8
src/plugins/RestoreFiles/ServiceWorkerStore.js

@@ -4,7 +4,6 @@ class ServiceWorkerStore {
   constructor (core, opts) {
     this.core = core
     this.ready = new Promise((resolve, reject) => {
-      // service worker stuff
       this.core.on('core:file-sw-ready', () => {
         resolve()
       })
@@ -37,7 +36,7 @@ class ServiceWorkerStore {
 
       navigator.serviceWorker.controller.postMessage({
         type: 'uppy/GET_FILES',
-        data: { store: this.name }
+        store: this.name
       })
     })
 
@@ -48,11 +47,8 @@ class ServiceWorkerStore {
     return this.ready.then(() => {
       navigator.serviceWorker.controller.postMessage({
         type: 'uppy/ADD_FILE',
-        data: {
-          store: this.name,
-          id: file.id,
-          data: file.data
-        }
+        store: this.name,
+        file: file
       })
     })
   }
@@ -62,7 +58,7 @@ class ServiceWorkerStore {
       navigator.serviceWorker.controller.postMessage({
         type: 'uppy/REMOVE_FILE',
         store: this.name,
-        data: fileID
+        fileID: fileID
       })
     })
   }

+ 8 - 11
src/plugins/RestoreFiles/index.js

@@ -3,13 +3,12 @@ const ServiceWorkerStore = require('./ServiceWorkerStore')
 const IndexedDBStore = require('./IndexedDBStore')
 
 /**
- * Persistent State
- *
- * Helps debug Uppy: loads saved state from localStorage, so when you restart the page,
- * your state is right where you left off. If something goes wrong, clear uppyState
- * in your localStorage, using the devTools
- *
- */
+* Restore Files plugin — restores selected files and resumes uploads
+* after a closed tab or a browser crash!
+*
+* Uses localStorage, IndexedDB and ServiceWorker to do its magic, read more:
+* https://uppy.io/blog/2017/07/golden-retriever/
+*/
 module.exports = class RestoreFiles extends Plugin {
   constructor (core, opts) {
     super(core, opts)
@@ -17,12 +16,10 @@ module.exports = class RestoreFiles extends Plugin {
     this.id = 'RestoreFiles'
     this.title = 'Restore Files'
 
-    // set default options
     const defaultOptions = {
       serviceWorker: false
     }
 
-    // merge default options with the ones set by user
     this.opts = Object.assign({}, defaultOptions, opts)
 
     this.ServiceWorkerStore = null
@@ -59,7 +56,6 @@ module.exports = class RestoreFiles extends Plugin {
 
   loadFileBlobsFromServiceWorker () {
     this.ServiceWorkerStore.list().then((blobs) => {
-      console.log(blobs)
       const numberOfFilesRecovered = Object.keys(blobs).length
       const numberOfFilesTryingToRecover = Object.keys(this.core.state.files).length
       if (numberOfFilesRecovered === numberOfFilesTryingToRecover) {
@@ -76,6 +72,7 @@ module.exports = class RestoreFiles extends Plugin {
   loadFileBlobsFromIndexedDB () {
     this.IndexedDBStore.list().then((blobs) => {
       const numberOfFilesRecovered = Object.keys(blobs).length
+
       if (numberOfFilesRecovered > 0) {
         this.core.log(`Successfully recovered ${numberOfFilesRecovered} blobs from Indexed DB!`)
         this.core.info(`Successfully recovered ${numberOfFilesRecovered} files`, 'success', 3000)
@@ -88,7 +85,7 @@ module.exports = class RestoreFiles extends Plugin {
   onBlobsLoaded (blobs) {
     const updatedFiles = Object.assign({}, this.core.state.files)
     Object.keys(blobs).forEach((fileID) => {
-      const cachedData = blobs[fileID].data
+      const cachedData = blobs[fileID]
 
       const updatedFileData = {
         data: cachedData,