mirror of
https://github.com/logseq/logseq.git
synced 2026-05-28 06:34:34 +00:00
enhance(rtc): update fns to add/remove asset ops
This commit is contained in:
@@ -158,7 +158,7 @@
|
||||
[asset-uuid->ops asset-uuid]
|
||||
(block-uuid->min-epoch asset-uuid->ops asset-uuid))
|
||||
|
||||
(defn add-ops-to-block-uuid->ops
|
||||
(defn add-ops-aux
|
||||
[ops block-uuid->ops epoch->block-uuid-sorted-map asset-uuid->ops epoch->asset-uuid-sorted-map]
|
||||
(loop [block-uuid->ops block-uuid->ops
|
||||
epoch->block-uuid-sorted-map epoch->block-uuid-sorted-map
|
||||
@@ -307,11 +307,11 @@
|
||||
asset-uuid->ops epoch->asset-uuid-sorted-map]} :current-branch}
|
||||
(get @*ops-store repo)
|
||||
{:keys [block-uuid->ops epoch->block-uuid-sorted-map]}
|
||||
(add-ops-to-block-uuid->ops ops block-uuid->ops epoch->block-uuid-sorted-map
|
||||
(add-ops-aux ops block-uuid->ops epoch->block-uuid-sorted-map
|
||||
asset-uuid->ops epoch->asset-uuid-sorted-map)
|
||||
{old-branch-block-uuid->ops :block-uuid->ops old-epoch->block-uuid-sorted-map :epoch->block-uuid-sorted-map}
|
||||
(when old-branch
|
||||
(add-ops-to-block-uuid->ops ops old-branch-block-uuid->ops old-epoch->block-uuid-sorted-map
|
||||
(add-ops-aux ops old-branch-block-uuid->ops old-epoch->block-uuid-sorted-map
|
||||
old-branch-asset-uuid->ops old-epoch->asset-uuid-sorted-map))]
|
||||
(swap! *ops-store update repo
|
||||
(fn [{:keys [current-branch old-branch]}]
|
||||
@@ -325,6 +325,36 @@
|
||||
:block-uuid->ops old-branch-block-uuid->ops
|
||||
:epoch->block-uuid-sorted-map old-epoch->block-uuid-sorted-map)))))))
|
||||
|
||||
(defn add-asset-ops!
|
||||
[repo ops]
|
||||
(assert (contains? (@*ops-store repo) :current-branch) (@*ops-store repo))
|
||||
(let [ops (ops-coercer ops)
|
||||
{{old-branch-block-uuid->ops :block-uuid->ops
|
||||
old-epoch->block-uuid-sorted-map :epoch->block-uuid-sorted-map
|
||||
old-branch-asset-uuid->ops :asset-uuid->ops
|
||||
old-epoch->asset-uuid-sorted-map :epoch->asset-uuid-sorted-map
|
||||
:as old-branch} :old-branch
|
||||
{:keys [block-uuid->ops epoch->block-uuid-sorted-map
|
||||
asset-uuid->ops epoch->asset-uuid-sorted-map]} :current-branch}
|
||||
(get @*ops-store repo)
|
||||
{:keys [asset-uuid->ops epoch->asset-uuid-sorted-map]}
|
||||
(add-ops-aux ops block-uuid->ops epoch->block-uuid-sorted-map
|
||||
asset-uuid->ops epoch->asset-uuid-sorted-map)
|
||||
{old-branch-asset-uuid->ops :asset-uuid->ops old-epoch->asset-uuid-sorted-map :epoch->asset-uuid-sorted-map}
|
||||
(when old-branch
|
||||
(add-ops-aux ops old-branch-block-uuid->ops old-epoch->block-uuid-sorted-map
|
||||
old-branch-asset-uuid->ops old-epoch->asset-uuid-sorted-map))]
|
||||
(swap! *ops-store update repo
|
||||
(fn [{:keys [current-branch old-branch]}]
|
||||
(cond-> {:current-branch
|
||||
(assoc current-branch
|
||||
:asset-uuid->ops asset-uuid->ops
|
||||
:epoch->asset-uuid-sorted-map epoch->asset-uuid-sorted-map)}
|
||||
old-branch
|
||||
(assoc :old-branch
|
||||
(assoc old-branch
|
||||
:asset-uuid->ops old-branch-asset-uuid->ops
|
||||
:epoch->asset-uuid-sorted-map old-epoch->asset-uuid-sorted-map)))))))
|
||||
|
||||
(defn update-local-tx!
|
||||
[repo t]
|
||||
@@ -426,6 +456,17 @@
|
||||
:block-uuid->ops (dissoc block-uuid->ops block-uuid)
|
||||
:epoch->block-uuid-sorted-map (dissoc epoch->block-uuid-sorted-map min-epoch)))))
|
||||
|
||||
(defn remove-asset-ops!
|
||||
[repo asset-uuid]
|
||||
{:pre [(uuid? asset-uuid)]}
|
||||
(let [repo-ops-store (get @*ops-store repo)
|
||||
{:keys [epoch->asset-uuid-sorted-map asset-uuid->ops]} (:current-branch repo-ops-store)]
|
||||
(assert (contains? repo-ops-store :current-branch) repo)
|
||||
(let [min-epoch (asset-uuid->min-epoch asset-uuid->ops asset-uuid)]
|
||||
(swap! *ops-store update-in [repo :current-branch] assoc
|
||||
:asset-uuid->ops (dissoc asset-uuid->ops asset-uuid)
|
||||
:epoch->asset-uuid-sorted-map (dissoc epoch->asset-uuid-sorted-map min-epoch)))))
|
||||
|
||||
|
||||
(defn <init-load-from-indexeddb!
|
||||
[repo]
|
||||
@@ -440,7 +481,7 @@
|
||||
ops-from-store-coercer
|
||||
(map second))
|
||||
{:keys [block-uuid->ops epoch->block-uuid-sorted-map asset-uuid->ops epoch->asset-uuid-sorted-map]}
|
||||
(add-ops-to-block-uuid->ops ops {} (sorted-map-by <) {} (sorted-map-by <))
|
||||
(add-ops-aux ops {} (sorted-map-by <) {} (sorted-map-by <))
|
||||
r (cond-> {:block-uuid->ops block-uuid->ops
|
||||
:epoch->block-uuid-sorted-map epoch->block-uuid-sorted-map
|
||||
:asset-uuid->ops asset-uuid->ops
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
(let [ops [["move" {:block-uuid "f4abd682-fb9e-4f1a-84bf-5fe11fe7844b" :epoch 1}]
|
||||
["move" {:block-uuid "8e6d8355-ded7-4500-afaa-6f721f3b0dc6" :epoch 2}]]
|
||||
{:keys [block-uuid->ops epoch->block-uuid-sorted-map]}
|
||||
(op-layer/add-ops-to-block-uuid->ops (op-layer/ops-coercer ops) {} (sorted-map-by <) {} (sorted-map-by <))]
|
||||
(op-layer/add-ops-aux (op-layer/ops-coercer ops) {} (sorted-map-by <) {} (sorted-map-by <))]
|
||||
(is (= [{#uuid"f4abd682-fb9e-4f1a-84bf-5fe11fe7844b"
|
||||
{:move ["move" {:block-uuid #uuid"f4abd682-fb9e-4f1a-84bf-5fe11fe7844b", :epoch 1}]},
|
||||
#uuid"8e6d8355-ded7-4500-afaa-6f721f3b0dc6"
|
||||
@@ -34,7 +34,7 @@
|
||||
["update" {:block-uuid "f639f13e-ef6f-4ba5-83b4-67527d27cd02" :epoch 3
|
||||
:updated-attrs {:type {:add #{"type1"}}}}]]
|
||||
{:keys [block-uuid->ops epoch->block-uuid-sorted-map]}
|
||||
(op-layer/add-ops-to-block-uuid->ops (op-layer/ops-coercer ops) {} (sorted-map-by <) {} (sorted-map-by <))]
|
||||
(op-layer/add-ops-aux (op-layer/ops-coercer ops) {} (sorted-map-by <) {} (sorted-map-by <))]
|
||||
(is (= [{#uuid"f639f13e-ef6f-4ba5-83b4-67527d27cd02"
|
||||
{:move
|
||||
["move" {:block-uuid #uuid"f639f13e-ef6f-4ba5-83b4-67527d27cd02", :epoch 1}],
|
||||
@@ -52,7 +52,7 @@
|
||||
["update" {:block-uuid "f639f13e-ef6f-4ba5-83b4-67527d27cd02" :epoch 4
|
||||
:updated-attrs {:content nil :link nil}}]]
|
||||
{:keys [block-uuid->ops]}
|
||||
(op-layer/add-ops-to-block-uuid->ops (op-layer/ops-coercer ops) {} (sorted-map-by <) {} (sorted-map-by <))]
|
||||
(op-layer/add-ops-aux (op-layer/ops-coercer ops) {} (sorted-map-by <) {} (sorted-map-by <))]
|
||||
(is (= ["update"
|
||||
{:block-uuid #uuid "f639f13e-ef6f-4ba5-83b4-67527d27cd02"
|
||||
:updated-attrs {:content nil :link nil}
|
||||
@@ -62,15 +62,25 @@
|
||||
(let [ops1 [["update-page" {:block-uuid #uuid "65564abe-1e79-4ae8-af60-215826cefea9" :epoch 1}]]
|
||||
ops2 [["remove-page" {:block-uuid #uuid "65564abe-1e79-4ae8-af60-215826cefea9" :epoch 2}]]
|
||||
{:keys [block-uuid->ops epoch->block-uuid-sorted-map asset-uuid->ops epoch->asset-uuid-sorted-map]}
|
||||
(op-layer/add-ops-to-block-uuid->ops (op-layer/ops-coercer ops1) {} (sorted-map-by <) {} (sorted-map-by <))
|
||||
(op-layer/add-ops-aux (op-layer/ops-coercer ops1) {} (sorted-map-by <) {} (sorted-map-by <))
|
||||
{block-uuid->ops2 :block-uuid->ops}
|
||||
(op-layer/add-ops-to-block-uuid->ops (op-layer/ops-coercer ops2)
|
||||
(op-layer/add-ops-aux (op-layer/ops-coercer ops2)
|
||||
block-uuid->ops epoch->block-uuid-sorted-map
|
||||
asset-uuid->ops epoch->asset-uuid-sorted-map)]
|
||||
(is (= {#uuid "65564abe-1e79-4ae8-af60-215826cefea9"
|
||||
{:remove-page ["remove-page" {:block-uuid #uuid "65564abe-1e79-4ae8-af60-215826cefea9", :epoch 2}]}}
|
||||
block-uuid->ops2)))))
|
||||
|
||||
(deftest add-ops-to-asset-uuid->ops-test
|
||||
(let [[uuid1 uuid2] (repeatedly random-uuid)
|
||||
ops1 [["update-asset" {:asset-uuid uuid1 :epoch 1}]
|
||||
["update-asset" {:asset-uuid uuid2 :epoch 2}]]
|
||||
{:keys [asset-uuid->ops]}
|
||||
(op-layer/add-ops-aux (op-layer/ops-coercer ops1) {} (sorted-map-by <) {} (sorted-map-by <))]
|
||||
(is (= {uuid1 {:update-asset ["update-asset" {:asset-uuid uuid1 :epoch 1}]}
|
||||
uuid2 {:update-asset ["update-asset" {:asset-uuid uuid2 :epoch 2}]}}
|
||||
asset-uuid->ops))))
|
||||
|
||||
|
||||
(deftest process-test
|
||||
(let [repo (make-db-graph-repo-name "process-test")
|
||||
|
||||
Reference in New Issue
Block a user