mirror of https://github.com/logseq/logseq
refactor(rtc): add async-upload-graph
parent
7ae3a70c39
commit
3cd31f1571
|
@ -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
|
||||
}
|
||||
})
|
||||
|
|
4
deps.edn
4
deps.edn
|
@ -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/"]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue