From 461458e5ec26c0bac62090f801f26ac380f300cf Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Thu, 22 Aug 2024 13:04:24 +0800 Subject: [PATCH] refactor: remove minapp.html --- electron.vite.config.ts | 10 +---- resources/minapp.html | 70 ----------------------------- src/main/index.ts | 8 +++- src/main/utils.ts | 32 ------------- src/main/window.ts | 46 ++++--------------- src/preload/index.d.ts | 2 +- src/preload/minapp.ts | 14 ------ src/renderer/src/config/provider.ts | 2 +- src/renderer/src/pages/apps/App.tsx | 7 +++ 9 files changed, 25 insertions(+), 166 deletions(-) delete mode 100644 resources/minapp.html delete mode 100644 src/main/utils.ts delete mode 100644 src/preload/minapp.ts diff --git a/electron.vite.config.ts b/electron.vite.config.ts index 0ffb64b8..4caf9ce3 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -7,15 +7,7 @@ export default defineConfig({ plugins: [externalizeDepsPlugin()] }, preload: { - plugins: [externalizeDepsPlugin()], - build: { - rollupOptions: { - input: { - index: resolve(__dirname, 'src/preload/index.ts'), - minapp: resolve(__dirname, 'src/preload/minapp.ts') - } - } - } + plugins: [externalizeDepsPlugin()] }, renderer: { resolve: { diff --git a/resources/minapp.html b/resources/minapp.html deleted file mode 100644 index f782f790..00000000 --- a/resources/minapp.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - MinApp - - - -
-
-
-
-
- - - diff --git a/src/main/index.ts b/src/main/index.ts index 432063f0..de0adf5d 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -50,7 +50,13 @@ app.whenReady().then(() => { ipcMain.handle('save-file', saveFile) ipcMain.handle('minapp', (_, args) => { - createMinappWindow(args) + createMinappWindow({ + url: args.url, + windowOptions: { + ...mainWindow.getBounds(), + ...args.windowOptions + } + }) }) ipcMain.handle('set-theme', (_, theme: 'light' | 'dark') => { diff --git a/src/main/utils.ts b/src/main/utils.ts deleted file mode 100644 index 6d2e4423..00000000 --- a/src/main/utils.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** - * 将 JavaScript 对象转换为 URL 查询参数字符串 - * @param obj - 要转换的对象 - * @param options - 配置选项 - * @returns 转换后的查询参数字符串 - */ -export function objectToQueryParams( - obj: Record, - options: { - skipNull?: boolean - skipUndefined?: boolean - } = {} -): string { - const { skipNull = false, skipUndefined = false } = options - - const params = new URLSearchParams() - - for (const [key, value] of Object.entries(obj)) { - if (skipNull && value === null) continue - if (skipUndefined && value === undefined) continue - - if (Array.isArray(value)) { - value.forEach((item) => params.append(key, String(item))) - } else if (typeof value === 'object' && value !== null) { - params.append(key, JSON.stringify(value)) - } else if (value !== undefined && value !== null) { - params.append(key, String(value)) - } - } - - return params.toString() -} diff --git a/src/main/window.ts b/src/main/window.ts index eeadee29..cf6fefb3 100644 --- a/src/main/window.ts +++ b/src/main/window.ts @@ -1,11 +1,10 @@ import { is } from '@electron-toolkit/utils' -import { app, BrowserView, BrowserWindow, Menu, MenuItem, shell } from 'electron' +import { BrowserWindow, Menu, MenuItem, shell } from 'electron' import windowStateKeeper from 'electron-window-state' import { join } from 'path' import icon from '../../build/icon.png?asset' import { appConfig, titleBarOverlayDark, titleBarOverlayLight } from './config' -import { objectToQueryParams } from './utils' export function createMainWindow() { // Load the previous state with fallback to defaults @@ -62,14 +61,7 @@ export function createMainWindow() { }) mainWindow.webContents.setWindowOpenHandler((details) => { - const websiteReg = /accounts.google.com/i - - if (websiteReg.test(details.url)) { - createMinappWindow({ url: details.url, windowOptions: { width: 1000, height: 680 } }) - } else { - shell.openExternal(details.url) - } - + shell.openExternal(details.url) return { action: 'deny' } }) @@ -107,45 +99,23 @@ export function createMinappWindow({ url: string windowOptions?: Electron.BrowserWindowConstructorOptions }) { - const width = 1000 - const height = 680 - const headerHeight = 40 + const width = windowOptions?.width || 1000 + const height = windowOptions?.height || 680 const minappWindow = new BrowserWindow({ width, height, autoHideMenuBar: true, - alwaysOnTop: true, - titleBarOverlay: titleBarOverlayDark, - titleBarStyle: 'hidden', + title: 'Cherry Studio', ...windowOptions, webPreferences: { preload: join(__dirname, '../preload/minapp.js'), - sandbox: false + sandbox: false, + contextIsolation: false } }) - const view = new BrowserView() - view.setBounds({ x: 0, y: headerHeight, width, height: height - headerHeight }) - view.webContents.loadURL(url) - - const minappWindowParams = { - title: windowOptions?.title || 'CherryStudio' - } - - const appPath = app.getAppPath() - const minappHtmlPath = appPath + '/resources/minapp.html' - - minappWindow.loadURL('file://' + minappHtmlPath + '?' + objectToQueryParams(minappWindowParams)) - minappWindow.setBrowserView(view) - minappWindow.on('resize', () => { - view.setBounds({ - x: 0, - y: headerHeight, - width: minappWindow.getBounds().width, - height: minappWindow.getBounds().height - headerHeight - }) - }) + minappWindow.loadURL(url) return minappWindow } diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts index 22e25b25..91c11553 100644 --- a/src/preload/index.d.ts +++ b/src/preload/index.d.ts @@ -14,7 +14,7 @@ declare global { setProxy: (proxy: string | undefined) => void saveFile: (path: string, content: string) => void setTheme: (theme: 'light' | 'dark') => void - minApp: (url: string) => void + minApp: (options: { url: string; windowOptions?: Electron.BrowserWindowConstructorOptions }) => void } } } diff --git a/src/preload/minapp.ts b/src/preload/minapp.ts deleted file mode 100644 index 9ace85b5..00000000 --- a/src/preload/minapp.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { contextBridge } from 'electron' - -const api = {} - -if (process.contextIsolated) { - try { - contextBridge.exposeInMainWorld('api', api) - } catch (error) { - console.error(error) - } -} else { - // @ts-ignore (define in dts) - window.api = api -} diff --git a/src/renderer/src/config/provider.ts b/src/renderer/src/config/provider.ts index 2c3da572..3f89ea87 100644 --- a/src/renderer/src/config/provider.ts +++ b/src/renderer/src/config/provider.ts @@ -354,7 +354,7 @@ export const PROVIDER_CONFIG = { }, app: { name: 'Groq', - url: 'https://groq.com/', + url: 'https://chat.groq.com/', logo: GroqProviderLogo } }, diff --git a/src/renderer/src/pages/apps/App.tsx b/src/renderer/src/pages/apps/App.tsx index 989a78d7..d3e85120 100644 --- a/src/renderer/src/pages/apps/App.tsx +++ b/src/renderer/src/pages/apps/App.tsx @@ -12,6 +12,13 @@ const App: FC = ({ app }) => { const { theme } = useTheme() const onClick = () => { + const websiteReg = /claude|chatgpt|groq/i + + if (websiteReg.test(app.url)) { + window.api.minApp({ url: app.url, windowOptions: { title: app.name } }) + return + } + MinApp.start(app) }