feat(ui): 优先尝试使用用户选择的镜像源进行后端更新,最后使用github

This commit is contained in:
Alirea
2025-09-28 13:54:27 +08:00
parent f423f3b577
commit dfc403733f

View File

@@ -306,47 +306,66 @@ async function tryUpdateBackendWithRetry(config: any): Promise<boolean> {
const customMirrors = config.customGitMirrors || [] const customMirrors = config.customGitMirrors || []
const combinedMirrors = [...allGitMirrors, ...customMirrors] const combinedMirrors = [...allGitMirrors, ...customMirrors]
// 优先使用用户选择的镜像源 // 分离镜像源和官方源GitHub
const mirrorSources = combinedMirrors.filter(m => m.type === 'mirror')
const officialSources = combinedMirrors.filter(m => m.type === 'official')
// 构建尝试顺序先尝试镜像源最后尝试GitHub
let mirrorsToTry: any[] = []
// 首先添加用户选择的镜像源(如果是镜像源类型)
const selectedMirror = combinedMirrors.find(m => m.key === config.selectedGitMirror) const selectedMirror = combinedMirrors.find(m => m.key === config.selectedGitMirror)
let mirrorsToTry = selectedMirror ? [selectedMirror] : [] if (selectedMirror && selectedMirror.type === 'mirror') {
mirrorsToTry.push(selectedMirror)
}
// 添加其他镜像源作为备选 // 然后添加其他镜像源(排除已选择的)
const otherMirrors = combinedMirrors.filter(m => m.key !== config.selectedGitMirror) const otherMirrorSources = mirrorSources.filter(m => m.key !== config.selectedGitMirror)
mirrorsToTry = [...mirrorsToTry, ...otherMirrors] mirrorsToTry = [...mirrorsToTry, ...otherMirrorSources]
console.log('准备尝试的Git镜像源:', mirrorsToTry.map(m => m.name)) // 如果用户选择的是官方源,放在镜像源之后
if (selectedMirror && selectedMirror.type === 'official') {
mirrorsToTry.push(selectedMirror)
}
// 最后添加其他官方源(排除已选择的)
const otherOfficialSources = officialSources.filter(m => m.key !== config.selectedGitMirror)
mirrorsToTry = [...mirrorsToTry, ...otherOfficialSources]
console.log('准备尝试的Git源镜像源优先:', mirrorsToTry.map(m => `${m.name} (${m.type})`))
for (let i = 0; i < mirrorsToTry.length; i++) { for (let i = 0; i < mirrorsToTry.length; i++) {
if (aborted.value) return false if (aborted.value) return false
const mirror = mirrorsToTry[i] const mirror = mirrorsToTry[i]
progressText.value = `正在使用 ${mirror.name} 更新代码... (${i + 1}/${mirrorsToTry.length})` const sourceType = mirror.type === 'mirror' ? '镜像源' : '官方源'
progressText.value = `正在使用 ${mirror.name} ${sourceType}更新代码... (${i + 1}/${mirrorsToTry.length})`
try { try {
console.log(`尝试使用镜像源: ${mirror.name} (${mirror.url})`) console.log(`尝试使用${sourceType}: ${mirror.name} (${mirror.url})`)
const result = await window.electronAPI.updateBackend(mirror.url) const result = await window.electronAPI.updateBackend(mirror.url)
if (result.success) { if (result.success) {
console.log(`使用镜像源 ${mirror.name} 更新成功`) console.log(`使用${sourceType} ${mirror.name} 更新成功`)
message.success(`使用 ${mirror.name} 更新代码成功`) message.success(`使用 ${mirror.name} ${sourceType}更新代码成功`)
return true return true
} else { } else {
console.warn(`镜像源 ${mirror.name} 更新失败:`, result.error) console.warn(`${sourceType} ${mirror.name} 更新失败:`, result.error)
if (i < mirrorsToTry.length - 1) { if (i < mirrorsToTry.length - 1) {
progressText.value = `${mirror.name} 失败,尝试下一个镜像源...` progressText.value = `${mirror.name} ${sourceType}失败,尝试下一个源...`
await new Promise(resolve => setTimeout(resolve, 1000)) // 等待1秒 await new Promise(resolve => setTimeout(resolve, 1000)) // 等待1秒
} }
} }
} catch (error) { } catch (error) {
console.error(`镜像源 ${mirror.name} 更新异常:`, error) console.error(`${sourceType} ${mirror.name} 更新异常:`, error)
if (i < mirrorsToTry.length - 1) { if (i < mirrorsToTry.length - 1) {
progressText.value = `${mirror.name} 异常,尝试下一个镜像源...` progressText.value = `${mirror.name} ${sourceType}异常,尝试下一个源...`
await new Promise(resolve => setTimeout(resolve, 1000)) // 等待1秒 await new Promise(resolve => setTimeout(resolve, 1000)) // 等待1秒
} }
} }
} }
console.error('所有Git镜像源都无法更新代码') console.error('所有Git源(镜像源和官方源)都无法更新代码')
return false return false
} }