From 77726bda4c352eb3505153187c25a68afc62b076 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 8 Jan 2024 12:59:08 +0800 Subject: [PATCH] fix: worker dependencies --- deps/common/src/logseq/common/util.cljs | 13 +++++++ src/main/frontend/handler/common/page.cljs | 27 +------------ src/main/frontend/util.cljc | 15 ++------ .../frontend/worker/file/page_rename.cljs | 18 ++++----- .../frontend/worker/handler/page/rename.cljs | 38 +++++++++++++++---- src/main/frontend/worker/rtc/core.cljs | 7 ++-- 6 files changed, 63 insertions(+), 55 deletions(-) diff --git a/deps/common/src/logseq/common/util.cljs b/deps/common/src/logseq/common/util.cljs index 97c441017..951960bfd 100644 --- a/deps/common/src/logseq/common/util.cljs +++ b/deps/common/src/logseq/common/util.cljs @@ -347,3 +347,16 @@ https://github.com/logseq/logseq/pull/8679" [parts] (string/join "/" parts)) + +(def escape-chars "[]{}().+*?|$") + +(defn escape-regex-chars + "Escapes characters in string `old-value" + [old-value] + (reduce (fn [acc escape-char] + (string/replace acc escape-char (str "\\" escape-char))) + old-value escape-chars)) + +(defn replace-ignore-case + [s old-value new-value] + (string/replace s (re-pattern (str "(?i)" (escape-regex-chars old-value))) new-value)) diff --git a/src/main/frontend/handler/common/page.cljs b/src/main/frontend/handler/common/page.cljs index a71756350..f0895fd2f 100644 --- a/src/main/frontend/handler/common/page.cljs +++ b/src/main/frontend/handler/common/page.cljs @@ -10,7 +10,6 @@ [frontend.state :as state] [frontend.worker.handler.page :as worker-page] [logseq.common.util :as common-util] - [logseq.graph-parser.text :as text] [frontend.handler.ui :as ui-handler] [frontend.config :as config] [frontend.fs :as fs] @@ -86,29 +85,7 @@ ;; other fns ;; ========= -(defn rename-update-namespace! - "update :block/namespace of the renamed block" - [page old-original-name new-name] - (let [old-namespace? (text/namespace-page? old-original-name) - new-namespace? (text/namespace-page? new-name) - repo (state/get-current-repo)] - (cond - new-namespace? - ;; update namespace - (let [namespace (first (common-util/split-last "/" new-name))] - (when namespace - (create! namespace {:redirect? false}) ;; create parent page if not exist, creation of namespace ref is handled in `create!` - (let [namespace-block (db/pull [:block/name (common-util/page-name-sanity-lc namespace)]) - page-txs [{:db/id (:db/id page) - :block/namespace (:db/id namespace-block)}]] - (db/transact! repo page-txs)))) - old-namespace? - ;; retract namespace - (db/transact! [[:db/retract (:db/id page) :block/namespace]]) - - :else - nil))) (defn after-page-deleted! [repo page-name file-path] @@ -116,7 +93,7 @@ ;; TODO: move favorite && unfavorite to worker too (unfavorite-page! page-name) - (when (= (common-util/page-name-sanity-lc (state/get-current-page)) + (when (= (some-> (state/get-current-page) common-util/page-name-sanity-lc) (common-util/page-name-sanity-lc page-name)) (route-handler/redirect-to-home!)) @@ -147,7 +124,7 @@ old-page-name (common-util/page-name-sanity-lc old-name) new-page-name (common-util/page-name-sanity-lc new-name) page (db/entity [:block/name new-page-name]) - redirect? (= (common-util/page-name-sanity-lc (state/get-current-page)) + redirect? (= (some-> (state/get-current-page) common-util/page-name-sanity-lc) (common-util/page-name-sanity-lc old-page-name))] ;; Redirect to the newly renamed page (when redirect? diff --git a/src/main/frontend/util.cljc b/src/main/frontend/util.cljc index 286cc8dd8..523dabe2a 100644 --- a/src/main/frontend/util.cljc +++ b/src/main/frontend/util.cljc @@ -641,18 +641,11 @@ (str prefix new-value))) s))) -(def escape-chars "[]{}().+*?|$") +#?(:cljs + (def escape-regex-chars common-util/escape-regex-chars)) -(defn escape-regex-chars - "Escapes characters in string `old-value" - [old-value] - (reduce (fn [acc escape-char] - (string/replace acc escape-char (str "\\" escape-char))) - old-value escape-chars)) - -(defn replace-ignore-case - [s old-value new-value] - (string/replace s (re-pattern (str "(?i)" (escape-regex-chars old-value))) new-value)) +#?(:cljs + (def replace-ignore-case common-util/replace-ignore-case)) ;; copy from https://stackoverflow.com/questions/18735665/how-can-i-get-the-positions-of-regex-matches-in-clojurescript #?(:cljs diff --git a/src/main/frontend/worker/file/page_rename.cljs b/src/main/frontend/worker/file/page_rename.cljs index 9e94dd8f6..8051659c3 100644 --- a/src/main/frontend/worker/file/page_rename.cljs +++ b/src/main/frontend/worker/file/page_rename.cljs @@ -1,6 +1,6 @@ (ns frontend.worker.file.page-rename "File based page rename fns" - (:require [frontend.util :as util] + (:require [logseq.common.util :as common-util] [logseq.graph-parser.property :as gp-property] [logseq.common.util.page-ref :as page-ref] [clojure.walk :as walk] @@ -22,7 +22,7 @@ (:org-mode/insert-file-link? config) (re-find (re-pattern - (util/format + (common-util/format "\\[\\[file:\\.*/.*%s\\.org\\]\\[(.*?)\\]\\]" old-name)) content))] (-> (if old-org-ref @@ -39,15 +39,15 @@ (defn- replace-tag-ref! [content old-name new-name] - (let [old-tag (util/format "#%s" old-name) + (let [old-tag (common-util/format "#%s" old-name) new-tag (if (re-find #"[\s\t]+" new-name) - (util/format "#[[%s]]" new-name) + (common-util/format "#[[%s]]" new-name) (str "#" new-name))] ;; hash tag parsing rules https://github.com/logseq/mldoc/blob/701243eaf9b4157348f235670718f6ad19ebe7f8/test/test_markdown.ml#L631 ;; Safari doesn't support look behind, don't use ;; TODO: parse via mldoc (string/replace content - (re-pattern (str "(?i)(^|\\s)(" (util/escape-regex-chars old-tag) ")(?=[,\\.]*($|\\s))")) + (re-pattern (str "(?i)(^|\\s)(" (common-util/escape-regex-chars old-tag) ")(?=[,\\.]*($|\\s))")) ;; case_insense^ ^lhs ^_grp2 look_ahead^ ^_grp3 (fn [[_match lhs _grp2 _grp3]] (str lhs new-tag))))) @@ -58,7 +58,7 @@ org-format? (= :org format) old-property (if org-format? (gp-property/colons-org old-name) (str old-name gp-property/colons)) new-property (if org-format? (gp-property/colons-org (name new-name)) (str (name new-name) gp-property/colons))] - (util/replace-ignore-case content old-property new-property))) + (common-util/replace-ignore-case content old-property new-property))) (defn- replace-old-page! "Unsanitized names" @@ -104,8 +104,8 @@ "Unsanitized only" [db config old-original-name new-name] ;; update all pages which have references to this page - (let [page (d/entity db [:block/name (util/page-name-sanity-lc old-original-name)]) - to-page (d/entity db [:block/name (util/page-name-sanity-lc new-name)]) + (let [page (d/entity db [:block/name (common-util/page-name-sanity-lc old-original-name)]) + to-page (d/entity db [:block/name (common-util/page-name-sanity-lc new-name)]) blocks (:block/_refs (d/entity db (:db/id page))) tx (->> (map (fn [{:block/keys [uuid content properties format] :as block}] (let [content (let [content' (replace-old-page! config content old-original-name new-name format)] @@ -115,7 +115,7 @@ (when-not (= properties' properties) properties'))] (when (or content properties) - (util/remove-nils-non-nested + (common-util/remove-nils-non-nested {:block/uuid uuid :block/content content :block/properties properties diff --git a/src/main/frontend/worker/handler/page/rename.cljs b/src/main/frontend/worker/handler/page/rename.cljs index 9dfba6516..8e7b01956 100644 --- a/src/main/frontend/worker/handler/page/rename.cljs +++ b/src/main/frontend/worker/handler/page/rename.cljs @@ -2,7 +2,7 @@ "Page rename" (:require [logseq.outliner.core :as outliner-core] [logseq.outliner.tree :as otree] - [frontend.handler.common.page :as page-common-handler] + [frontend.worker.handler.page :as worker-page] [datascript.core :as d] [medley.core :as medley] [clojure.string :as string] @@ -11,7 +11,31 @@ [frontend.worker.file.page-rename :as page-rename] [logseq.db.sqlite.util :as sqlite-util] [logseq.db :as ldb] - [logseq.common.util :as common-util])) + [logseq.common.util :as common-util] + [logseq.graph-parser.text :as text])) + +(defn rename-update-namespace! + "update :block/namespace of the renamed block" + [repo conn config page old-original-name new-name] + (let [old-namespace? (text/namespace-page? old-original-name) + new-namespace? (text/namespace-page? new-name)] + (cond + new-namespace? + ;; update namespace + (let [namespace (first (common-util/split-last "/" new-name))] + (when namespace + (worker-page/create! repo conn config namespace) ;; create parent page if not exist, creation of namespace ref is handled in `create!` + (let [namespace-block (d/entity @conn [:block/name (common-util/page-name-sanity-lc namespace)]) + page-txs [{:db/id (:db/id page) + :block/namespace (:db/id namespace-block)}]] + (d/transact! conn repo page-txs)))) + + old-namespace? + ;; retract namespace + (d/transact! conn [[:db/retract (:db/id page) :block/namespace]]) + + :else + nil))) (defn- replace-page-ref "Replace from-page refs with to-page" @@ -101,11 +125,11 @@ (page-rename/replace-page-ref db config from-page-name to-page-name)) tx-data (concat blocks-tx-data replace-ref-tx-data)] (d/transact! conn tx-data {:persist-op? persist-op?}) - (page-common-handler/rename-update-namespace! from-page - (common-util/get-page-original-name from-page) - (common-util/get-page-original-name to-page))) + (rename-update-namespace! repo conn config from-page + (common-util/get-page-original-name from-page) + (common-util/get-page-original-name to-page))) - (page-common-handler/delete! from-page-name nil :redirect-to-home? false :persist-op? persist-op?))) + (worker-page/delete! repo conn from-page-name (fn [_])))) (defn- compute-new-file-path "Construct the full path given old full path and the file sanitized body. @@ -162,7 +186,7 @@ (merge {:old-path old-path :new-path new-path}))}) - (page-common-handler/rename-update-namespace! page old-original-name new-name))))) + (rename-update-namespace! repo conn config page old-original-name new-name))))) (defn- rename-namespace-pages! "Original names (unsanitized only)" diff --git a/src/main/frontend/worker/rtc/core.cljs b/src/main/frontend/worker/rtc/core.cljs index 970a8049a..9f67ff83e 100644 --- a/src/main/frontend/worker/rtc/core.cljs +++ b/src/main/frontend/worker/rtc/core.cljs @@ -12,6 +12,7 @@ [logseq.outliner.transaction :as outliner-tx] [frontend.worker.util :as worker-util] [logseq.common.util :as common-util] + [logseq.common.config :as common-config] [malli.core :as m] [malli.util :as mu] [logseq.db.frontend.property :as db-property] @@ -24,7 +25,6 @@ [frontend.worker.rtc.const :as rtc-const] [frontend.worker.rtc.op-mem-layer :as op-mem-layer] [frontend.worker.rtc.ws :as ws] - [frontend.state :as state] [promesa.core :as p] [cljs-bean.core :as bean])) @@ -883,9 +883,10 @@ (defn