diff --git a/src/main/frontend/worker/sync.cljs b/src/main/frontend/worker/sync.cljs index 6cc1d9d108..d6d29e7df0 100644 --- a/src/main/frontend/worker/sync.cljs +++ b/src/main/frontend/worker/sync.cljs @@ -5,7 +5,6 @@ [clojure.string :as string] [datascript.core :as d] [datascript.storage :refer [IStorage]] - [frontend.common.crypt :as crypt] [frontend.worker-common.util :as worker-util] [frontend.worker.handler.page :as worker-page] [frontend.worker.shared-service :as shared-service] @@ -185,8 +184,8 @@ (defn- assoc-datom-value [datom new-value] - (let [[op e a _v & rest] datom] - (into [op e a new-value] rest))) + (let [[op e a _v & others] datom] + (into [op e a new-value] others))) (defn- large-title-object [asset-uuid asset-type] @@ -571,8 +570,7 @@ asset-type large-title-asset-type url (asset-url base graph-id asset-uuid asset-type)] (p/let [payload (if aes-key - (p/let [payload-str (sync-crypt/ (sync-crypt/> (d/datoms @conn :eavt) - (keep (fn [datom] - (when (= large-title-object-attr (:a datom)) - (let [obj (:v datom)] - (when (large-title-object? obj) - {:e (:e datom) - :obj obj}))))) - (distinct))] + items (if (seq tx-data) + (->> tx-data + (keep (fn [item] + (when (and (vector? item) + (= :db/add (nth item 0)) + (= large-title-object-attr (nth item 2)) + (large-title-object? (nth item 3))) + {:e (nth item 1) + :obj (nth item 3)}))) + (distinct)) + (->> (d/datoms @conn :eavt) + (keep (fn [datom] + (when (= large-title-object-attr (:a datom)) + (let [obj (:v datom)] + (when (large-title-object? obj) + {:e (:e datom) + :obj obj}))))) + (distinct)))] (when (seq items) (p/let [aes-key (or aes-key (when (sync-crypt/graph-e2ee? repo) diff --git a/src/test/frontend/worker/db_sync_test.cljs b/src/test/frontend/worker/db_sync_test.cljs index 8df70ea910..9c24b523a6 100644 --- a/src/test/frontend/worker/db_sync_test.cljs +++ b/src/test/frontend/worker/db_sync_test.cljs @@ -5,7 +5,7 @@ [frontend.worker.state :as worker-state] [frontend.worker.sync :as db-sync] [frontend.worker.sync.client-op :as client-op] - [logseq.db :as ldb] + [frontend.worker.sync.crypt :as sync-crypt] [logseq.db.test.helper :as db-test] [logseq.outliner.core :as outliner-core] [promesa.core :as p])) @@ -22,11 +22,15 @@ (d/listen! db-conn ::listen-db (fn [tx-report] (db-sync/enqueue-local-tx! test-repo tx-report)))) - (try - (f) - (finally - (reset! worker-state/*datascript-conns db-prev) - (reset! worker-state/*client-ops-conns ops-prev))))) + (let [result (f) + cleanup (fn [] + (reset! worker-state/*datascript-conns db-prev) + (reset! worker-state/*client-ops-conns ops-prev))] + (if (p/promise? result) + (p/finally result cleanup) + (do + (cleanup) + result))))) (defn- setup-parent-child [] @@ -358,10 +362,8 @@ _ (#'db-sync/upload-large-title! test-repo "graph-1" title aes-key) body @captured-body] (is (instance? js/Uint8Array body)) - (let [decoded (.decode (js/TextDecoder.) body) - encrypted (ldb/read-transit-str decoded)] - (p/let [decrypted (crypt/ (p/let [aes-key (crypt/