From 2ea618b76fae2c68235817299637c2b25f5f10fd Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Fri, 6 Feb 2026 15:55:55 +0800 Subject: [PATCH] fix: don't notify source client with presence update --- .../src/logseq/db_sync/worker/handler/ws.cljs | 6 ++--- .../test/logseq/db_sync/test_runner.cljs | 1 + .../db_sync/worker_handler_ws_test.cljs | 27 +++++++++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 deps/db-sync/test/logseq/db_sync/worker_handler_ws_test.cljs diff --git a/deps/db-sync/src/logseq/db_sync/worker/handler/ws.cljs b/deps/db-sync/src/logseq/db_sync/worker/handler/ws.cljs index f60ffde8f7..0081d961a7 100644 --- a/deps/db-sync/src/logseq/db_sync/worker/handler/ws.cljs +++ b/deps/db-sync/src/logseq/db_sync/worker/handler/ws.cljs @@ -20,9 +20,9 @@ (let [editing-block-uuid (:editing-block-uuid message) user (presence/get-user self ws)] (presence/update-presence! self ws {:editing-block-uuid editing-block-uuid}) - (ws/broadcast! self nil {:type "presence" - :editing-block-uuid editing-block-uuid - :user-id (:user-id user)})) + (ws/broadcast! self ws {:type "presence" + :editing-block-uuid editing-block-uuid + :user-id (:user-id user)})) "pull" (let [raw-since (:since message) diff --git a/deps/db-sync/test/logseq/db_sync/test_runner.cljs b/deps/db-sync/test/logseq/db_sync/test_runner.cljs index bbee288533..03b1d64f40 100644 --- a/deps/db-sync/test/logseq/db_sync/test_runner.cljs +++ b/deps/db-sync/test/logseq/db_sync/test_runner.cljs @@ -3,6 +3,7 @@ [logseq.db-sync.node-adapter-test] [logseq.db-sync.node-config-test] [logseq.db-sync.platform-test] + [logseq.db-sync.worker-handler-ws-test] [shadow.test :as st] [shadow.test.env :as env])) diff --git a/deps/db-sync/test/logseq/db_sync/worker_handler_ws_test.cljs b/deps/db-sync/test/logseq/db_sync/worker_handler_ws_test.cljs new file mode 100644 index 0000000000..9b442a2813 --- /dev/null +++ b/deps/db-sync/test/logseq/db_sync/worker_handler_ws_test.cljs @@ -0,0 +1,27 @@ +(ns logseq.db-sync.worker-handler-ws-test + (:require [cljs.test :refer [deftest is]] + [logseq.db-sync.protocol :as protocol] + [logseq.db-sync.worker.handler.ws :as ws-handler] + [logseq.db-sync.worker.presence :as presence] + [logseq.db-sync.worker.ws :as ws])) + +(deftest presence-message-broadcast-excludes-source-client-test + (let [source-ws #js {:readyState 1} + peer-ws #js {:readyState 1} + send-events (atom []) + self #js {:state #js {:getWebSockets (fn [] #js [source-ws peer-ws])}} + raw (protocol/encode-message {:type "presence" + :editing-block-uuid "block-1"})] + (with-redefs [presence/get-user (fn [_self _ws] {:user-id "user-1"}) + presence/update-presence! (fn [_self _ws _patch] nil) + ws/send! (fn [target msg] + (swap! send-events conj {:ws target + :msg msg}))] + (ws-handler/handle-ws-message! self source-ws raw)) + + (is (= [peer-ws] + (mapv :ws @send-events))) + (is (= [{:type "presence" + :editing-block-uuid "block-1" + :user-id "user-1"}] + (mapv :msg @send-events)))))