Explorar o código

enhance(rtc): add background-task to notify client to upgrade

rcmerci hai 9 meses
pai
achega
b1774950c8

+ 26 - 12
src/main/frontend/handler/db_based/rtc.cljs

@@ -1,13 +1,13 @@
 (ns frontend.handler.db-based.rtc
   "RTC handler"
   (:require [cljs-time.core :as t]
+            [frontend.common.missionary :as c.m]
             [frontend.config :as config]
             [frontend.db :as db]
             [frontend.handler.db-based.rtc-flows :as rtc-flows]
             [frontend.handler.notification :as notification]
             [frontend.handler.user :as user-handler]
             [frontend.state :as state]
-            [frontend.common.missionary :as c.m]
             [logseq.common.util :as common-util]
             [logseq.db :as ldb]
             [logseq.db.sqlite.common-db :as sqlite-common-db]
@@ -127,14 +127,28 @@
 ;;; background task: try to restart rtc-loop when possible,
 ;;; triggered by `rtc-flows/rtc-try-restart-flow`
 (when-not config/publishing?
- (c.m/run-background-task
-  ::restart-rtc-task
-  (m/reduce
-   (constantly nil)
-   (m/ap
-    (let [{:keys [graph-uuid t]} (m/?> rtc-flows/rtc-try-restart-flow)]
-      (when (and graph-uuid t
-                 (= graph-uuid (ldb/get-graph-rtc-uuid (db/get-db)))
-                 (> 5000 (- (common-util/time-ms) t)))
-        (prn :trying-to-restart-rtc graph-uuid (t/now))
-        (c.m/<? (<rtc-start! (state/get-current-repo) :stop-before-start? false))))))))
+  (c.m/run-background-task
+   ::restart-rtc-task
+   (m/reduce
+    (constantly nil)
+    (m/ap
+      (let [{:keys [graph-uuid t]} (m/?> rtc-flows/rtc-try-restart-flow)]
+        (when (and graph-uuid t
+                   (= graph-uuid (ldb/get-graph-rtc-uuid (db/get-db)))
+                   (> 5000 (- (common-util/time-ms) t)))
+          (prn :trying-to-restart-rtc graph-uuid (t/now))
+          (c.m/<? (<rtc-start! (state/get-current-repo) :stop-before-start? false)))))))
+
+  (c.m/run-background-task
+   ::notify-client-need-upgrade-when-larger-remote-schema-version-exists
+   (m/reduce
+    (constantly nil)
+    (m/ap
+      (let [{:keys [_remote-schema-version]}
+            (m/?>
+             (m/eduction
+              (filter #(keyword-identical? :rtc.log/higher-remote-schema-version-exists (:type %)))
+              rtc-flows/rtc-log-flow))]
+        (notification/show!
+         "The server has a graph with a higher schema version, the client may need to upgrade."
+         :warning))))))

+ 4 - 4
src/main/frontend/handler/db_based/rtc_flows.cljs

@@ -1,7 +1,7 @@
 (ns frontend.handler.db-based.rtc-flows
   "Flows related to RTC"
-  (:require [frontend.state :as state]
-            [frontend.common.missionary :as c.m]
+  (:require [frontend.common.missionary :as c.m]
+            [frontend.state :as state]
             [logseq.common.util :as common-util]
             [missionary.core :as m]))
 
@@ -10,12 +10,12 @@
 
 (def rtc-download-log-flow
   (m/eduction
-   (filter #(= :rtc.log/download (:type %)))
+   (filter #(keyword-identical? :rtc.log/download (:type %)))
    rtc-log-flow))
 
 (def rtc-upload-log-flow
   (m/eduction
-   (filter #(= :rtc.log/upload (:type %)))
+   (filter #(keyword-identical? :rtc.log/upload (:type %)))
    rtc-log-flow))
 
 (def rtc-misc-log-flow

+ 1 - 1
src/main/frontend/worker/rtc/client.cljs

@@ -64,7 +64,7 @@
                   (take 5 (drop 2 c.m/delays)) ;retry 5 times if remote-graph is creating (4000 8000 16000 32000 64000)
                   (new-task--register-graph-updates get-ws-create-task graph-uuid major-schema-version repo)))]
             (when max-remote-schema-version
-              (add-log-fn :rtc.log/larger-remote-schema-version-exists
+              (add-log-fn :rtc.log/higher-remote-schema-version-exists
                           {:remote-schema-version max-remote-schema-version})))
           (let [t (client-op/get-local-tx repo)]
             (when (or (nil? @*last-calibrate-t)

+ 1 - 1
src/main/frontend/worker/rtc/log_and_state.cljs

@@ -24,7 +24,7 @@
        :rtc.log/cancelled {:doc "rtc has been cancelled"}
        :rtc.log/apply-remote-update {:doc "apply remote updates to local graph"}
        :rtc.log/push-local-update {:doc "push local updates to remote graph"}
-       :rtc.log/larger-remote-schema-version-exists {:doc "remote-graph with larger schema-version exists"}
+       :rtc.log/higher-remote-schema-version-exists {:doc "remote-graph with larger schema-version exists"}
 
        :rtc.asset.log/cancelled {:doc "rtc asset sync has been cancelled"}
        :rtc.asset.log/upload-assets {:doc "upload local assets to remote"}