Browse Source

enhance(rtc): client-ops generator ignore attrs if possible

rcmerci 11 months ago
parent
commit
3a43a81bc5

+ 19 - 23
deps/db/src/logseq/db/frontend/kv_entity.cljs

@@ -1,28 +1,24 @@
 (ns logseq.db.frontend.kv-entity
-  "Define kv entities used by logseq db"
+  "kv entities used by logseq db"
   (:require [logseq.common.defkeywords :refer [defkeywords]]))
 
 (defkeywords
-  :logseq.kv/db-type {:doc ":kv/value = \"db\" if it's a db-graph"}
-  :logseq.kv/graph-uuid {:doc "store graph-uuid if it's a rtc enabled graph"
-                         :rtc {:rtc/ignore-entity-when-init-upload true
-                               :rtc/ignore-entity-when-init-download true}}
-  :logseq.kv/import-type {:doc ":sqlite-db if import from sqlite.
-                                FIXME: any other values?"
-                          :rtc {:rtc/ignore-entity-when-init-upload true
-                                :rtc/ignore-entity-when-init-download true}}
-  :logseq.kv/imported-at {:doc "graph-import time"
-                          :rtc {:rtc/ignore-entity-when-init-upload true
-                                :rtc/ignore-entity-when-init-download true}}
-  :logseq.kv/graph-local-tx {:doc "local rtc tx-id"
-                             :rtc {:rtc/ignore-entity-when-init-upload true
-                                   :rtc/ignore-entity-when-init-download true}}
-  :logseq.kv/schema-version {:doc "schema version"}
-  :logseq.kv/graph-created-at {:doc "graph create time"}
-  :logseq.kv/latest-code-lang {:doc "latest lang used by code-block"
-                               :rtc {:rtc/ignore-entity-when-init-upload true
-                                     :rtc/ignore-entity-when-init-download true}}
-  :logseq.kv/graph-backup-folder {:doc "graph backup-folder"
-                                  :rtc {:rtc/ignore-entity-when-init-upload true
-                                        :rtc/ignore-entity-when-init-download true}}
+  :logseq.kv/db-type                      {:doc ":kv/value = \"db\" if it's a db-graph"}
+  :logseq.kv/graph-uuid                   {:doc "store graph-uuid if it's a rtc enabled graph"
+                                           :rtc {:rtc/ignore-entity-when-init-upload true
+                                                 :rtc/ignore-entity-when-init-download true}}
+  :logseq.kv/import-type                  {:doc ":sqlite-db if import from sqlite.
+                                                 FIXME: any other values?"}
+  :logseq.kv/imported-at                  {:doc "graph-import time"}
+  :logseq.kv/graph-local-tx               {:doc "local rtc tx-id"
+                                           :rtc {:rtc/ignore-entity-when-init-upload true
+                                                 :rtc/ignore-entity-when-init-download true}}
+  :logseq.kv/schema-version               {:doc "schema version"}
+  :logseq.kv/graph-created-at             {:doc "graph create time"}
+  :logseq.kv/latest-code-lang             {:doc "latest lang used by code-block"
+                                           :rtc {:rtc/ignore-entity-when-init-upload true
+                                                 :rtc/ignore-entity-when-init-download true}}
+  :logseq.kv/graph-backup-folder          {:doc "graph backup-folder"
+                                           :rtc {:rtc/ignore-entity-when-init-upload true
+                                                 :rtc/ignore-entity-when-init-download true}}
   :logseq.kv/graph-initial-schema-version {:doc "schema-version when graph created"})

+ 14 - 8
src/main/frontend/worker/rtc/db_listener.cljs

@@ -4,6 +4,7 @@
             [datascript.core :as d]
             [frontend.worker.db-listener :as db-listener]
             [frontend.worker.rtc.client-op :as client-op]
+            [frontend.worker.rtc.const :as rtc-const]
             [logseq.db :as ldb]
             [logseq.db.frontend.property :as db-property]))
 
