mirror of https://github.com/logseq/logseq
enhance(rtc): update-asset handler
parent
20a06f820d
commit
6b435dda25
|
@ -4,10 +4,12 @@
|
||||||
(:require [malli.core :as m]
|
(:require [malli.core :as m]
|
||||||
[malli.util :as mu]
|
[malli.util :as mu]
|
||||||
[cljs.core.async :as async :refer [<! >! chan go go-loop]]
|
[cljs.core.async :as async :refer [<! >! chan go go-loop]]
|
||||||
[frontend.db.rtc.const :as rtc-const]
|
[frontend.worker.rtc.const :as rtc-const]
|
||||||
[frontend.db.rtc.op-mem-layer :as op-mem-layer]
|
[frontend.worker.rtc.op-mem-layer :as op-mem-layer]
|
||||||
[frontend.handler.user :as user]
|
[frontend.handler.user :as user]
|
||||||
[frontend.db.rtc.ws :as ws]))
|
[frontend.worker.rtc.ws :as ws]
|
||||||
|
[frontend.worker.async-util :include-macros true :refer [<?]]
|
||||||
|
[datascript.core :as d]))
|
||||||
|
|
||||||
(def state-schema
|
(def state-schema
|
||||||
[:map {:closed true}
|
[:map {:closed true}
|
||||||
|
@ -33,13 +35,37 @@
|
||||||
;; TODO
|
;; TODO
|
||||||
)
|
)
|
||||||
|
|
||||||
|
(defn <upload-client-op-loop
|
||||||
|
[state graph-uuid repo conn]
|
||||||
|
(go-loop []
|
||||||
|
(when-let [{min-epoch-asset-ops :ops asset-uuid :asset-uuid} (op-mem-layer/get-min-epoch-asset-ops repo)]
|
||||||
|
(try
|
||||||
|
(doseq [[tp _op] min-epoch-asset-ops]
|
||||||
|
(case tp
|
||||||
|
:update-asset
|
||||||
|
(let [asset-entity (d/pull @conn '[*] [:asset/uuid asset-uuid])]
|
||||||
|
(<? (ws/<send&receive state {:action "update-assets" :graph-uuid graph-uuid
|
||||||
|
:create [{:asset-uuid asset-uuid
|
||||||
|
:asset-name (or (some-> asset-entity :asset/meta :name)
|
||||||
|
"default-name")}]})))
|
||||||
|
:remove-asset
|
||||||
|
(<? (ws/<send&receive state {:action "update-assets" :graph-uuid graph-uuid
|
||||||
|
:delete [asset-uuid]}))))
|
||||||
|
(op-mem-layer/remove-asset-ops! repo asset-uuid)
|
||||||
|
(recur)
|
||||||
|
(catch :default e
|
||||||
|
(prn ::unknown-ex e))))))
|
||||||
|
|
||||||
|
|
||||||
(defn- <client-op-update-handler
|
(defn- <client-op-update-handler
|
||||||
[state]
|
[state]
|
||||||
{:pre [(some? @(:*graph-uuid state))
|
{:pre [(some? @(:*graph-uuid state))
|
||||||
(some? @(:*repo state))]}
|
(some? @(:*repo state))]}
|
||||||
(go nil
|
(go
|
||||||
;; TODO
|
(let [repo @(:*repo state)
|
||||||
))
|
conn @(:*db-conn state)
|
||||||
|
graph-uuid @(:*graph-uuid state)]
|
||||||
|
(<! (<upload-client-op-loop state graph-uuid repo conn)))))
|
||||||
|
|
||||||
|
|
||||||
(defn- make-push-assets-update-ops-timeout-ch
|
(defn- make-push-assets-update-ops-timeout-ch
|
||||||
|
|
|
@ -415,6 +415,24 @@
|
||||||
vals
|
vals
|
||||||
(mapcat vals)))
|
(mapcat vals)))
|
||||||
|
|
||||||
|
(defn get-min-epoch-asset-ops
|
||||||
|
[repo]
|
||||||
|
(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)
|
||||||
|
(when-let [[_epoch asset-uuid] (first epoch->asset-uuid-sorted-map)]
|
||||||
|
(assert (contains? asset-uuid->ops asset-uuid))
|
||||||
|
{:asset-uuid asset-uuid
|
||||||
|
:ops (asset-uuid->ops asset-uuid)})))
|
||||||
|
|
||||||
|
(defn get-asset-ops
|
||||||
|
[repo asset-uuid]
|
||||||
|
(let [repo-ops-store (get @*ops-store repo)
|
||||||
|
{:keys [asset-uuid->ops]} (:current-branch repo-ops-store)]
|
||||||
|
(assert (contains? repo-ops-store :current-branch) repo)
|
||||||
|
(asset-uuid->ops asset-uuid)))
|
||||||
|
|
||||||
|
|
||||||
(defn get-graph-uuid
|
(defn get-graph-uuid
|
||||||
[repo]
|
[repo]
|
||||||
(some-> (get @*ops-store repo)
|
(some-> (get @*ops-store repo)
|
||||||
|
@ -456,7 +474,6 @@
|
||||||
:block-uuid->ops (dissoc block-uuid->ops block-uuid)
|
:block-uuid->ops (dissoc block-uuid->ops block-uuid)
|
||||||
:epoch->block-uuid-sorted-map (dissoc epoch->block-uuid-sorted-map min-epoch)))))
|
:epoch->block-uuid-sorted-map (dissoc epoch->block-uuid-sorted-map min-epoch)))))
|
||||||
|
|
||||||
(comment
|
|
||||||
(defn remove-asset-ops!
|
(defn remove-asset-ops!
|
||||||
[repo asset-uuid]
|
[repo asset-uuid]
|
||||||
{:pre [(uuid? asset-uuid)]}
|
{:pre [(uuid? asset-uuid)]}
|
||||||
|
@ -466,7 +483,7 @@
|
||||||
(let [min-epoch (asset-uuid->min-epoch asset-uuid->ops asset-uuid)]
|
(let [min-epoch (asset-uuid->min-epoch asset-uuid->ops asset-uuid)]
|
||||||
(swap! *ops-store update-in [repo :current-branch] assoc
|
(swap! *ops-store update-in [repo :current-branch] assoc
|
||||||
:asset-uuid->ops (dissoc asset-uuid->ops asset-uuid)
|
:asset-uuid->ops (dissoc asset-uuid->ops asset-uuid)
|
||||||
:epoch->asset-uuid-sorted-map (dissoc epoch->asset-uuid-sorted-map min-epoch))))))
|
:epoch->asset-uuid-sorted-map (dissoc epoch->asset-uuid-sorted-map min-epoch)))))
|
||||||
|
|
||||||
|
|
||||||
(defn <init-load-from-indexeddb!
|
(defn <init-load-from-indexeddb!
|
||||||
|
|
Loading…
Reference in New Issue