refactor(rtc): add async-upload-graph

pull/11055/head
rcmerci 2024-03-26 17:40:45 +08:00
parent 7ae3a70c39
commit 3cd31f1571
9 changed files with 93 additions and 15 deletions

View File

@ -40,10 +40,10 @@ const config: CapacitorConfig = {
}
}
if (process.env.LOGSEQ_APP_SERVER_URL) {
if ("http://192.168.199.216:3001") {
Object.assign(config, {
server: {
url: process.env.LOGSEQ_APP_SERVER_URL,
url: "http://192.168.199.216:3001",
cleartext: true
}
})

View File

@ -42,7 +42,7 @@
:aliases {:cljs {:extra-paths ["src/dev-cljs/" "src/test/" "src/electron/"]
:extra-deps {org.clojure/clojurescript {:mvn/version "1.11.54"}
org.clojure/tools.namespace {:mvn/version "0.2.11"}
cider/cider-nrepl {:mvn/version "0.44.0"}
cider/cider-nrepl {:mvn/version "0.47.0"}
org.clojars.knubie/cljs-run-test {:mvn/version "1.0.1"}
tortue/spy {:mvn/version "2.14.0"}}
:main-opts ["-m" "shadow.cljs.devtools.cli"]}
@ -53,7 +53,7 @@
pjstadig/humane-test-output {:mvn/version "0.11.0"}
org.clojars.knubie/cljs-run-test {:mvn/version "1.0.1"}
tortue/spy {:mvn/version "2.14.0"}
cider/cider-nrepl {:mvn/version "0.44.0"}}
cider/cider-nrepl {:mvn/version "0.47.0"}}
:main-opts ["-m" "shadow.cljs.devtools.cli"]}
:bench {:extra-paths ["src/bench/"]

View File

@ -28,7 +28,7 @@
(goog-define TEST false)
(def test? TEST)
(goog-define ENABLE-FILE-SYNC-PRODUCTION false)
(def ENABLE-FILE-SYNC-PRODUCTION false)
;; this is a feature flag to enable the account tab
;; when it launches (when pro plan launches) it should be removed

View File

@ -593,7 +593,24 @@
[[:div
[:p "upload graph failed"]]
:error])
(prn ::download-graph-failed e)
(p/reject! d e)))))
d))
(rtc-async-upload-graph
[this repo token remote-graph-name]
(let [d (p/deferred)]
(when-let [conn (worker-state/get-datascript-conn repo)]
(async/go
(try
(let [state (<? (rtc-core/<init-state repo token false))]
(<? (rtc-updown/<async-upload-graph state repo conn remote-graph-name))
(rtc-db-listener/listen-db-to-generate-ops repo conn)
(p/resolve! d :success))
(catch :default e
(worker-util/post-message :notification
[[:div
[:p "upload graph failed"]]
:error])
(p/reject! d e)))))
d))

View File

@ -73,7 +73,6 @@
[frontend.util :as util]
[frontend.util.persist-var :as persist-var]
[goog.dom :as gdom]
[logseq.db.frontend.schema :as db-schema]
[logseq.common.config :as common-config]
[promesa.core :as p]
[lambdaisland.glogi :as log]

View File

