From 831dbadc74b774c296e42201c4fe0d1a5e50eaad Mon Sep 17 00:00:00 2001 From: bossgeekgo Date: Tue, 20 Feb 2024 01:35:17 +0800 Subject: [PATCH] make DependenciesSetupProgressIndicatorDialog support execute more than 1 tasks (pervious support download puppeteer only) --- .../check-and-download-puppeteer.ts | 25 +++--- packages/ui/src/main/window/mainWindow.ts | 5 +- .../index.vue | 88 +++++++++++++------ .../operations.ts | 5 +- .../GeekAutoStartChatWithBoss.vue | 4 +- .../renderer/src/page/Configuration/index.vue | 4 +- 6 files changed, 89 insertions(+), 42 deletions(-) diff --git a/packages/ui/src/main/flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/check-and-download-puppeteer.ts b/packages/ui/src/main/flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/check-and-download-puppeteer.ts index 89dfe64..9821ddc 100644 --- a/packages/ui/src/main/flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/check-and-download-puppeteer.ts +++ b/packages/ui/src/main/flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/check-and-download-puppeteer.ts @@ -12,10 +12,8 @@ const cacheDir = path.join( ) const getPuppeteerManagerModule = async () => { - const runtimeDependencies = await import( - path.join(os.homedir(), '.bossgeekgo', 'external-node-runtime-dependencies/index.mjs') - ) - return runtimeDependencies.puppeteerManager + const puppeteerManager = await import('@puppeteer/browsers') + return puppeteerManager } export const getExpectPuppeteerExecutablePath = async () => { @@ -29,14 +27,21 @@ export const getExpectPuppeteerExecutablePath = async () => { } export const checkPuppeteerExecutable = async () => { - const executablePath = await getExpectPuppeteerExecutablePath() - return fs.existsSync(executablePath) + try { + const executablePath = await getExpectPuppeteerExecutablePath() + return fs.existsSync(executablePath) + } catch { + // should limit [ERR_MODULE_NOT_FOUND] + return false + } } -const checkAndDownloadPuppeteer = async (options: { - downloadProgressCallback?: (downloadedBytes: number, totalBytes: number) => void, - confirmContinuePromise?: Promise -} = {}) => { +const checkAndDownloadPuppeteer = async ( + options: { + downloadProgressCallback?: (downloadedBytes: number, totalBytes: number) => void + confirmContinuePromise?: Promise + } = {} +) => { const puppeteerManager = await getPuppeteerManagerModule() let installedBrowser: InstalledBrowser if (!(await checkPuppeteerExecutable())) { diff --git a/packages/ui/src/main/window/mainWindow.ts b/packages/ui/src/main/window/mainWindow.ts index 214f64d..1ae17f3 100644 --- a/packages/ui/src/main/window/mainWindow.ts +++ b/packages/ui/src/main/window/mainWindow.ts @@ -130,7 +130,10 @@ export function createMainWindow(): void { }) ipcMain.handle('check-dependencies', async () => { - return await checkPuppeteerExecutable() + const [puppeteerExecutableAvailable] = await Promise.all([checkPuppeteerExecutable()]) + return { + puppeteerExecutableAvailable + } }) let subProcessOfCheckAndDownloadDependencies: ChildProcess | null = null diff --git a/packages/ui/src/renderer/src/features/DependenciesSetupProgressIndicatorDialog/index.vue b/packages/ui/src/renderer/src/features/DependenciesSetupProgressIndicatorDialog/index.vue index 9ed3eae..e54a9bf 100644 --- a/packages/ui/src/renderer/src/features/DependenciesSetupProgressIndicatorDialog/index.vue +++ b/packages/ui/src/renderer/src/features/DependenciesSetupProgressIndicatorDialog/index.vue @@ -1,46 +1,84 @@ diff --git a/packages/ui/src/renderer/src/features/DependenciesSetupProgressIndicatorDialog/operations.ts b/packages/ui/src/renderer/src/features/DependenciesSetupProgressIndicatorDialog/operations.ts index 3463948..23e49c1 100644 --- a/packages/ui/src/renderer/src/features/DependenciesSetupProgressIndicatorDialog/operations.ts +++ b/packages/ui/src/renderer/src/features/DependenciesSetupProgressIndicatorDialog/operations.ts @@ -2,7 +2,7 @@ import { createApp } from 'vue' import ElementPlus from 'element-plus' import DependenciesSetupProgressIndicatorDialog from './index.vue' -export const mountGlobalDialog = () => { +export const mountGlobalDialog = (dependenciesStatus: Record) => { const containerElId = `elForDependenciesSetupProgressIndicatorDialog` if (document.getElementById(containerElId)) { @@ -27,7 +27,8 @@ export const mountGlobalDialog = () => { onClosed() { dispose() }, - dispose + dispose, + dependenciesStatus }).use(ElementPlus) app.mount(containerEl) diff --git a/packages/ui/src/renderer/src/page/Configuration/GeekAutoStartChatWithBoss.vue b/packages/ui/src/renderer/src/page/Configuration/GeekAutoStartChatWithBoss.vue index 49eeca7..53de824 100644 --- a/packages/ui/src/renderer/src/page/Configuration/GeekAutoStartChatWithBoss.vue +++ b/packages/ui/src/renderer/src/page/Configuration/GeekAutoStartChatWithBoss.vue @@ -95,8 +95,8 @@ const handleSubmit = async () => { message: `Some dependencies might be corrupt. I'm trying to check and fix them.` }) const checkDependenciesResult = await electron.ipcRenderer.invoke('check-dependencies') - if (!checkDependenciesResult) { - mountDependenciesSetupProgressIndicatorDialog() + if (Object.values(checkDependenciesResult).includes(false)) { + mountDependenciesSetupProgressIndicatorDialog(checkDependenciesResult) // TODO: should continue interrupted task } } diff --git a/packages/ui/src/renderer/src/page/Configuration/index.vue b/packages/ui/src/renderer/src/page/Configuration/index.vue index 877235a..57b767a 100644 --- a/packages/ui/src/renderer/src/page/Configuration/index.vue +++ b/packages/ui/src/renderer/src/page/Configuration/index.vue @@ -15,8 +15,8 @@ onUnmounted(() => { }) ;(async () => { const checkDependenciesResult = await electron.ipcRenderer.invoke('check-dependencies') - if (!checkDependenciesResult) { - mountDependenciesSetupProgressIndicatorDialog() + if (Object.values(checkDependenciesResult).includes(false)) { + mountDependenciesSetupProgressIndicatorDialog(checkDependenciesResult) } })()