Browse Source

enhance(rtc): add dev-mode? option in rtc-state

rcmerci 1 năm trước cách đây
mục cha
commit
60db7d5d9f

+ 8 - 5
src/main/frontend/db/rtc/debug_ui.cljs

@@ -1,15 +1,16 @@
 (ns frontend.db.rtc.debug-ui
 (ns frontend.db.rtc.debug-ui
   "Debug UI for rtc module"
   "Debug UI for rtc module"
-  (:require [fipp.edn :as fipp]
+  (:require [cljs-bean.core :as bean]
+            [fipp.edn :as fipp]
+            [frontend.config :as config]
             [frontend.db :as db]
             [frontend.db :as db]
             [frontend.handler.user :as user]
             [frontend.handler.user :as user]
+            [frontend.persist-db.browser :as db-browser]
             [frontend.state :as state]
             [frontend.state :as state]
             [frontend.ui :as ui]
             [frontend.ui :as ui]
             [frontend.util :as util]
             [frontend.util :as util]
-            [rum.core :as rum]
-            [frontend.persist-db.browser :as db-browser]
             [promesa.core :as p]
             [promesa.core :as p]
-            [cljs-bean.core :as bean]))
+            [rum.core :as rum]))
 
 
 (defonce debug-state (atom nil))
 (defonce debug-state (atom nil))
 
 
