restore find logic of find pre installed chrome

This commit is contained in:
geekgeekrun
2026-01-12 21:19:58 +08:00
parent dbc127be06
commit 252869576b
7 changed files with 144 additions and 166 deletions
@@ -9,7 +9,6 @@ import {
removeLastUsedAndAvailableBrowserPath
} from '../browser-history'
import gtag from '../../../../utils/gtag'
import { sleep } from '@geekgeekrun/utils/sleep.mjs';
const getPuppeteerManagerModule = async () => {
const puppeteerManager = await import('@puppeteer/browsers')
@@ -65,32 +64,19 @@ export const checkAndDownloadPuppeteerExecutable = async (
} catch {
throw new Error('USER_CANCEL_DOWNLOAD_PUPPETEER')
}
let restRetriedTime = 10
while (restRetriedTime > 0) {
try {
// maybe the exist installation is broken.
await puppeteerManager.uninstall({
cacheDir,
buildId: EXPECT_CHROMIUM_BUILD_ID,
browser: puppeteerManager.Browser.CHROME
})
installedBrowser = await puppeteerManager.install({
browser: puppeteerManager.Browser.CHROME,
cacheDir,
buildId: EXPECT_CHROMIUM_BUILD_ID,
downloadProgressCallback: options.downloadProgressCallback,
baseUrl: `https://registry.npmmirror.com/-/binary/chrome-for-testing`
})
break
}
catch (err) {
restRetriedTime--
await sleep(5000)
}
}
if (!installedBrowser) {
throw new Error(`浏览器下载失败`)
}
// maybe the exist installation is broken.
await puppeteerManager.uninstall({
cacheDir,
buildId: EXPECT_CHROMIUM_BUILD_ID,
browser: puppeteerManager.Browser.CHROME
})
installedBrowser = await puppeteerManager.install({
browser: puppeteerManager.Browser.CHROME,
cacheDir,
buildId: EXPECT_CHROMIUM_BUILD_ID,
downloadProgressCallback: options.downloadProgressCallback,
baseUrl: `https://registry.npmmirror.com/-/binary/chrome-for-testing`
})
} else {
gtag('use_installed_browser')
installedBrowser = (
@@ -116,16 +102,16 @@ export const getAnyAvailablePuppeteerExecutable = async (): Promise<BrowserInfo
if (lastUsedOne) {
return lastUsedOne
}
// // find existed browser - the one maybe actively installed by user or ship with os like Edge on windows
// try {
// const existedOne = await findAndLocateUserInstalledChromiumExecutableSync()
// await saveLastUsedAndAvailableBrowserInfo(existedOne)
// // save its path
// return existedOne
// } catch (err) {
// console.error(err)
// console.log('no existed browser path found')
// }
// find existed browser - the one maybe actively installed by user or ship with os like Edge on windows
try {
const existedOne = await findAndLocateUserInstalledChromiumExecutableSync()
await saveLastUsedAndAvailableBrowserInfo(existedOne)
// save its path
return existedOne
} catch (err) {
console.error(err)
console.log('no existed browser path found')
}
// find existed browser - the fallback one
if (await checkCachedPuppeteerExecutable()) {
const cachedOne = await getExpectCachedPuppeteerExecutable()
@@ -144,7 +130,7 @@ export async function findAndLocateUserInstalledChromiumExecutableSync(): Promis
const findChrome: typeof import('find-chrome-bin').findChrome = (await import('find-chrome-bin'))
.findChrome
const targetBrowser = await findChrome({
min: exceptChromiumMainVersion
min: exceptChromiumMainVersion + 1
})
if (!targetBrowser?.executablePath) {
throw new Error('NO_EXPECT_CHROMIUM_FOUND')
@@ -11,9 +11,11 @@
</template>
<script lang="ts" setup>
import { ref, onUnmounted, PropType } from 'vue'
import { ref, onUnmounted, PropType, h } from 'vue'
import { ElMessageBox } from 'element-plus'
import { gtagRenderer } from '@renderer/utils/gtag'
import { sleep } from '@geekgeekrun/utils/sleep.mjs'
import FailMessage from './FailMessage.vue'
const props = defineProps({
dependenciesStatus: {
@@ -36,12 +38,24 @@ const downloadProcessExitCode = ref(0)
const processDownloadBrowser = async () => {
downloadProcessExitCode.value = 0
browserDownloadPercentage.value = 0
try {
await electron.ipcRenderer.invoke('setup-dependencies')
browserDownloadPercentage.value = 100
} catch (err) {
downloadProcessExitCode.value = 1
throw err
let restRetriedTime = 2
while (restRetriedTime > 0) {
try {
try {
await electron.ipcRenderer.invoke('setup-dependencies')
browserDownloadPercentage.value = 100
} catch (err) {
downloadProcessExitCode.value = 1
throw err
}
break
} catch (err) {
restRetriedTime--
if (restRetriedTime === 0) {
throw err
}
await sleep(5000)
}
}
}
@@ -68,12 +82,13 @@ const processTasks = async () => {
await p
} catch {
gtagRenderer('encounter_error_when_download_deps')
await ElMessageBox.confirm('需要重试吗?', '核心组件下载失败', {
await ElMessageBox.confirm(h(FailMessage), {
closeOnClickModal: false,
closeOnPressEscape: false,
showClose: false,
type: 'error',
cancelButtonText: '退出程序'
cancelButtonText: '退出程序',
confirmButtonText: '重试'
})
.then(() => {
gtagRenderer('start_retry_download_deps')
@@ -0,0 +1,34 @@
<template>
<div>
<p>核心组件下载失败请重试</p>
<br />
<br />
<p>
<b text-orange>提示</b>由于网络颠簸如果多次重试仍然失败&nbsp;<el-button
size="small"
type="primary"
font-size-14px
@click="handleOpenChromeDownloadPage"
>点击此处</el-button
>&nbsp;下载最新版本 Google Chrome
浏览器安装完毕后重新打开本程序程序会自动检测该浏览器并使用它
</p>
</div>
</template>
<script lang="ts" setup>
import { gtagRenderer } from '@renderer/utils/gtag'
import debounce from 'lodash-es/debounce'
const { ipcRenderer } = electron
const handleOpenChromeDownloadPage = debounce(
async () => {
gtagRenderer('open_chrome_download_page_clicked')
ipcRenderer.send('open-external-link', 'https://www.google.cn/chrome/')
},
1000,
{ leading: true, trailing: false }
)
</script>
<style scoped></style>