enhance(rtc): update-asset handler

pull/10793/head
rcmerci 2024-01-15 16:58:16 +08:00
parent 20a06f820d
commit 6b435dda25
2 changed files with 60 additions and 17 deletions

View File

@ -4,10 +4,12 @@
(:require [malli.core :as m]
[malli.util :as mu]
[cljs.core.async :as async :refer [<! >! chan go go-loop]]
[frontend.db.rtc.const :as rtc-const]
[frontend.db.rtc.op-mem-layer :as op-mem-layer]
[frontend.worker.rtc.const :as rtc-const]
[frontend.worker.rtc.op-mem-layer :as op-mem-layer]
[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
[:map {:closed true}
@ -33,13 +35,37 @@
;; 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
[state]
{:pre [(some? @(:*graph-uuid state))
(some? @(:*repo state))]}
(go nil
;; TODO
))
(go
(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

View File

@ -415,6 +415,24 @@
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
[repo]
(some-> (get @*ops-store repo)
@ -456,17 +474,16 @@
:block-uuid->ops (dissoc block-uuid->ops block-uuid)
:epoch->block-uuid-sorted-map (dissoc epoch->block-uuid-sorted-map min-epoch)))))
(comment
(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 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!