From a8d1f04734ccdeaf8e1ad6b60dd431f18f5d19a4 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Fri, 15 May 2026 16:44:10 +0800 Subject: [PATCH] fix: open desktop deep links fix https://github.com/logseq/db-test/issues/878 --- src/electron/electron/link.cljs | 8 ++++++++ src/electron/electron/window.cljs | 3 ++- src/test/electron/link_test.cljs | 10 ++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/electron/electron/link.cljs create mode 100644 src/test/electron/link_test.cljs diff --git a/src/electron/electron/link.cljs b/src/electron/electron/link.cljs new file mode 100644 index 0000000000..cbe153f485 --- /dev/null +++ b/src/electron/electron/link.cljs @@ -0,0 +1,8 @@ +(ns electron.link) + +(def shell-open-protocols + #{"https:" "http:" "mailto:" "logseq:"}) + +(defn shell-open-url? + [^js/URL parsed-url] + (contains? shell-open-protocols (.-protocol parsed-url))) diff --git a/src/electron/electron/window.cljs b/src/electron/electron/window.cljs index 5071254fdf..f9ef5edd2d 100644 --- a/src/electron/electron/window.cljs +++ b/src/electron/electron/window.cljs @@ -9,6 +9,7 @@ [electron.context-menu :as context-menu] [electron.db-worker :as db-worker] [electron.i18n :refer [t]] + [electron.link :as link] [electron.logger :as logger] [electron.spell-check :as spell-check] [electron.state :as state] @@ -126,7 +127,7 @@ (let [URL (.-URL URL) parsed-url (try (URL. url) (catch :default _ nil))] (when parsed-url - (if (contains? #{"https:" "http:" "mailto:"} (.-protocol parsed-url)) + (if (link/shell-open-url? parsed-url) (.openExternal shell url) (when-let [^js res (and (fn? default-open) (.showMessageBoxSync dialog diff --git a/src/test/electron/link_test.cljs b/src/test/electron/link_test.cljs new file mode 100644 index 0000000000..42fe6a055f --- /dev/null +++ b/src/test/electron/link_test.cljs @@ -0,0 +1,10 @@ +(ns electron.link-test + (:require [cljs.test :refer [deftest is]] + [electron.link :as link])) + +(deftest logseq-links-open-through-electron-shell + (is (true? + (link/shell-open-url? + (js/URL. "logseq://graph/demo?block-id=00000000-0000-0000-0000-000000000001")))) + (is (true? (link/shell-open-url? (js/URL. "https://logseq.com")))) + (is (false? (link/shell-open-url? (js/URL. "file:///tmp/graph.edn")))))