Просмотр исходного кода

fix(mobile): init network-status value

rcmerci 6 месяцев назад
Родитель
Сommit
52cd744612
2 измененных файлов с 17 добавлено и 5 удалено
  1. 12 2
      src/main/frontend/mobile/flows.cljs
  2. 5 3
      src/main/frontend/worker/rtc/core.cljs

+ 12 - 2
src/main/frontend/mobile/flows.cljs

@@ -1,12 +1,22 @@
 (ns frontend.mobile.flows
   "common flows for mobile"
-  (:require [missionary.core :as m]))
+  (:require ["@capacitor/network" :refer [^js Network]]
+            [frontend.common.missionary :as c.m]
+            [missionary.core :as m]
+            [promesa.core :as p]))
 
 (def *mobile-network-status (atom nil))
 (def *mobile-app-state (atom nil))
 
+(def ^:private mobile-network-init-status-flow
+  (m/observe
+   (fn ctor [emit!]
+     (p/let [init-network-status (.getStatus Network)]
+       (emit! init-network-status))
+     (fn dtor []))))
+
 (def mobile-network-status-flow
-  (->> (m/watch *mobile-network-status)
+  (->> (c.m/mix mobile-network-init-status-flow (m/watch *mobile-network-status))
        (m/eduction (map #(js->clj % :keywordize-keys true)))))
 
 (def mobile-app-state

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

@@ -73,8 +73,10 @@
 
 (defn- create-pull-remote-updates-flow
   "Return a flow: emit to pull remote-updates.
-  reschedule next emit(INTERVAL-MS later) every time FLOW emit a value."
-  [interval-ms flow]
+  reschedule next emit(INTERVAL-MS later) every time RESCHEDULE-FLOW emit a value.
+  TODO: add immediate-emit-flow arg,
+        e.g. when mobile-app becomes active, trigger one pull-remote-updates"
+  [interval-ms reschedule-flow & [_immediate-emit-flow]]
   (let [v {:type :pull-remote-updates}
         clock-flow (m/ap
                      (loop []
@@ -84,7 +86,7 @@
     (m/ap
       (m/amb
        v
-       (let [_ (m/?< (c.m/continue-flow flow))]
+       (let [_ (m/?< (c.m/continue-flow reschedule-flow))]
          (try
            (m/?< clock-flow)
            (catch Cancelled _ (m/amb))))))))