Browse Source

fix(rtc): indicator status update

rcmerci 4 months ago
parent
commit
a9a6bcee31

+ 7 - 1
src/main/frontend/components/rtc/indicator.cljs

@@ -20,6 +20,7 @@
 
 (defonce ^:private *detail-info
   (atom {:pending-local-ops 0
+         :pending-asset-ops 0
          :graph-uuid nil
          :local-tx nil
          :remote-tx nil
@@ -49,6 +50,7 @@
                       (m/reduce (fn [_ state]
                                   (swap! *detail-info assoc
                                          :pending-local-ops (:unpushed-block-update-count state)
+                                         :pending-asset-ops (:pending-asset-ops-count state)
                                          :graph-uuid (:graph-uuid state)
                                          :local-tx (:local-tx state)
                                          :remote-tx (:remote-tx state)
@@ -145,6 +147,7 @@
         online?                     (hooks/use-flow-state flows/network-online-event-flow)
         rtc-state                   (:rtc-state detail-info)
         unpushed-block-update-count (:pending-local-ops detail-info)
+        pending-asset-ops           (:pending-asset-ops detail-info)
         {:keys [local-tx remote-tx]} detail-info]
     [:div.cp__rtc-sync
      [:div.hidden {"data-testid" "rtc-tx"} (pr-str {:local-tx local-tx :remote-tx remote-tx})]
@@ -156,7 +159,10 @@
                                                              :dropdown-menu? true})
                                :class (util/classnames [{:cloud true
                                                          :on (and online? (= :open rtc-state))
-                                                         :idle (and online? (= :open rtc-state) (zero? unpushed-block-update-count))
+                                                         :idle (and online?
+                                                                    (= :open rtc-state)
+                                                                    (zero? unpushed-block-update-count)
+                                                                    (zero? pending-asset-ops))
                                                          :queuing (pos? unpushed-block-update-count)}])})]]))
 
 (def ^:private *accumulated-download-logs (atom []))

+ 15 - 0
src/main/frontend/worker/rtc/client_op.cljs

@@ -456,6 +456,21 @@
       (when-let [e (:db/id ent)]
         (d/transact! conn (map (fn [a] [:db.fn/retractAttribute e a]) asset-op-types))))))
 
+(defn create-pending-asset-ops-count-flow
+  [repo]
+  (when-let [conn (worker-state/get-client-ops-conn repo)]
+    (let [datom-count-fn (fn [db] (count (get-all-asset-ops* db)))
+          db-updated-flow
+          (m/observe
+           (fn ctor [emit!]
+             (d/listen! conn :create-pending-asset-ops-count-flow #(emit! true))
+             (emit! true)
+             (fn dtor []
+               (d/unlisten! conn :create-pending-asset-ops-count-flow))))]
+      (m/ap
+        (let [_ (m/?> (c.m/throttle 100 db-updated-flow))]
+          (datom-count-fn @conn))))))
+
 (defn reset-client-op-conn
   [repo]
   (when-let [conn (worker-state/get-client-ops-conn repo)]

+ 5 - 2
src/main/frontend/worker/rtc/core.cljs

@@ -492,12 +492,13 @@
             (m/?<
              (m/latest
               (fn [rtc-state rtc-auto-push? rtc-remote-profile?
-                   rtc-lock online-users pending-local-ops-count [local-tx remote-tx]]
+                   rtc-lock online-users pending-local-ops-count pending-asset-ops-count [local-tx remote-tx]]
                 {:graph-uuid graph-uuid
                  :local-graph-schema-version (db-schema/schema-version->string local-graph-schema-version)
                  :remote-graph-schema-version (db-schema/schema-version->string remote-graph-schema-version)
                  :user-uuid user-uuid
                  :unpushed-block-update-count pending-local-ops-count
+                 :pending-asset-ops-count pending-asset-ops-count
                  :local-tx local-tx
                  :remote-tx remote-tx
                  :rtc-state rtc-state
@@ -510,6 +511,7 @@
               (m/watch *rtc-auto-push?) (m/watch *rtc-remote-profile?)
               (m/watch *rtc-lock') (m/watch *online-users)
               (client-op/create-pending-block-ops-count-flow repo)
+              (client-op/create-pending-asset-ops-count-flow repo)
               (rtc-log-and-state/create-local&remote-t-flow graph-uuid))))
           (catch Cancelled _))))))
 
@@ -651,7 +653,8 @@
   (c.m/run-background-task
    ::subscribe-state
    (m/reduce
-    (fn [_ v] (shared-service/broadcast-to-clients! :rtc-sync-state v))
+    (fn [_ v]
+      (shared-service/broadcast-to-clients! :rtc-sync-state v))
     create-get-state-flow)))
 
 (comment