浏览代码

refactor(rtc): add async-upload-graph

rcmerci 1 年之前
父节点
当前提交
3cd31f1571

+ 2 - 2
capacitor.config.ts

@@ -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
     }
   })

+ 2 - 2
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/"]

+ 1 - 1
src/main/frontend/config.cljs

@@ -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

+ 18 - 1
src/main/frontend/db_worker.cljs

@@ -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))
 

+ 0 - 1
src/main/frontend/handler/events.cljs

@@ -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]

+ 1 - 3
src/main/frontend/handler/user.cljs

@@ -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]

+ 6 - 0
src/main/frontend/worker/rtc/const.cljs

@@ -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]

+ 32 - 4
src/main/frontend/worker/rtc/full_upload_download_graph.cljs

@@ -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"

+ 31 - 1
src/test/frontend/worker/rtc/rtc_fns_test.cljs

@@ -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