|
@@ -15,7 +15,7 @@ import {renderSnippet} from "../config/util/snippets";
|
|
|
import {openFile, openFileById} from "../editor/util";
|
|
|
import {focusByRange} from "../protyle/util/selection";
|
|
|
import {exitSiYuan} from "../dialog/processSystem";
|
|
|
-import {getSearch, isWindow} from "../util/functions";
|
|
|
+import {getSearch, isWindow, trimPrefix} from "../util/functions";
|
|
|
import {initStatus} from "../layout/status";
|
|
|
import {showMessage} from "../dialog/message";
|
|
|
import {replaceLocalPath} from "../editor/rename";
|
|
@@ -247,39 +247,51 @@ export const initWindow = async (app: App) => {
|
|
|
});
|
|
|
if (!isWindow()) {
|
|
|
ipcRenderer.on(Constants.SIYUAN_OPEN_URL, (event, url) => {
|
|
|
- if (url.startsWith("siyuan://plugins/")) {
|
|
|
- const pluginId = url.replace("siyuan://plugins/", "").split("?")[0];
|
|
|
- if (!pluginId) {
|
|
|
+ try {
|
|
|
+ var urlObj = new URL(url);
|
|
|
+ if (urlObj.protocol !== "siyuan:") {
|
|
|
return;
|
|
|
}
|
|
|
- app.plugins.find(plugin => {
|
|
|
- if (pluginId.startsWith(plugin.name)) {
|
|
|
+ } catch (error) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (urlObj.pathname.startsWith("//plugins/")) {
|
|
|
+ const pluginPathname = trimPrefix(urlObj.pathname, "//plugins/");
|
|
|
+ if (!pluginPathname) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const pluginId = pluginPathname.split("/")[0];
|
|
|
+ app.plugins.forEach(plugin => {
|
|
|
+ if (pluginPathname.startsWith(plugin.name)) {
|
|
|
// siyuan://plugins/plugin-name/foo?bar=baz
|
|
|
plugin.eventBus.emit("open-siyuan-url-plugin", {url});
|
|
|
- // siyuan://plugins/plugin-samplecustom_tab?title=自定义页签&icon=iconFace&data={"text": "This is the custom plugin tab I opened via protocol."}
|
|
|
- let data = getSearch("data", url);
|
|
|
- try {
|
|
|
- data = JSON.parse(data || "{}");
|
|
|
- } catch (e) {
|
|
|
- console.log("Error open plugin tab with protocol:", e);
|
|
|
+
|
|
|
+ // https://github.com/siyuan-note/siyuan/pull/9256
|
|
|
+ if (pluginId !== plugin.name) {
|
|
|
+ // siyuan://plugins/plugin-samplecustom_tab?title=自定义页签&icon=iconFace&data={"text": "This is the custom plugin tab I opened via protocol."}
|
|
|
+ let data = urlObj.searchParams.get("data");
|
|
|
+ try {
|
|
|
+ data = JSON.parse(data || "{}");
|
|
|
+ } catch (e) {
|
|
|
+ console.log("Error open plugin tab with protocol:", e);
|
|
|
+ }
|
|
|
+ openFile({
|
|
|
+ app,
|
|
|
+ custom: {
|
|
|
+ title: urlObj.searchParams.get("title"),
|
|
|
+ icon: urlObj.searchParams.get("icon"),
|
|
|
+ data,
|
|
|
+ id: pluginPathname
|
|
|
+ },
|
|
|
+ });
|
|
|
}
|
|
|
- openFile({
|
|
|
- app,
|
|
|
- custom: {
|
|
|
- title: getSearch("title", url),
|
|
|
- icon: getSearch("icon", url),
|
|
|
- data,
|
|
|
- id: pluginId
|
|
|
- },
|
|
|
- });
|
|
|
- return true;
|
|
|
}
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
if (isSYProtocol(url)) {
|
|
|
const id = getIdFromSYProtocol(url);
|
|
|
- const focus = getSearch("focus", url) === "1";
|
|
|
+ const focus = urlObj.searchParams.get("focus") === "1";
|
|
|
fetchPost("/api/block/checkBlockExist", {id}, existResponse => {
|
|
|
if (existResponse.data) {
|
|
|
openFileById({
|