From 2d67629276d2fc6591210456a74ebbb95d5ee3af Mon Sep 17 00:00:00 2001 From: rcmerci Date: Sun, 18 May 2025 01:56:00 +0800 Subject: [PATCH] enhance(rtc): show download logs when init downloading graph --- deps/shui/src/logseq/shui/hooks.cljs | 7 +-- src/main/frontend/components/header.cljs | 3 ++ .../frontend/components/rtc/indicator.cljs | 47 ++++++++++++++++++- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/deps/shui/src/logseq/shui/hooks.cljs b/deps/shui/src/logseq/shui/hooks.cljs index 4b8454ec0d..b3978d150c 100644 --- a/deps/shui/src/logseq/shui/hooks.cljs +++ b/deps/shui/src/logseq/shui/hooks.cljs @@ -74,13 +74,14 @@ (defn use-flow-state "Return values from `flow`, default init-value is nil" - ([flow] (use-flow-state nil flow)) - ([init-value flow] + ([flow] (use-flow-state nil flow [])) + ([init-value flow] (use-flow-state init-value flow [])) + ([init-value flow deps] (let [[value set-value!] (use-state init-value)] (use-effect! #(c.m/run-task* (m/reduce (constantly nil) (m/ap (set-value! (m/?> flow))))) - []) + deps) value))) diff --git a/src/main/frontend/components/header.cljs b/src/main/frontend/components/header.cljs index 1c44f878d4..df22388eb9 100644 --- a/src/main/frontend/components/header.cljs +++ b/src/main/frontend/components/header.cljs @@ -385,6 +385,9 @@ (str "collab-" current-repo)) (rtc-indicator/indicator)]) + (when (user-handler/logged-in?) + (rtc-indicator/downloading-detail)) + (when (and current-repo (not (config/demo-graph? current-repo)) (not (config/db-based-graph? current-repo)) diff --git a/src/main/frontend/components/rtc/indicator.cljs b/src/main/frontend/components/rtc/indicator.cljs index 5c793e29f6..a849a867ca 100644 --- a/src/main/frontend/components/rtc/indicator.cljs +++ b/src/main/frontend/components/rtc/indicator.cljs @@ -117,7 +117,6 @@ ;; FIXME: pending-server-ops [:div [:span.font-medium.mr-1 (or pending-server-ops 0)] "pending server changes"] (assets-progressing) - ;; FIXME: What's the type for downloaded log? (when-let [latest-log (some (fn [l] (when (contains? #{:rtc.log/push-local-update} (:type l)) l)) misc-logs)] (when-let [time (:created-at latest-log)] @@ -153,6 +152,35 @@ (> 600 (/ (- (t/now) created-at) 1000))))) +(def ^:private *accumulated-download-logs (atom [])) +(c.m/run-background-task + ::update-accumulated-download-logs + (m/reduce + (fn [_ log] + (when log + (if (= :download-completed (:sub-type log)) + (reset! *accumulated-download-logs []) + (swap! *accumulated-download-logs (fn [logs] (take 20 (conj logs log))))))) + rtc-flows/rtc-download-log-flow)) + +(defn- accumulated-logs-flow + [*acc-logs] + (->> (m/watch *acc-logs) + (m/eduction + (map (fn [logs] + (when-let [first-log (first logs)] + (let [graph-uuid (:graph-uuid first-log)] + (take-while (fn [log] (= graph-uuid (:graph-uuid log))) logs)))))))) + +(rum/defc downloading-logs + [] + (let [download-logs-flow (accumulated-logs-flow *accumulated-download-logs) + download-logs (hooks/use-flow-state download-logs-flow)] + (when (seq download-logs) + [:div + (for [log download-logs] + [:div (:message log)])]))) + (rum/defc indicator [] (let [detail-info (hooks/use-flow-state (m/watch *detail-info)) @@ -186,3 +214,20 @@ :on (and online? (= :open rtc-state)) :idle (and online? (= :open rtc-state) (zero? unpushed-block-update-count)) :queuing (pos? unpushed-block-update-count)}])})]])) + +(def ^:private downloading?-flow + (->> rtc-flows/rtc-download-log-flow + (m/eduction (map (fn [log] (not= :download-completed (:sub-type log))))) + (c.m/continue-flow false))) + +(rum/defc downloading-detail + [] + (when (true? (hooks/use-flow-state downloading?-flow)) + (shui/button + {:class "opacity-50" + :variant :ghost + :size :sm + :on-click #(shui/popup-show! (.-target %) + (downloading-logs) + {:align "end"})} + "Downloading...")))