mirror of
https://github.com/rubickCenter/rubick
synced 2025-12-18 00:34:19 +08:00
🐛 修复 #221 & 性能优化,支持插件窗口池
This commit is contained in:
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user