fix: don't run sync for local graphs that's detached from server

This commit is contained in:
Tienson Qin
2026-01-30 03:00:28 +08:00
parent 96e2be398f
commit e00a037624
6 changed files with 51 additions and 41 deletions

View File

@@ -421,7 +421,8 @@
(when (and current-repo
(ldb/get-graph-rtc-uuid (db/get-db))
(user-handler/logged-in?)
(user-handler/rtc-group?))
(user-handler/rtc-group?)
(some #(= current-repo (:url %)) (state/get-rtc-graphs)))
[:<>
(recent-slider)
(rum/with-key (rtc-collaborators)

View File

@@ -150,13 +150,12 @@
[:small "⚠️ Notice that we can't recover this graph after being deleted. Make sure you have backups before deleting it."]]])
(p/then
(fn []
(let [<delete-graph rtc-handler/<rtc-delete-graph!]
(state/set-state! :rtc/loading-graphs? true)
(when (= (state/get-current-repo) repo)
(state/<invoke-db-worker :thread-api/rtc-stop))
(p/do! (<delete-graph GraphUUID GraphSchemaVersion)
(state/set-state! :rtc/loading-graphs? false)
(rtc-handler/<get-remote-graphs))))))))}
(state/set-state! :rtc/loading-graphs? true)
(when (= (state/get-current-repo) repo)
(state/<invoke-db-worker :thread-api/rtc-stop))
(p/do! (rtc-handler/<rtc-delete-graph! GraphUUID GraphSchemaVersion)
(state/set-state! :rtc/loading-graphs? false)
(rtc-handler/<get-remote-graphs)))))))}
"Delete from server"))
(when (and remote? (not manager?))

View File

@@ -147,10 +147,19 @@
coerced))
body))
(defn- graph-in-remote-list?
[repo]
(some #(= repo (:url %)) (state/get-rtc-graphs)))
(defn <rtc-start!
[repo & {:keys [_stop-before-start?] :as _opts}]
(log/info :db-sync/start {:repo repo})
(state/<invoke-db-worker :thread-api/db-sync-start repo))
(if (graph-in-remote-list? repo)
(do
(log/info :db-sync/start {:repo repo})
(state/<invoke-db-worker :thread-api/db-sync-start repo))
(do
(log/info :db-sync/skip-start {:repo repo :reason :graph-not-in-remote-list})
(p/resolved nil))))
(defn <rtc-stop!
[]

View File

@@ -2,6 +2,7 @@
(:require [cljs.test :refer [deftest is async]]
[frontend.handler.db-based.sync :as db-sync]
[frontend.handler.user :as user-handler]
[frontend.state :as state]
[promesa.core :as p]))
(deftest remove-member-request-test
@@ -51,3 +52,33 @@
(p/catch (fn [e]
(is (= :db-sync/invalid-member (:type (ex-data e))))
(done))))))
(deftest rtc-start-skips-when-graph-missing-from-remote-list-test
(async done
(let [called (atom nil)]
(-> (p/with-redefs [state/get-rtc-graphs (fn [] [{:url "repo-other"}])
state/<invoke-db-worker (fn [& args]
(reset! called args)
(p/resolved :ok))]
(db-sync/<rtc-start! "repo-current"))
(p/then (fn [_]
(is (nil? @called))
(done)))
(p/catch (fn [e]
(is false (str e))
(done)))))))
(deftest rtc-start-invokes-worker-when-graph-in-remote-list-test
(async done
(let [called (atom nil)]
(-> (p/with-redefs [state/get-rtc-graphs (fn [] [{:url "repo-current"}])
state/<invoke-db-worker (fn [& args]
(reset! called args)
(p/resolved :ok))]
(db-sync/<rtc-start! "repo-current"))
(p/then (fn [_]
(is (= [:thread-api/db-sync-start "repo-current"] @called))
(done)))
(p/catch (fn [e]
(is false (str e))
(done)))))))