From 61b4e37fe06794f3423383949ea028218c4a9112 Mon Sep 17 00:00:00 2001 From: muwoo <2424880409@qq.com> Date: Wed, 13 Sep 2023 14:29:06 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=20#221=20&=20?= =?UTF-8?q?=E6=80=A7=E8=83=BD=E4=BC=98=E5=8C=96=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E7=AA=97=E5=8F=A3=E6=B1=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- guide/package.json | 2 +- package.json | 2 +- src/main/browsers/guide.ts | 2 +- src/main/browsers/runner.ts | 72 ++++++++++++++----- src/main/common/api.ts | 15 ++-- src/renderer/plugins-manager/options.ts | 2 +- .../plugins-manager/pluginClickEvent.ts | 2 +- 7 files changed, 68 insertions(+), 29 deletions(-) diff --git a/guide/package.json b/guide/package.json index 3860d0d..65635f3 100644 --- a/guide/package.json +++ b/guide/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "serve": "vue-cli-service serve --port 8083", + "serve": "vue-cli-service serve --port 8084", "build": "vue-cli-service build", "lint": "vue-cli-service lint" }, diff --git a/package.json b/package.json index f9e1946..2879025 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rubick", - "version": "3.0.0", + "version": "3.0.1", "author": "muwoo <2424880409@qq.com>", "private": true, "scripts": { diff --git a/src/main/browsers/guide.ts b/src/main/browsers/guide.ts index 539184d..1d37f85 100644 --- a/src/main/browsers/guide.ts +++ b/src/main/browsers/guide.ts @@ -52,7 +52,7 @@ export default () => { }); if (process.env.WEBPACK_DEV_SERVER_URL) { // Load the url of the dev server if in development mode - win.loadURL('http://localhost:8083'); + win.loadURL('http://localhost:8084'); } else { win.loadURL(`file://${path.join(__static, './guide/index.html')}`); } diff --git a/src/main/browsers/runner.ts b/src/main/browsers/runner.ts index 46a9ef3..c6fee6a 100644 --- a/src/main/browsers/runner.ts +++ b/src/main/browsers/runner.ts @@ -28,12 +28,60 @@ const getPreloadPath = (plugin, pluginIndexPath) => { return path.resolve(getRelativePath(pluginIndexPath), `../`, preload); }; +const viewPoolManager = () => { + const viewPool: any = { + views: [], + }; + const maxLen = 4; + return { + getView(pluginName) { + return viewPool.views.find((view) => view.pluginName === pluginName); + }, + addView(pluginName, view) { + if (this.getView(pluginName)) return; + if (viewPool.views.length > maxLen) { + viewPool.views.shift(); + } + viewPool.views.push({ + pluginName, + view, + }); + }, + }; +}; + export default () => { let view; + const viewInstance = viewPoolManager(); + + const viewReadyFn = async (window, { pluginSetting, ext }) => { + if (!view) return; + const height = pluginSetting && pluginSetting.height; + window.setSize(800, height || 660); + view.setBounds({ x: 0, y: 60, width: 800, height: height || 600 }); + view.setAutoResize({ width: true }); + executeHooks('PluginEnter', ext); + executeHooks('PluginReady', ext); + const config = await localConfig.getConfig(); + const darkMode = config.perf.common.darkMode; + darkMode && + view.webContents.executeJavaScript( + `document.body.classList.add("dark");window.rubick.theme="dark"` + ); + window.webContents.executeJavaScript(`window.pluginLoaded()`); + }; const init = (plugin, window: BrowserWindow) => { if (view === null || view === undefined) { - createView(plugin, window); + if (viewInstance.getView(plugin.name) && !commonConst.dev()) { + view = viewInstance.getView(plugin.name).view; + window.setBrowserView(view); + view.inited = true; + viewReadyFn(window, plugin); + } else { + createView(plugin, window); + viewInstance.addView(plugin.name, view); + } // eslint-disable-next-line @typescript-eslint/no-var-requires require('@electron/remote/main').enable(view.webContents); } @@ -75,26 +123,16 @@ export default () => { webviewTag: true, preload, session: ses, + defaultFontSize: 14, + defaultFontFamily: { + standard: 'system-ui', + serif: 'system-ui', + }, }, }); window.setBrowserView(view); view.webContents.loadURL(pluginIndexPath); - view.webContents.once('dom-ready', async () => { - if (!view) return; - const height = pluginSetting && pluginSetting.height; - window.setSize(800, height || 660); - view.setBounds({ x: 0, y: 60, width: 800, height: height || 600 }); - view.setAutoResize({ width: true }); - executeHooks('PluginEnter', plugin.ext); - executeHooks('PluginReady', plugin.ext); - const config = await localConfig.getConfig(); - const darkMode = config.perf.common.darkMode; - darkMode && - view.webContents.executeJavaScript( - `document.body.classList.add("dark");window.rubick.theme="dark"` - ); - window.webContents.executeJavaScript(`window.pluginLoaded()`); - }); + view.webContents.once('dom-ready', () => viewReadyFn(window, plugin)); // 修复请求跨域问题 view.webContents.session.webRequest.onBeforeSendHeaders( (details, callback) => { diff --git a/src/main/common/api.ts b/src/main/common/api.ts index 79f5550..3266338 100644 --- a/src/main/common/api.ts +++ b/src/main/common/api.ts @@ -33,6 +33,10 @@ class API extends DBInstance { event.returnValue = data; // event.sender.send(`msg-back-${arg.type}`, data); }); + // 按 ESC 退出插件 + mainWindow.webContents.on('before-input-event', (event, input) => + this.__EscapeKeyDown(event, input, mainWindow) + ); } public getCurrentWindow = (window, e) => { @@ -81,15 +85,12 @@ class API extends DBInstance { })})` ); window.show(); - // 按 ESC 退出插件 - window.webContents.on('before-input-event', (event, input) => - this.__EscapeKeyDown(event, input, window) - ); - runnerInstance - .getView() - .webContents.on('before-input-event', (event, input) => + const view = runnerInstance.getView(); + if (!view.inited) { + view.webContents.on('before-input-event', (event, input) => this.__EscapeKeyDown(event, input, window) ); + } } public removePlugin(e, window) { diff --git a/src/renderer/plugins-manager/options.ts b/src/renderer/plugins-manager/options.ts index 0dd1427..c8d1d67 100644 --- a/src/renderer/plugins-manager/options.ts +++ b/src/renderer/plugins-manager/options.ts @@ -19,7 +19,7 @@ function searchKeyValues(lists, value, strict = false) { if (item.type === 'regex' && !strict) { return formatReg(item.match).test(value); } - if (item.type === 'over') { + if (item.type === 'over' && !strict) { return true; } return false; diff --git a/src/renderer/plugins-manager/pluginClickEvent.ts b/src/renderer/plugins-manager/pluginClickEvent.ts index 9e31e9f..4afa950 100644 --- a/src/renderer/plugins-manager/pluginClickEvent.ts +++ b/src/renderer/plugins-manager/pluginClickEvent.ts @@ -15,7 +15,7 @@ export default function pluginClickEvent({ plugin, fe, cmd, ext, openPlugin }) { // 模板文件 if (!plugin.main) { pluginDist.tplPath = commonConst.dev() - ? 'http://localhost:8082/#/' + ? 'http://localhost:8083/#/' : `file://${__static}/tpl/index.html`; } // 插件市场