Browse Source

fix: logseq.Editor.renamePage HTTP API hangs indefinitely

related to https://github.com/logseq/db-test/issues/701
Tienson Qin 2 months ago
parent
commit
664743b286
2 changed files with 18 additions and 23 deletions
  1. 10 17
      src/main/frontend/handler/page.cljs
  2. 8 6
      src/main/frontend/worker/db_worker.cljs

+ 10 - 17
src/main/frontend/handler/page.cljs

@@ -76,23 +76,16 @@
       (<favorite-page! page-name))))
 
 (defn rename!
-  [page-uuid-or-old-name new-name & {:as _opts}]
-  (p/let [page-uuid (cond
-                      (uuid? page-uuid-or-old-name)
-                      page-uuid-or-old-name
-                      (common-util/uuid-string? page-uuid-or-old-name)
-                      page-uuid-or-old-name
-                      :else
-                      (:block/uuid (db/get-page page-uuid-or-old-name)))
-          result (ui-outliner-tx/transact!
-                  {:outliner-op :rename-page}
-                  (outliner-op/rename-page! page-uuid new-name))]
-    (case (if (string? result) (keyword result) result)
-      :invalid-empty-name
-      (notification/show! "Please use a valid name, empty name is not allowed!" :warning)
-      :rename-page-exists
-      (notification/show! "Another page with the new name exists already" :warning)
-      nil)))
+  [page-uuid new-name & {:as _opts}]
+  (let [page-uuid (if (util/uuid-string? page-uuid)
+                    (uuid page-uuid)
+                    (throw (ex-info "Invalid page uuid"
+                                    {:page-uuid page-uuid})))]
+    (p/do!
+     (ui-outliner-tx/transact!
+      {:outliner-op :rename-page}
+      (outliner-op/rename-page! page-uuid new-name))
+     true)))
 
 (defn <reorder-favorites!
   [favorites]

+ 8 - 6
src/main/frontend/worker/db_worker.cljs

@@ -52,6 +52,7 @@
             [logseq.db.sqlite.export :as sqlite-export]
             [logseq.db.sqlite.gc :as sqlite-gc]
             [logseq.db.sqlite.util :as sqlite-util]
+            [logseq.outliner.core :as outliner-core]
             [logseq.outliner.op :as outliner-op]
             [me.tonsky.persistent-sorted-set :as set :refer [BTSet]]
             [missionary.core :as m]
@@ -779,10 +780,6 @@
             dbs (ldb/read-transit-str r)]
       (p/all (map #(.unsafeUnlinkDB this (:name %)) dbs)))))
 
-(defn- rename-page!
-  []
-  (throw (ex-info "Rename page is a file graph only operation" {})))
-
 (defn- delete-page!
   [conn page-uuid]
   (let [error-handler (fn [{:keys [msg]}]
@@ -803,8 +800,13 @@
   (outliner-op/register-op-handlers!
    {:create-page (fn [conn [title options]]
                    (create-page! conn title options))
-    :rename-page (fn [& _]
-                   (rename-page!))
+    :rename-page (fn [conn [page-uuid new-title]]
+                   (if (string/blank? new-title)
+                     (throw (ex-info "Page name shouldn't be blank" {:block/uuid page-uuid
+                                                                     :block/title new-title}))
+                     (outliner-core/save-block! conn
+                                                {:block/uuid page-uuid
+                                                 :block/title new-title})))
     :delete-page (fn [conn [page-uuid]]
                    (delete-page! conn page-uuid))}))