@@ -26,7 +27,7 @@
     :db/index :db/valueType :db/cardinality})
 
 (def ^:private watched-attr-ns
-  (conj db-property/logseq-property-namespaces "logseq.class" "logseq.kv"))
+  (conj db-property/logseq-property-namespaces "logseq.class"))
 
 (defn- watched-attr?
   [attr]
@@ -72,7 +73,7 @@
   (some-> add?->v->t (get k) first))
 
 (defn- entity-datoms=>ops
-  [db-before db-after e->a->add?->v->t entity-datoms]
+  [db-before db-after e->a->add?->v->t ignore-attr-set entity-datoms]
   (let [e                        (ffirst entity-datoms)
         entity                   (d/entity db-after e)
         {block-uuid :block/uuid} entity
@@ -86,12 +87,15 @@
         [retract-block-uuid t1]  (some-> add?->block-uuid->t (get false) first)
         [retract-block-name _]   (some-> add?->block-name->t (get false) first)
         [add-block-name t2]      (some-> add?->block-name->t latest-add?->v->t (get-first-vt true))
-        [add-block-title t3]     (some-> add?->block-title->t
-                                         latest-add?->v->t
-                                         (get-first-vt true))
+        [add-block-title t3]     (some-> add?->block-title->t latest-add?->v->t (get-first-vt true))
         [add-block-parent t4]    (some-> add?->block-parent->t latest-add?->v->t (get-first-vt true))
         [add-block-order t5]     (some-> add?->block-order->t latest-add?->v->t (get-first-vt true))
-        a->add?->v->t*           (into {} (filter (fn [[a _]] (watched-attr? a)) a->add?->v->t))]
+        a->add?->v->t*           (into {}
+                                       (filter
+                                        (fn [[a _]]
+                                          (and (watched-attr? a)
+                                               (not (contains? ignore-attr-set a)))))
+                                       a->add?->v->t)]
     (cond
       (and retract-block-uuid retract-block-name)
       [[:remove-page t1 {:block-uuid retract-block-uuid}]]
@@ -114,8 +118,10 @@
 
 (defn- generate-rtc-ops
   [repo db-before db-after same-entity-datoms-coll e->a->v->add?->t]
-  (let [ops (mapcat (partial entity-datoms=>ops db-before db-after e->a->v->add?->t)
-                    same-entity-datoms-coll)]
+  (let [ops (mapcat
+             (partial entity-datoms=>ops
+                      db-before db-after e->a->v->add?->t @rtc-const/*ignore-attrs-when-syncing)
+             same-entity-datoms-coll)]
     (when (seq ops)
       (client-op/add-ops repo ops))))
 

+ 1 - 1
src/main/frontend/worker/rtc/remote_update.cljs

@@ -375,7 +375,7 @@ so need to pull earlier remote-data from websocket."})
     :property.value/content})
 
 (def ^:private watched-attr-ns
-  (conj db-property/logseq-property-namespaces "logseq.class" "logseq.kv"))
+  (conj db-property/logseq-property-namespaces "logseq.class"))
 
 (defn- update-op-watched-attr?
   [attr]

+ 5 - 1
src/test/frontend/worker/rtc/db_listener_test.cljs

@@ -37,6 +37,7 @@
           r (#'subject/entity-datoms=>ops (:db-before remove-whiteboard-page-block)
                                           (:db-after remove-whiteboard-page-block)
                                           (tx-data=>e->a->add?->v->t (:tx-data remove-whiteboard-page-block))
+                                          nil
                                           (map vec (:tx-data remove-whiteboard-page-block)))]
       (is (= [[:remove-page {:block-uuid block-uuid}]]
              (map (fn [[op-type _t op-value]] [op-type op-value]) r)))))
@@ -54,10 +55,12 @@
                    [:db/add 1000000 :block/tags :logseq.class/Property]
                    [:db/add 1000000 :block/order "b0T"]
                    [:db/add 1000000 :block/name "qqq"]
-                   [:db/add 1000000 :block/title "qqq"]]
+                   [:db/add 1000000 :block/title "qqq"]
+                   [:db/add 1000000 :logseq.property/ignored-attr-x "111"]]
           {:keys [db-before db-after tx-data]} (d/transact! conn tx-data)
           ops (#'subject/entity-datoms=>ops db-before db-after
                                             (tx-data=>e->a->add?->v->t tx-data)
+                                            #{:logseq.property/ignored-attr-x}
                                             (map vec tx-data))]
       (is (=
            [[:move {:block-uuid #uuid "66558abf-6512-469d-9e83-8f1ba0be9305"}]
@@ -93,6 +96,7 @@
           {:keys [db-before db-after tx-data]} (d/transact! conn tx-data)
           ops (#'subject/entity-datoms=>ops db-before db-after
                                             (tx-data=>e->a->add?->v->t tx-data)
+                                            nil
                                             (map vec tx-data))]
       (is (=
            [[:update-page {:block-uuid #uuid "66856a29-6eb3-4122-af97-8580a853c6a6"}]