mirror of
https://github.com/hicccc77/WeFlow.git
synced 2026-04-03 23:15:59 +00:00
Merge branch 'dev' into dev
This commit is contained in:
@@ -38,18 +38,28 @@ autoUpdater.autoInstallOnAppQuit = true
|
||||
autoUpdater.disableDifferentialDownload = true // 禁用差分更新,强制全量下载
|
||||
// 更新通道策略:
|
||||
// - 稳定版(如 4.3.0)默认走 latest
|
||||
// - 预览版(如 4.3.0-preview.26.1)默认走 preview
|
||||
// - 开发版(如 4.3.0-dev.26.3.4)默认走 dev
|
||||
// - 预览版(如 0.26.2)默认走 preview(0.年.当年发布序号)
|
||||
// - 开发版(如 26.4.5)默认走 dev(年.月.日)
|
||||
// - 用户可在设置页切换稳定/预览/开发,切换后即时生效
|
||||
// 同时区分 Windows x64 / arm64,避免更新清单互相覆盖。
|
||||
const appVersion = app.getVersion()
|
||||
const inferUpdateTrackFromVersion = (version: string): 'stable' | 'preview' | 'dev' => {
|
||||
const normalized = String(version || '').trim().replace(/^v/i, '')
|
||||
if (/^0\.\d{2}\.\d+$/i.test(normalized)) return 'preview'
|
||||
if (/^\d{2}\.\d{1,2}\.\d{1,2}$/i.test(normalized)) return 'dev'
|
||||
// 兼容旧版命名(如 4.3.0-preview.26.1 / 4.3.0-dev.26.3.4)
|
||||
if (/-preview\.\d+\.\d+$/i.test(normalized)) return 'preview'
|
||||
if (/-dev\.\d+\.\d+\.\d+$/i.test(normalized)) return 'dev'
|
||||
// 兼容 alpha/beta/rc 预发布
|
||||
if (/(alpha|beta|rc)/i.test(normalized)) return 'dev'
|
||||
return 'stable'
|
||||
}
|
||||
|
||||
const defaultUpdateTrack: 'stable' | 'preview' | 'dev' = (() => {
|
||||
if (/-preview\.\d+\.\d+$/i.test(appVersion)) return 'preview'
|
||||
if (/-dev\.\d+\.\d+\.\d+$/i.test(appVersion)) return 'dev'
|
||||
if (/(alpha|beta|rc)/i.test(appVersion)) return 'dev'
|
||||
const inferred = inferUpdateTrackFromVersion(appVersion)
|
||||
if (inferred === 'preview' || inferred === 'dev') return inferred
|
||||
return 'stable'
|
||||
})()
|
||||
const isPrereleaseBuild = defaultUpdateTrack !== 'stable'
|
||||
let configService: ConfigService | null = null
|
||||
|
||||
const normalizeUpdateTrack = (raw: unknown): 'stable' | 'preview' | 'dev' | null => {
|
||||
@@ -116,16 +126,27 @@ const isRemoteVersionNewer = (latestVersion: string, currentVersion: string): bo
|
||||
}
|
||||
}
|
||||
|
||||
const shouldOfferUpdateForTrack = (latestVersion: string, currentVersion: string): boolean => {
|
||||
if (isRemoteVersionNewer(latestVersion, currentVersion)) return true
|
||||
const effectiveTrack = getEffectiveUpdateTrack()
|
||||
const currentTrack = inferUpdateTrackFromVersion(currentVersion)
|
||||
// 切换通道后,目标通道最新版本与当前版本不同即提示更新(即使是降级)
|
||||
if (effectiveTrack !== currentTrack && latestVersion !== currentVersion) return true
|
||||
return false
|
||||
}
|
||||
|
||||
const applyAutoUpdateChannel = (reason: 'startup' | 'settings' = 'startup') => {
|
||||
const track = getEffectiveUpdateTrack()
|
||||
const currentTrack = inferUpdateTrackFromVersion(appVersion)
|
||||
const baseUpdateChannel = track === 'stable' ? 'latest' : track
|
||||
autoUpdater.allowPrerelease = track !== 'stable'
|
||||
autoUpdater.allowDowngrade = isPrereleaseBuild && track === 'stable'
|
||||
// 只要用户当前选择的目标通道与当前安装版本所属通道不同,就允许跨通道更新(含降级)
|
||||
autoUpdater.allowDowngrade = track !== currentTrack
|
||||
autoUpdater.channel =
|
||||
process.platform === 'win32' && process.arch === 'arm64'
|
||||
? `${baseUpdateChannel}-arm64`
|
||||
: baseUpdateChannel
|
||||
console.log(`[Update](${reason}) 当前版本 ${appVersion},渠道偏好: ${track},更新通道: ${autoUpdater.channel}`)
|
||||
console.log(`[Update](${reason}) 当前版本 ${appVersion},当前轨道: ${currentTrack},渠道偏好: ${track},更新通道: ${autoUpdater.channel},allowDowngrade=${autoUpdater.allowDowngrade}`)
|
||||
}
|
||||
|
||||
applyAutoUpdateChannel('startup')
|
||||
@@ -1338,7 +1359,7 @@ function registerIpcHandlers() {
|
||||
if (result && result.updateInfo) {
|
||||
const currentVersion = app.getVersion()
|
||||
const latestVersion = result.updateInfo.version
|
||||
if (isRemoteVersionNewer(latestVersion, currentVersion)) {
|
||||
if (shouldOfferUpdateForTrack(latestVersion, currentVersion)) {
|
||||
return {
|
||||
hasUpdate: true,
|
||||
version: latestVersion,
|
||||
@@ -2796,7 +2817,7 @@ function checkForUpdatesOnStartup() {
|
||||
const latestVersion = result.updateInfo.version
|
||||
|
||||
// 检查是否有新版本
|
||||
if (isRemoteVersionNewer(latestVersion, currentVersion) && mainWindow) {
|
||||
if (shouldOfferUpdateForTrack(latestVersion, currentVersion) && mainWindow) {
|
||||
// 检查该版本是否被用户忽略
|
||||
const ignoredVersion = configService?.get('ignoredUpdateVersion')
|
||||
if (ignoredVersion === latestVersion) {
|
||||
|
||||
Reference in New Issue
Block a user