Ver código fonte

fix(rtc): also clear db metadata.edn when remove-remote-graph-info

rcmerci 1 ano atrás
pai
commit
de7ada4124

+ 5 - 17
src/main/frontend/db_worker.cljs

@@ -10,6 +10,7 @@
             [datascript.core :as d]
             [datascript.storage :refer [IStorage]]
             [frontend.worker.async-util :include-macros true :refer [<?] :as async-util]
+            [frontend.worker.db-metadata :as worker-db-metadata]
             [frontend.worker.export :as worker-export]
             [frontend.worker.file :as file]
             [frontend.worker.handler.page :as worker-page]
@@ -36,15 +37,11 @@
 
 (defonce transit-w (transit/writer :json))
 
-(defn- get-pool-name
-  [graph-name]
-  (str "logseq-pool-" (sqlite-common-db/sanitize-db-name graph-name)))
-
 (defn- <get-opfs-pool
   [graph]
   (when-not @*publishing?
     (or (worker-state/get-opfs-pool graph)
-        (p/let [^js pool (.installOpfsSAHPoolVfs @*sqlite #js {:name (get-pool-name graph)
+        (p/let [^js pool (.installOpfsSAHPoolVfs @*sqlite #js {:name (worker-util/get-pool-name graph)
                                                                :initialCapacity 20})]
           (swap! *opfs-pools assoc graph pool)
           pool))))
@@ -228,20 +225,11 @@
                       {:name graph-name
                        :metadata (edn/read-string metadata)})) db-dirs)))))
 
-(defn- <store-metadata
-  [graph metadata-str]
-  (p/let [^js root (.getDirectory js/navigator.storage)
-          dir-handle (.getDirectoryHandle root (str "." (get-pool-name graph)))
-          file-handle (.getFileHandle dir-handle "metadata.edn" #js {:create true})
-          writable (.createWritable file-handle)
-          _ (.write writable metadata-str)]
-    (.close writable)))
-
 (defn- <db-exists?
   [graph]
   (->
    (p/let [^js root (.getDirectory js/navigator.storage)
-           _dir-handle (.getDirectoryHandle root (str "." (get-pool-name graph)))]
+           _dir-handle (.getDirectoryHandle root (str "." (worker-util/get-pool-name graph)))]
      true)
    (p/catch
     (fn [_e]                           ; not found
@@ -278,8 +266,8 @@
    (init-sqlite-module!))
 
   (storeMetadata
-   [_this graph metadata-str]
-   (<store-metadata graph metadata-str))
+   [_this repo metadata-str]
+   (worker-db-metadata/<store repo metadata-str))
 
   (listDB
    [_this]

+ 13 - 0
src/main/frontend/worker/db_metadata.cljs

@@ -0,0 +1,13 @@
+(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]))
+
+(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)))

+ 8 - 4
src/main/frontend/worker/rtc/core.cljs

@@ -6,11 +6,13 @@
             [cljs-time.coerce :as tc]
             [cljs-time.core :as t]
             [cljs.core.async :as async :refer [<! >! chan go go-loop]]
+            [cljs.core.async.interop :include-macros true :refer [<p!]]
             [clojure.set :as set]
             [clojure.string :as string]
             [cognitect.transit :as transit]
             [datascript.core :as d]
             [frontend.worker.async-util :include-macros true :refer [<? go-try]]
+            [frontend.worker.db-metadata :as worker-db-metadata]
             [frontend.worker.handler.page :as worker-page]
             [frontend.worker.handler.page.rename :as worker-page-rename]
             [frontend.worker.rtc.asset-sync :as asset-sync]
@@ -851,10 +853,10 @@
   "throw `ex-break-rtc-loop` when need to quit current rtc-loop"
   (fn [resp & _] (comp :type :ex-data resp)))
 
-(declare remove-remote-graph-info stop-rtc stop-rtc-helper)
+(declare <remove-remote-graph-info stop-rtc stop-rtc-helper)
 (defmethod handle-remote-genernal-exception :graph-not-exist [_ state]
   (when-let [repo (some-> state :*repo deref)]
-    (remove-remote-graph-info repo)
+    (<remove-remote-graph-info repo)
     (stop-rtc-helper state)
     (stop-rtc state)
     (throw ex-break-rtc-loop)))
@@ -926,11 +928,13 @@
       (<! (async/timeout 2000))
       (pos? (op-mem-layer/get-unpushed-block-update-count repo)))))
 
-(defn- remove-remote-graph-info
+(defn- <remove-remote-graph-info
   "when remote-graph is deleted or not-found,
   remove remote-graph-info in client-side"
   [repo]
-  (op-mem-layer/remove-ops-store! repo))
+  (go
+    (op-mem-layer/remove-ops-store! repo)
+    (<p! (worker-db-metadata/<store repo (pr-str {})))))
 
 (defn- stop-rtc-helper
   [state]

+ 13 - 7
src/main/frontend/worker/util.cljc

@@ -2,12 +2,13 @@
   "Worker utils"
   #?(:cljs (:require-macros [frontend.worker.util]))
   #?(:cljs (:refer-clojure :exclude [format]))
-  #?(:cljs (:require [clojure.string :as string]
-            ["remove-accents" :as removeAccents]
-            [logseq.common.util :as common-util]
-            [clojure.core.async :as async]
-            [cljs.core.async.impl.channels :refer [ManyToManyChannel]]
-            [logseq.db :as ldb])))
+  #?(:cljs (:require ["remove-accents" :as removeAccents]
+                     [cljs.core.async.impl.channels :refer [ManyToManyChannel]]
+                     [clojure.core.async :as async]
+                     [clojure.string :as string]
+                     [logseq.common.util :as common-util]
+                     [logseq.db :as ldb]
+                     [logseq.db.sqlite.common-db :as sqlite-common-db])))
 
 ;; Copied from https://github.com/tonsky/datascript-todo
 #?(:clj
@@ -93,4 +94,9 @@
      (defn post-message
        [type data]
        (when (exists? js/self)
-         (.postMessage js/self (frontend.worker.util/profile "Worker write transit: " (ldb/write-transit-str [type data])))))))
+         (.postMessage js/self (frontend.worker.util/profile "Worker write transit: " (ldb/write-transit-str [type data])))))
+
+     (defn get-pool-name
+       [graph-name]
+       (str "logseq-pool-" (sqlite-common-db/sanitize-db-name graph-name)))
+     ))