add chrome for puppeteer downloader

This commit is contained in:
bossgeekgo
2024-02-14 09:55:20 +08:00
parent 5b5dc528d3
commit a2c70add1c
6 changed files with 91 additions and 6 deletions
+3 -1
View File
@@ -8,6 +8,7 @@
"start": "electron-vite preview",
"dev": "electron-vite dev",
"dev:geek-auto-start-chat-with-boss-only": "MAIN_BOSSGEEKGO_UI_RUN_MODE=geekAutoStartWithBoss electron-vite dev",
"dev:check-and-download-dependencies-for-init-only": "MAIN_BOSSGEEKGO_UI_RUN_MODE=checkAndDownloadDependenciesForInit electron-vite dev",
"build": "electron-vite build",
"format": "prettier --write .",
"lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts,.vue --fix",
@@ -21,10 +22,11 @@
"build:linux": "npm run build && electron-builder --linux"
},
"dependencies": {
"@bossgeekgo/geek-auto-start-chat-with-boss": "workspace:*",
"@bossgeekgo/dingtalk-plugin": "workspace:*",
"@bossgeekgo/geek-auto-start-chat-with-boss": "workspace:*",
"@electron-toolkit/preload": "^3.0.0",
"@electron-toolkit/utils": "^3.0.0",
"@puppeteer/browsers": "^2.0.0",
"electron-updater": "^6.1.7",
"element-plus": "^2.5.5",
"normalize.css": "^8.0.1",
@@ -0,0 +1,48 @@
import * as path from 'node:path'
import * as os from 'node:os'
import * as fs from 'node:fs'
import type { InstalledBrowser } from '@puppeteer/browsers'
const expectBuildId = process.env.EXPECT_CHROME_FOR_PUPPETEER_BUILD_ID || '121.0.6167.85'
const cacheDir = path.join(
os.homedir(),
'.bossgeekgo',
'external-node-runtime-dependencies',
'static'
)
const checkAndDownloadPuppeteer = async (options: {
downloadProgressCallback?: (downloadedBytes: number, totalBytes: number) => void
}) => {
const puppeteerManager = await import('@puppeteer/browsers')
const executablePath = puppeteerManager.computeExecutablePath({
browser: puppeteerManager.Browser.CHROME,
cacheDir,
buildId: expectBuildId
})
let installedBrowser: InstalledBrowser
if (!fs.existsSync(executablePath)) {
// maybe the exist installation is broken.
await puppeteerManager.uninstall({
cacheDir,
buildId: expectBuildId,
browser: puppeteerManager.Browser.CHROME,
})
installedBrowser = await puppeteerManager.install({
browser: puppeteerManager.Browser.CHROME,
cacheDir,
buildId: expectBuildId,
downloadProgressCallback: options.downloadProgressCallback
})
} else {
installedBrowser = (
await puppeteerManager.getInstalledBrowsers({
cacheDir
})
).find((it) => it.buildId === expectBuildId)!
}
return installedBrowser
}
export default checkAndDownloadPuppeteer
@@ -0,0 +1,11 @@
import checkAndDownloadPuppeteer from './check-and-download-puppeteer'
export const checkAndDownloadDependenciesForInit = async () => {
const browser = await checkAndDownloadPuppeteer({
downloadProgressCallback(downloadedBytes: number, totalBytes: number) {
console.log(`${downloadedBytes} / ${totalBytes}`)
}
})
console.log(browser)
}
+5
View File
@@ -1,5 +1,6 @@
import { runAutoChat } from './flow/GEEK_AUTO_START_CHAT_WITH_BOSS'
import { openSettingWindow } from './flow/OPEN_SETTING_WINDOW'
import { checkAndDownloadDependenciesForInit } from './flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/index';
const runMode = process.env.MAIN_BOSSGEEKGO_UI_RUN_MODE
switch (runMode) {
@@ -7,6 +8,10 @@ switch (runMode) {
runAutoChat()
break
}
case 'checkAndDownloadDependenciesForInit': {
checkAndDownloadDependenciesForInit()
break
}
default: {
openSettingWindow()
break
@@ -96,6 +96,7 @@ export function createMainWindow(): void {
env: {
...process.env,
MAIN_BOSSGEEKGO_UI_RUN_MODE: 'geekAutoStartWithBoss'
// PUPPETEER_EXECUTABLE_PATH: '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge'
}
})
ipcMain.emit('geek-auto-start-chat-with-boss-started')