|
@@ -4,7 +4,8 @@
|
|
|
[frontend.flows :as flows]
|
|
|
[frontend.state :as state]
|
|
|
[logseq.common.util :as common-util]
|
|
|
- [missionary.core :as m]))
|
|
|
+ [missionary.core :as m])
|
|
|
+ (:import [missionary Cancelled]))
|
|
|
|
|
|
(def rtc-log-flow
|
|
|
(m/watch (:rtc/log @state/state)))
|
|
@@ -25,7 +26,10 @@
|
|
|
rtc-log-flow))
|
|
|
|
|
|
(def rtc-state-flow
|
|
|
- (m/stream (m/watch (:rtc/state @state/state))))
|
|
|
+ (m/watch (:rtc/state @state/state)))
|
|
|
+
|
|
|
+(def rtc-state-stream-flow
|
|
|
+ (m/stream rtc-state-flow))
|
|
|
|
|
|
(def rtc-online-users-flow
|
|
|
(c.m/throttle
|
|
@@ -36,7 +40,7 @@
|
|
|
(:rtc-lock m))
|
|
|
(:online-users m))))
|
|
|
(dedupe)
|
|
|
- rtc-state-flow)))
|
|
|
+ rtc-state-stream-flow)))
|
|
|
|
|
|
(def ^:private network-online-change-flow
|
|
|
(m/stream
|
|
@@ -60,7 +64,7 @@ conditions:
|
|
|
(->> (m/latest
|
|
|
(fn [rtc-state _ login-user]
|
|
|
(assoc rtc-state :login-user login-user))
|
|
|
- (c.m/continue-flow rtc-state-flow)
|
|
|
+ (c.m/continue-flow rtc-state-stream-flow)
|
|
|
(c.m/continue-flow network-online-change-flow)
|
|
|
flows/current-login-user-flow)
|
|
|
(m/eduction
|
|
@@ -89,6 +93,19 @@ conditions:
|
|
|
(assert (some? repo))
|
|
|
(reset! *rtc-start-trigger repo))
|
|
|
|
|
|
+(def ^:private document-visible&rtc-not-running-flow
|
|
|
+ (m/ap
|
|
|
+ (let [visibility (m/?< flows/document-visibility-state-flow)]
|
|
|
+ (try
|
|
|
+ (if (= "visible" visibility)
|
|
|
+ (let [rtc-lock (:rtc-lock (m/? (m/reduce {} nil (m/eduction (take 1) rtc-state-flow))))]
|
|
|
+ (if (not rtc-lock)
|
|
|
+ :document-visible&rtc-not-running
|
|
|
+ (m/amb)))
|
|
|
+ (m/amb))
|
|
|
+ (catch Cancelled _
|
|
|
+ (m/amb))))))
|
|
|
+
|
|
|
(def trigger-start-rtc-flow
|
|
|
(->>
|
|
|
[(m/eduction
|
|
@@ -101,8 +118,8 @@ conditions:
|
|
|
(keep (fn [repo] (when repo [:trigger-rtc repo])))
|
|
|
(m/watch *rtc-start-trigger))
|
|
|
(m/eduction
|
|
|
- (keep (fn [visibility] (when (= "visible" visibility) [:document-visible])))
|
|
|
- flows/document-visibility-state-flow)]
|
|
|
+ (map vector)
|
|
|
+ document-visible&rtc-not-running-flow)]
|
|
|
(apply c.m/mix)
|
|
|
(m/eduction (filter (fn [_] (some? (state/get-auth-id-token)))))
|
|
|
(c.m/debounce 200)))
|