From 6082663f4c74ce5bff6100a1c3db3effe5c0f66c Mon Sep 17 00:00:00 2001 From: Andelf Date: Sat, 11 Mar 2023 13:04:38 +0800 Subject: [PATCH] fix(electron): assets:// url handling --- deps/graph-parser/src/logseq/graph_parser/config.cljs | 1 + src/electron/electron/core.cljs | 4 ++-- src/main/frontend/components/block.cljs | 5 +++-- src/main/frontend/config.cljs | 1 + src/main/frontend/fs/node.cljs | 2 -- src/main/frontend/fs2/path.cljs | 11 ++++++++--- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/deps/graph-parser/src/logseq/graph_parser/config.cljs b/deps/graph-parser/src/logseq/graph_parser/config.cljs index b51fe5fb4e..5a221c0df4 100644 --- a/deps/graph-parser/src/logseq/graph_parser/config.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/config.cljs @@ -30,6 +30,7 @@ (defn remove-asset-protocol [s] + (js/console.error "BUG: remove-asset-protocol") (if (local-protocol-asset? s) (-> s (string/replace-first asset-protocol "") diff --git a/src/electron/electron/core.cljs b/src/electron/electron/core.cljs index 4438c3153b..13c8b16a1d 100644 --- a/src/electron/electron/core.cljs +++ b/src/electron/electron/core.cljs @@ -68,8 +68,8 @@ (fn [^js request callback] (let [url (.-url request) url (decode-protected-assets-schema-path url) - path (js/decodeURI url) - path (string/replace path "assets://" "")] + path (string/replace url "assets://" "") + path (js/decodeURIComponent path)] (callback #js {:path path})))) (.registerFileProtocol diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index 199a5dc361..d582c01011 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -81,7 +81,8 @@ [reitit.frontend.easy :as rfe] [rum.core :as rum] [shadow.loader :as loader] - [datascript.impl.entity :as e])) + [datascript.impl.entity :as e] + [frontend.fs2.path :as fs2-path])) (defn safe-read-string ([s] @@ -199,7 +200,7 @@ (if (and (gp-config/local-protocol-asset? src) (file-sync/current-graph-sync-on?)) (let [*exist? (::exist? state) - asset-path (gp-config/remove-asset-protocol src)] + asset-path (fs2-path/url-to-path src)] (if (string/blank? asset-path) (reset! *exist? false) ;; FIXME(andelf): possible bug here diff --git a/src/main/frontend/config.cljs b/src/main/frontend/config.cljs index 37c03055b7..26a8a65db7 100644 --- a/src/main/frontend/config.cljs +++ b/src/main/frontend/config.cljs @@ -474,6 +474,7 @@ (defn expand-relative-assets-path ;; ../assets/xxx -> {assets|file}://{current-graph-root-path}/xxx [source] + (js/console.error "BUG: assets:// url handling") (when-let [protocol (and (string? source) (not (string/blank? source)) (if (util/electron?) "assets" "file"))] diff --git a/src/main/frontend/fs/node.cljs b/src/main/frontend/fs/node.cljs index 0be8c4c2fb..096d4e379b 100644 --- a/src/main/frontend/fs/node.cljs +++ b/src/main/frontend/fs/node.cljs @@ -69,7 +69,6 @@ ext (string/lower-case (util/get-file-ext rpath)) db-content (or old-content (db/get-file repo rpath) "") contents-matched? (contents-matched? disk-content db-content)] - (prn ::disk disk-content ::db db-content ::new content) (cond (and (not= stat :not-found) ; file on the disk was deleted @@ -77,7 +76,6 @@ (not (contains? #{"excalidraw" "edn" "css"} ext)) (not (string/includes? rpath "/.recycle/"))) (do - (prn ::?????) (state/pub-event! [:file/not-matched-from-disk rpath disk-content content])) :else diff --git a/src/main/frontend/fs2/path.cljs b/src/main/frontend/fs2/path.cljs index 8b2ab4e3f2..eaee0ee927 100644 --- a/src/main/frontend/fs2/path.cljs +++ b/src/main/frontend/fs2/path.cljs @@ -203,9 +203,13 @@ (defn url-to-path "Extract path part of a URL. decoded" [original-url] - (let [^js url (js/URL. original-url) - path (gp-util/safe-decode-uri-component (.-pathname url))] - path)) + (if (is-file-url original-url) + ;; NOTE: URL type is not consistent across all protocols + ;; Check file:// and assets://, pathname behavior is different + (let [^js url (js/URL. (string/replace original-url "assets://" "file://")) + path (gp-util/safe-decode-uri-component (.-pathname url))] + path) + original-url)) (defn relative-path @@ -213,6 +217,7 @@ Works for both path and URL." [base-path sub-path] (prn :rel-path base-path sub-path) + ;; (js/console.trace) (let [base-path (path-normalize base-path) sub-path (path-normalize sub-path) is-url? (is-file-url base-path)]