@ -13,9 +13,7 @@
[frontend.state :as state]
[goog.crypt :as crypt]
[goog.crypt.Hmac]
[goog.crypt.Sha256]
[logseq.db :as ldb]
[frontend.db :as db]))
[goog.crypt.Sha256]))
(defn set-preferred-format!
[format]

View File

@ -169,6 +169,12 @@
[:action :string]
[:s3-key :string]
[:graph-name :string]]]
["upload-graph"
[:map
[:req-id :string]
[:action :string]
[:s3-key :string]
[:graph-name :string]]]
["grant-access"
[:map
[:req-id :string]

View File

@ -5,6 +5,7 @@
(:require [cljs-http.client :as http]
[cljs.core.async :as async :refer [<! go]]
[cljs.core.async.interop :refer [p->c]]
[clojure.string :as string]
[cognitect.transit :as transit]
[datascript.core :as d]
[frontend.worker.async-util :include-macros true :refer [<? go-try]]
@ -12,12 +13,11 @@
[frontend.worker.rtc.ws :as ws :refer [<send!]]
[frontend.worker.state :as worker-state]
[frontend.worker.util :as worker-util]
[logseq.common.util.page-ref :as page-ref]
[logseq.db.frontend.content :as db-content]
[logseq.db.frontend.schema :as db-schema]
[logseq.outliner.core :as outliner-core]
[logseq.db.frontend.content :as db-content]
[promesa.core :as p]
[clojure.string :as string]
[logseq.common.util.page-ref :as page-ref]))
[promesa.core :as p]))
(def transit-r (transit/reader :json))
@ -68,6 +68,34 @@
(<! (op-mem-layer/<sync-to-idb-layer! repo))
r))))))
(defn <async-upload-graph
[state repo conn remote-graph-name]
(go
(let [{:keys [url key all-blocks-str]}
(with-sub-data-from-ws state
(<? (<send! state {:req-id (get-req-id) :action "presign-put-temp-s3-obj"}))
(let [all-blocks (export-as-blocks @conn)
all-blocks-str (transit/write (transit/writer :json) all-blocks)]
(merge (<! (get-result-ch)) {:all-blocks-str all-blocks-str})))]
(<! (http/put url {:body all-blocks-str}))
(let [r (<? (ws/<send&receive state {:action "upload-graph"
:s3-key key
:graph-name remote-graph-name}))]
(if-not (:graph-uuid r)
(ex-info "upload graph failed" r)
(let [^js worker-obj (:worker/object @worker-state/*state)]
(d/transact! conn
[{:db/ident :logseq.kv/graph-uuid :graph/uuid (:graph-uuid r)}
{:db/ident :logseq.kv/graph-local-tx :graph/local-tx "0"}])
(<! (p->c
(p/do!
(.storeMetadata worker-obj repo (pr-str {:graph/uuid (:graph-uuid r)})))))
(op-mem-layer/init-empty-ops-store! repo)
(op-mem-layer/update-graph-uuid! repo (:graph-uuid r))
(op-mem-layer/update-local-tx! repo 8)
(<! (op-mem-layer/<sync-to-idb-layer! repo))
r))))))
(def block-type-kw->str
{:block-type/property "property"
:block-type/class "class"

View File

@ -405,7 +405,8 @@ server: ;; remove 2
(let [repo (state/get-current-repo)
conn (conn/get-db repo false)
date-formatter (common-config/get-date-formatter (worker-state/get-config repo))
[page1-uuid] (repeatedly random-uuid)]
[page1-uuid ;; page2-uuid page3-uuid page4-uuid
] (repeatedly random-uuid)]
(testing "apply-remote-update-page-ops-test1"
(let [data-from-ws {:req-id "req-id" :t 1 :t-before 0
:affected-blocks
@ -434,6 +435,35 @@ server: ;; remove 2
(rtc-core/apply-remote-update-page-ops repo conn date-formatter update-page-ops)
(is (= (str page1-uuid "-rename") (:block/name (d/entity @conn [:block/uuid page1-uuid]))))))
;; TODO: add this test back when fixed
;; (testing "apply-remote-update-page-ops-test3: create namespace-page"
;; (let [data-from-ws {:req-id "req-id" :t 1 :t-before 0
;; :affected-blocks
;; {page2-uuid {:op :update-page
;; :self page2-uuid
;; :page-name "aaa/bbb/ccc"
;; :original-name "aaa/bbb/ccc"}
;; page3-uuid {:op :update-page
;; :self page3-uuid
;; :page-name "aaa/bbb"
;; :original-name "aaa/bbb"}
;; page4-uuid {:op :update-page
;; :self page4-uuid
;; :page-name "aaa"
;; :original-name "aaa"}}}
;; update-page-ops (vals
;; (:update-page-ops-map
;; (#'rtc-core/affected-blocks->diff-type-ops repo (:affected-blocks data-from-ws))))]
;; (is (rtc-const/data-from-ws-validator data-from-ws))
;; (rtc-core/apply-remote-update-page-ops repo conn date-formatter update-page-ops)
;; (prn ::x
;; (into {} (d/entity @conn [:block/uuid page2-uuid]))
;; (into {} (d/entity @conn [:block/uuid page3-uuid]))
;; (into {} (d/entity @conn [:block/uuid page4-uuid]))
;; (into {} (d/entity @conn [:block/name "aaa"]))
;; (into {} (d/entity @conn [:block/name "aaa/bbb"]))
;; (into {} (d/entity @conn [:block/name "aaa/bbb/ccc"])))
;; ))
(testing "apply-remote-remove-page-ops-test1"
(let [data-from-ws {:req-id "req-id" :t 1 :t-before 0
:affected-blocks