Merge branch 'feature/ui' into feature/multi-process

This commit is contained in:
geekgeekrun
2026-01-14 10:26:01 +08:00
17 changed files with 537 additions and 313 deletions
+4 -4
View File
@@ -1,7 +1,7 @@
{
"version": "0.12.0",
"buildVersion": 26,
"buildTime": 1766591012661,
"buildHash": "0928b402fb5019b587ddec62825c9c2f4a5a11fb",
"version": "0.13.3",
"buildVersion": 29,
"buildTime": 1768226645980,
"buildHash": "ca37e258c69f54492488f285a1ec1f385baee478",
"name": "geekgeekrun-ui"
}
@@ -11,6 +11,7 @@ export enum DOWNLOAD_ERROR_EXIT_CODE {
export const checkAndDownloadDependenciesForInit = async () => {
process.on('disconnect', () => app.exit())
process.on('uncaughtException', () => app.exit(DOWNLOAD_ERROR_EXIT_CODE.DOWNLOAD_ERROR))
app.dock?.hide()
let pipe: null | fs.WriteStream = null
try {
@@ -8,6 +8,8 @@ export interface BrowserInfo {
executablePath: string
}
const CONFIG_VSERION = 2
const runtimeFolderPath = path.join(os.homedir(), '.geekgeekrun')
export const lastUsedBrowserRecordFilePath = path.join(
runtimeFolderPath,
@@ -28,8 +30,13 @@ export const getLastUsedAndAvailableBrowser = async (): Promise<BrowserInfo | nu
}
try {
const fileContent = (await fsPromise.readFile(lastUsedBrowserRecordFilePath)).toString()
const [path, browser] = fileContent.split('\n').map((it) => it.trim())
if (!path || !fs.existsSync(path)) {
const [path, browser, configVersion] = fileContent.split('\n').map((it) => it.trim())
if (
!path ||
!fs.existsSync(path) ||
!Number(configVersion) ||
Number(configVersion) < CONFIG_VSERION
) {
await removeLastUsedAndAvailableBrowserPath()
return null
}
@@ -57,7 +64,7 @@ export const saveLastUsedAndAvailableBrowserInfo = async (browserInfo: BrowserIn
}
await fsPromise.writeFile(
lastUsedBrowserRecordFilePath,
[browserInfo.executablePath, browserInfo.browser].join('\n')
[browserInfo.executablePath, browserInfo.browser, CONFIG_VSERION].join('\n')
)
} catch {
console.warn('lastUsedBrowserRecordFile write error')
@@ -16,7 +16,7 @@ const getPuppeteerManagerModule = async () => {
return puppeteerManager
}
const EXPECT_CHROMIUM_BUILD_ID = '113.0.5672.63'
const EXPECT_CHROMIUM_BUILD_ID = '139.0.7258.154'
const cacheDir = path.join(os.homedir(), '.geekgeekrun', 'cache')
const getExpectCachedPuppeteerExecutable = async (): Promise<BrowserInfo> => {
@@ -130,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')
@@ -371,7 +371,8 @@ export async function launchBossSite() {
const { puppeteer } = await initPuppeteer()
const browser = await puppeteer.launch({
headless: false,
args: [`--load-extension=${editThisCookieExtensionPath}`]
pipe: true,
enableExtensions: [editThisCookieExtensionPath]
})
let [page] = await browser.pages()
for (let i = 0; i < bossCookies.length; i++) {
@@ -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>