Ver código fonte

refactor: move fs/pfs to db-worker.js

Tienson Qin 1 mês atrás
pai
commit
1a9b5b843c

+ 0 - 11
resources/index.html

@@ -35,17 +35,6 @@
   window.EXCALIDRAW_ASSET_PATH = "./js/";
 </script>
 <script src="./js/magic_portal.js"></script>
-<script>let worker = new Worker('./js/worker.js')
-const portal = new MagicPortal(worker);
-(async () => {
-  const fs = await portal.get('fs')
-  window.fs = fs
-  const pfs = await portal.get('pfs')
-  window.pfs = pfs
-  const workerThread = await portal.get('workerThread')
-  window.workerThread = workerThread
-})()
-</script>
 <script defer src="./js/highlight.min.js"></script>
 <script defer src="./js/interact.min.js"></script>
 <script defer src="./js/marked.min.js"></script>

+ 0 - 9
resources/js/worker.js

@@ -27,15 +27,6 @@ if (detect() === 'Worker') {
 
   portal.set('workerThread', {
     rimraf: async function (path) {
-      // try {
-      //   // First assume path is itself a file
-      //   await pfs.unlink(path)
-      //   // if that worked we're done
-      //   return
-      // } catch (err) {
-      //   // Otherwise, path must be a directory
-      //   if (err.code !== 'EISDIR') throw err
-      // }
       // Knowing path is a directory,
       // first, assume everything inside path is a file.
       let files = await pfs.readdir(path);

+ 0 - 11
resources/mobile/index.html

@@ -11,17 +11,6 @@
 <div id="root"></div>
 <script>var isCapacitorNew=true</script>
 <script src="./js/magic_portal.js"></script>
-<script>let worker = new Worker('./js/worker.js')
-const portal = new MagicPortal(worker);
-(async () => {
-  const fs = await portal.get('fs')
-  window.fs = fs
-  const pfs = await portal.get('pfs')
-  window.pfs = pfs
-  const workerThread = await portal.get('workerThread')
-  window.workerThread = workerThread
-})()
-</script>
 <script defer src="./js/highlight.min.js"></script>
 <script defer src="./js/interact.min.js"></script>
 <script defer src="./js/marked.min.js"></script>

+ 3 - 1
src/main/frontend/handler/worker.cljs

@@ -1,6 +1,7 @@
 (ns frontend.handler.worker
   "Handle messages received from the webworkers"
   (:require [cljs-bean.core :as bean]
+            [clojure.string :as string]
             [frontend.handler.file-based.file :as file-handler]
             [frontend.handler.notification :as notification]
             [frontend.state :as state]
@@ -90,4 +91,5 @@
                   (if (string? data)
                     (let [[e payload] (ldb/read-transit-str data)]
                       (handle (keyword e) wrapped-worker payload))
-                    (js/console.error "Worker received invalid data from worker: " data)))))))))
+                    (when-not (string/starts-with? (.-type data) "MP_")
+                      (js/console.error "Worker received invalid data from worker: " data))))))))))

+ 11 - 0
src/main/frontend/persist_db/browser.cljs

@@ -84,11 +84,22 @@
                  :pages-directory (config/get-pages-directory)}]
     (state/<invoke-db-worker :thread-api/transact repo tx-data tx-meta context)))
 
+(defn- set-worker-fs
+  [worker]
+  (p/let [portal (js/MagicPortal. worker)
+          fs (.get portal "fs")
+          pfs (.get portal "pfs")
+          worker-thread (.get portal "workerThread")]
+    (set! (.-fs js/window) fs)
+    (set! (.-pfs js/window) pfs)
+    (set! (.-workerThread js/window) worker-thread)))
+
 (defn start-db-worker!
   []
   (when-not util/node-test?
     (let [worker-url (if config/publishing? "static/js/db-worker.js" "js/db-worker.js")
           worker (js/Worker. (str worker-url "?electron=" (util/electron?) "&publishing=" config/publishing?))
+          _ (set-worker-fs worker)
           wrapped-worker* (Comlink/wrap worker)
           wrapped-worker (fn [qkw direct-pass? & args]
                            (p/let [result (.remoteInvoke ^js wrapped-worker*

+ 2 - 0
src/main/frontend/worker/db_worker.cljs

@@ -53,6 +53,8 @@
             [missionary.core :as m]
             [promesa.core :as p]))
 
+(.importScripts js/self "worker.js")
+
 (defonce *sqlite worker-state/*sqlite)
 (defonce *sqlite-conns worker-state/*sqlite-conns)
 (defonce *datascript-conns worker-state/*datascript-conns)