diff --git a/app/src/index.ts b/app/src/index.ts index 90e9766c2..4e2b2f324 100644 --- a/app/src/index.ts +++ b/app/src/index.ts @@ -61,7 +61,7 @@ export class App { if (data) { switch (data.cmd) { case "reloadPlugin": - reloadPlugin(this); + reloadPlugin(this, data.data); break; case "syncMergeResult": reloadSync(this, data.data); diff --git a/app/src/mobile/util/onMessage.ts b/app/src/mobile/util/onMessage.ts index f1b073743..13a49eec5 100644 --- a/app/src/mobile/util/onMessage.ts +++ b/app/src/mobile/util/onMessage.ts @@ -8,7 +8,7 @@ export const onMessage = (app: App, data: IWebSocketData) => { if (data) { switch (data.cmd) { case "reloadPlugin": - reloadPlugin(app); + reloadPlugin(app, data.data); break; case "syncMergeResult": reloadSync(app, data.data); diff --git a/app/src/plugin/loader.ts b/app/src/plugin/loader.ts index 9ab368204..8241a59eb 100644 --- a/app/src/plugin/loader.ts +++ b/app/src/plugin/loader.ts @@ -25,12 +25,14 @@ const runCode = (code: string, sourceURL: string) => { return window.eval("(function anonymous(require, module, exports){".concat(code, "\n})\n//# sourceURL=").concat(sourceURL, "\n")); }; -export const loadPlugins = async (app: App) => { +export const loadPlugins = async (app: App, names?: string[]) => { const response = await fetchSyncPost("/api/petal/loadPetals", {frontend: getFrontend()}); let css = ""; // 为加快启动速度,不进行 await response.data.forEach((item: IPluginData) => { - loadPluginJS(app, item); + if (!names || (names && !names.includes(item.name))) { + loadPluginJS(app, item); + } css += item.css || "" + "\n"; }); const pluginsStyle = document.getElementById("pluginsStyle"); @@ -197,13 +199,15 @@ export const afterLoadPlugin = (plugin: Plugin) => { /// #endif }; -export const reloadPlugin = (app: App) => { - app.plugins.forEach((item) => { - uninstall(this, item.name); +export const reloadPlugin = async (app: App, data: { upsertPlugins: string[], removePlugins: string[] }) => { + data.removePlugins.concat(data.upsertPlugins).forEach((item) => { + uninstall(this, item); }); - loadPlugins(this).then(() => { + loadPlugins(this, data.upsertPlugins).then(() => { app.plugins.forEach(item => { - afterLoadPlugin(item); + if (data.upsertPlugins.includes(item.name)) { + afterLoadPlugin(item); + } }); }); /// #if !MOBILE diff --git a/app/src/window/index.ts b/app/src/window/index.ts index 695cf4e6b..b6b978cf8 100644 --- a/app/src/window/index.ts +++ b/app/src/window/index.ts @@ -52,7 +52,7 @@ class App { if (data) { switch (data.cmd) { case "reloadPlugin": - reloadPlugin(this); + reloadPlugin(this, data.data); break; case "syncMergeResult": reloadSync(this, data.data);