Add plugin event bus open-siyuan-url (#8927)

* feat: Add plugin event bus `open-siyuan-url`

* feat: Add plugin event bus `open-siyuan-url-blocks` and `open-siyuan-url-plugins`

* perf: improve plugin event bus `open-siyuan-url-blocks`
This commit is contained in:
Yingyi / 颖逸 2023-08-12 00:05:19 +08:00 committed by GitHub
parent ec4e0c0d14
commit 75ad2a2986
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 26 deletions

View file

@ -249,48 +249,68 @@ export const initWindow = (app: App) => {
currentWindow.on("blur", winOnBlur);
if (!isWindow()) {
ipcRenderer.on(Constants.SIYUAN_OPENURL, (event, url) => {
if (/^siyuan:\/\/plugins\//.test(url)) {
// siyuan://plugins/plugin-samplecustom_tab?title=自定义页签&icon=iconFace&data={"text": "This is the custom plugin tab I opened via protocol."}
const pluginId = url.replace("siyuan://plugins/", "").split("?")[0];
app.plugins.find(plugin => {
const match = Object.keys(plugin.models).find(key => {
if (key === pluginId) {
let data = getSearch("data", url);
try {
data = JSON.parse(data || "{}");
} catch (e) {
console.log("Error open plugin tab with protocol:", e);
app.plugins.forEach(plugin => {
plugin.eventBus.emit("open-siyuan-url", { url });
});
if (url.startsWith("siyuan://plugins/")) {
const urlObj = new URL(url);
const pluginId = urlObj.pathname.split("/")[3];
if (pluginId) {
app.plugins.find(plugin => {
// siyuan://plugins/plugin-name/foo?bar=baz
if (pluginId.startsWith(plugin.name)) {
plugin.eventBus.emit("open-siyuan-url-plugins", { url });
}
// siyuan://plugins/plugin-samplecustom_tab?title=自定义页签&icon=iconFace&data={"text": "This is the custom plugin tab I opened via protocol."}
const match = Object.keys(plugin.models).find(key => {
if (key === pluginId) {
let data = getSearch("data", url);
try {
data = JSON.parse(data || "{}");
} catch (e) {
console.log("Error open plugin tab with protocol:", e);
}
openFile({
app,
custom: {
title: getSearch("title", url),
icon: getSearch("icon", url),
data,
fn: plugin.models[key]
},
});
return true;
}
openFile({
app,
custom: {
title: getSearch("title", url),
icon: getSearch("icon", url),
data,
fn: plugin.models[key]
},
});
});
if (match) {
return true;
}
});
if (match) {
return true;
}
});
return;
return;
}
}
if (isSYProtocol(url)) {
const id = getIdFromSYProtocol(url);
const focus = getSearch("focus", url) === "1";
fetchPost("/api/block/checkBlockExist", {id}, existResponse => {
if (existResponse.data) {
openFileById({
app,
id,
action: [Constants.CB_GET_FOCUS, Constants.CB_GET_CONTEXT],
zoomIn: getSearch("focus", url) === "1"
zoomIn: focus,
});
ipcRenderer.send(Constants.SIYUAN_SHOW, getCurrentWindow().id);
}
app.plugins.forEach(plugin => {
plugin.eventBus.emit("open-siyuan-url-blocks", {
url,
id,
focus,
exist: existResponse.data,
});
});
});
return;
}

View file

@ -44,6 +44,7 @@ type TEventBus = "ws-main" |
"open-noneditableblock" |
"open-menu-blockref" | "open-menu-fileannotationref" | "open-menu-tag" | "open-menu-link" | "open-menu-image" |
"open-menu-av" | "open-menu-content" | "open-menu-breadcrumbmore" |
"open-siyuan-url" | "open-siyuan-url-blocks" | "open-siyuan-url-plugins" |
"input-search" |
"loaded-protyle"
type TAVCol =