@@ -70,7 +71,9 @@
                            :on-click (fn []
                            :on-click (fn []
                                        (let [token (state/get-auth-id-token)
                                        (let [token (state/get-auth-id-token)
                                              ^object worker @db-browser/*worker]
                                              ^object worker @db-browser/*worker]
-                                         (.rtc-start worker (state/get-current-repo) token)))})
+                                         (.rtc-start worker (state/get-current-repo) token
+                                                     (and config/dev?
+                                                          (state/sub [:ui/developer-mode?])))))})
 
 
        [:div.my-2.flex
        [:div.my-2.flex
         [:div.mr-2 (ui/button (str "send pending ops")
         [:div.mr-2 (ui/button (str "send pending ops")

+ 2 - 2
src/main/frontend/db_worker.cljs

@@ -541,9 +541,9 @@
 
 
   ;; RTC
   ;; RTC
   (rtc-start
   (rtc-start
-   [this repo token]
+   [this repo token dev-mode?]
    (when-let [conn (worker-state/get-datascript-conn repo)]
    (when-let [conn (worker-state/get-datascript-conn repo)]
-     (rtc-core/<start-rtc repo conn token)
+     (rtc-core/<start-rtc repo conn token dev-mode?)
      nil))
      nil))
 
 
   (rtc-stop
   (rtc-stop

+ 9 - 7
src/main/frontend/worker/rtc/core.cljs

@@ -79,7 +79,8 @@
    [:toggle-auto-push-client-ops-chan :any]
    [:toggle-auto-push-client-ops-chan :any]
    [:*auto-push-client-ops? :any]
    [:*auto-push-client-ops? :any]
    [:force-push-client-ops-chan :any]
    [:force-push-client-ops-chan :any]
-   [:counter :any]])
+   [:counter :any]
+   [:dev-mode? :boolean]])
 
 
 (def state-validator
 (def state-validator
   (let [validator (m/validator state-schema)]
   (let [validator (m/validator state-schema)]
@@ -932,7 +933,7 @@
 ;;                                    :block-uuids [page-block-uuid]})))))
 ;;                                    :block-uuids [page-block-uuid]})))))
 
 
 (defn init-state
 (defn init-state
-  [ws data-from-ws-chan repo token]
+  [ws data-from-ws-chan repo token dev-mode?]
   ;; {:post [(m/validate state-schema %)]}
   ;; {:post [(m/validate state-schema %)]}
   {:*rtc-state (atom :closed :validator rtc-state-validator)
   {:*rtc-state (atom :closed :validator rtc-state-validator)
    :*graph-uuid (atom nil)
    :*graph-uuid (atom nil)
@@ -947,7 +948,7 @@
    :*stop-rtc-loop-chan (atom nil)
    :*stop-rtc-loop-chan (atom nil)
    :force-push-client-ops-chan (chan (async/sliding-buffer 1))
    :force-push-client-ops-chan (chan (async/sliding-buffer 1))
    :*ws (atom ws)
    :*ws (atom ws)
-
+   :dev-mode? dev-mode?
    ;; used to trigger state watch
    ;; used to trigger state watch
    :counter 0})
    :counter 0})
 
 
@@ -971,22 +972,23 @@
 
 
 ;; FIXME: token might be expired
 ;; FIXME: token might be expired
 (defn <init-state
 (defn <init-state
-  [repo token reset-*state?]
+  [repo token reset-*state? & {:keys [dev-mode?]
+                               :or {dev-mode? false}}]
   (go
   (go
     (let [data-from-ws-chan (chan (async/sliding-buffer 100))
     (let [data-from-ws-chan (chan (async/sliding-buffer 100))
           ws-opened-ch (chan)
           ws-opened-ch (chan)
           ws (ws/ws-listen token data-from-ws-chan ws-opened-ch)]
           ws (ws/ws-listen token data-from-ws-chan ws-opened-ch)]
       (<! ws-opened-ch)
       (<! ws-opened-ch)
-      (let [state (init-state ws data-from-ws-chan repo token)]
+      (let [state (init-state ws data-from-ws-chan repo token dev-mode?)]
         (when reset-*state?
         (when reset-*state?
           (reset! *state state)
           (reset! *state state)
           (swap! *state update :counter inc))
           (swap! *state update :counter inc))
         state))))
         state))))
 
 
 (defn <start-rtc
 (defn <start-rtc
-  [repo conn token]
+  [repo conn token dev-mode?]
   (go
   (go
-    (let [state (<! (<init-state repo token true))
+    (let [state (<! (<init-state repo token true {:dev-mode? dev-mode?}))
           state-for-asset-sync (asset-sync/init-state-from-rtc-state state)
           state-for-asset-sync (asset-sync/init-state-from-rtc-state state)
           _ (reset! asset-sync/*asset-sync-state state-for-asset-sync)
           _ (reset! asset-sync/*asset-sync-state state-for-asset-sync)
           config (worker-state/get-config repo)]
           config (worker-state/get-config repo)]

+ 2 - 2
src/test/frontend/worker/rtc/fixture.cljs

@@ -21,14 +21,14 @@
   []
   []
   (let [data-from-ws-chan (chan (async/sliding-buffer 100))
   (let [data-from-ws-chan (chan (async/sliding-buffer 100))
         ws (rtc-mock/mock-websocket data-from-ws-chan)]
         ws (rtc-mock/mock-websocket data-from-ws-chan)]
-    (assoc (rtc-core/init-state ws data-from-ws-chan test-helper/test-db-name-db-version "")
+    (assoc (rtc-core/init-state ws data-from-ws-chan test-helper/test-db-name-db-version "" true)
            :*auto-push-client-ops? (atom false))))
            :*auto-push-client-ops? (atom false))))
 
 
 (defn- init-state-helper-for-asset-sync-loop
 (defn- init-state-helper-for-asset-sync-loop
   []
   []
   (let [data-from-ws-chan (chan (async/sliding-buffer 100))
   (let [data-from-ws-chan (chan (async/sliding-buffer 100))
         ws (rtc-mock/mock-websocket data-from-ws-chan)
         ws (rtc-mock/mock-websocket data-from-ws-chan)
-        rtc-state (rtc-core/init-state ws data-from-ws-chan test-helper/test-db-name-db-version "")]
+        rtc-state (rtc-core/init-state ws data-from-ws-chan test-helper/test-db-name-db-version "" true)]
     (assoc (asset-sync/init-state-from-rtc-state rtc-state)
     (assoc (asset-sync/init-state-from-rtc-state rtc-state)
            :*auto-push-assets-update-ops? (atom false))))
            :*auto-push-assets-update-ops? (atom false))))