Browse Source

fix(regression): slow to write file

Tienson Qin 5 months ago
parent
commit
fe0f5f6abe
1 changed files with 10 additions and 23 deletions
  1. 10 23
      src/main/frontend/common/file/core.cljs

+ 10 - 23
src/main/frontend/common/file/core.cljs

@@ -30,43 +30,30 @@
     content))
 
 (defn- transform-content
-  [repo db {:block/keys [collapsed? format pre-block? title page properties] :as b} level {:keys [heading-to-list?]} context]
-  (let [db-based? (sqlite-util/db-based-graph? repo)
-        block-ref-not-saved? (and (seq (:block/_refs (d/entity db (:db/id b))))
-                                  (not (string/includes? title (str (:block/uuid b))))
-                                  (not db-based?))
+  [repo db {:block/keys [collapsed? format pre-block? properties] :as b} level {:keys [heading-to-list?]} context {:keys [db-based?]}]
+  (let [title (or (:block/raw-title b) (:block/title b))
+        block-ref-not-saved? (and (not db-based?)
+                                  (first (:block/_refs (d/entity db (:db/id b))))
+                                  (not (string/includes? title (str (:block/uuid b)))))
         heading (:heading properties)
-        markdown? (= :markdown format)
         title (if db-based?
                 ;; replace [[uuid]] with block's content
                 (db-content/recur-replace-uuid-in-block-title (d/entity db (:db/id b)))
                 title)
         content (or title "")
-        page-first-child? (= (:db/id b) (ldb/get-first-child db (:db/id page)))
-        pre-block? (or pre-block?
-                       (and page-first-child?
-                            markdown?
-                            (string/includes? (first (string/split-lines content)) ":: ")))
         content (cond
                   pre-block?
                   (let [content (string/trim content)]
                     (str content "\n"))
 
                   :else
-                  (let [;; first block is a heading, Markdown users prefer to remove the `-` before the content
-                        markdown-top-heading? (and markdown?
-                                                   page-first-child?
-                                                   heading)
-                        [prefix spaces-tabs]
+                  (let [[prefix spaces-tabs]
                         (cond
                           (= format :org)
                           [(->>
                             (repeat level "*")
                             (apply str)) ""]
 
-                          markdown-top-heading?
-                          ["" ""]
-
                           :else
                           (let [level (if (and heading-to-list? heading)
                                         (if (> heading 1)
@@ -83,8 +70,7 @@
                                   content)
                         content (if db-based? content (content-with-collapsed-state repo format content collapsed?))
                         new-content (indented-block-content (string/trim content) spaces-tabs)
-                        sep (if (or markdown-top-heading?
-                                    (string/blank? new-content))
+                        sep (if (string/blank? new-content)
                               ""
                               " ")]
                     (str prefix sep new-content)))]
@@ -94,12 +80,13 @@
 
 (defn- tree->file-content-aux
   [repo db tree {:keys [init-level link] :as opts} context]
-  (let [block-contents (transient [])]
+  (let [db-based? (sqlite-util/db-based-graph? repo)
+        block-contents (transient [])]
     (loop [[f & r] tree level init-level]
       (if (nil? f)
         (->> block-contents persistent! flatten (remove nil?))
         (let [page? (nil? (:block/page f))
-              content (if (and page? (not link)) nil (transform-content repo db f level opts context))
+              content (if (and page? (not link)) nil (transform-content repo db f level opts context {:db-based? db-based?}))
               new-content
               (if-let [children (seq (:block/children f))]
                 (cons content (tree->file-content-aux repo db children {:init-level (inc level)} context))