Browse Source

enhance: store metadata in localstorage

rcmerci 4 months ago
parent
commit
495357479b

+ 2 - 1
src/main/frontend/handler/repo.cljs

@@ -130,7 +130,8 @@
 (defn combine-local-&-remote-graphs
   [local-repos remote-repos]
   (when-let [repos' (seq (concat (map (fn [{:keys [sync-meta metadata] :as repo}]
-                                        (let [graph-id (some-> (or (:kv/value metadata) (second sync-meta)) str)]
+                                        (let [graph-id (some-> (or (:kv/value metadata)
+                                                                   (second sync-meta)) str)]
                                           (if graph-id (assoc repo :GraphUUID graph-id) repo)))
                                       local-repos)
                                  (some->> remote-repos

+ 12 - 8
src/main/frontend/worker/db_metadata.cljs

@@ -1,13 +1,17 @@
 (ns frontend.worker.db-metadata
   "Fns to read/write metadata.edn file for db-based."
-  (:require [frontend.worker.util :as worker-util]
-            [promesa.core :as p]))
+  (:require ["/frontend/idbkv" :as idb-keyval]))
+
+(defonce ^:private store (delay (idb-keyval/newStore "localforage" "keyvaluepairs" 2)))
+
+(defn- gen-key
+  [repo]
+  (str "metadata###" repo))
 
 (defn <store
   [repo metadata-str]
-  (p/let [^js root (.getDirectory js/navigator.storage)
-          dir-handle (.getDirectoryHandle root (str "." (worker-util/get-pool-name repo)))
-          file-handle (.getFileHandle dir-handle "metadata.edn" #js {:create true})
-          writable (.createWritable file-handle)
-          _ (.write writable metadata-str)]
-    (.close writable)))
+  (idb-keyval/set (gen-key repo) metadata-str @store))
+
+(defn <get
+  [repo]
+  (idb-keyval/get (gen-key repo) @store))

+ 6 - 5
src/main/frontend/worker/db_worker.cljs

@@ -14,6 +14,7 @@
             [frontend.common.missionary :as c.m]
             [frontend.common.thread-api :as thread-api :refer [def-thread-api]]
             [frontend.worker.db-listener :as db-listener]
+            [frontend.worker.db-metadata :as worker-db-metadata]
             [frontend.worker.db.fix :as db-fix]
             [frontend.worker.db.migrate :as db-migrate]
             [frontend.worker.db.validate :as worker-db-validate]
@@ -407,13 +408,14 @@
 
 (defn- <list-all-dbs
   []
-  (let [dir? #(= (.-kind %) "directory")]
+  (let [dir? #(= (.-kind %) "directory")
+        db-dir-prefix ".logseq-pool-"]
     (p/let [^js root (.getDirectory js/navigator.storage)
             values-iter (when (dir? root) (.values root))
             values (when values-iter (iter->vec values-iter))
             current-dir-dirs (filter dir? values)
             db-dirs (filter (fn [file]
-                              (string/starts-with? (.-name file) ".logseq-pool-"))
+                              (string/starts-with? (.-name file) db-dir-prefix))
                             current-dir-dirs)]
       (prn :debug
            :db-dirs (map #(.-name %) db-dirs)
@@ -424,9 +426,8 @@
                                            ;; TODO: DRY
                                            (string/replace "+3A+" ":")
                                            (string/replace "++" "/"))
-                            metadata-file-handle (.getFileHandle dir "metadata.edn" #js {:create true})
-                            metadata-file (.getFile metadata-file-handle)
-                            metadata (.text metadata-file)]
+                            repo (str sqlite-util/db-version-prefix graph-name)
+                            metadata (worker-db-metadata/<get repo)]
                       {:name graph-name
                        :metadata (edn/read-string metadata)})) db-dirs)))))