punchnet-macos/punchnet/Views/Update/AppUpdateManager.swift
2026-03-23 14:58:32 +08:00

67 lines
2.0 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// AppUpdateManager.swift
// punchnet
//
// Created by on 2026/3/23.
//
import SwiftUI
import Observation
@Observable
class AppUpdateManager {
static let shared = AppUpdateManager()
var updateInfo: SDLAPIClient.AppUpgradeInfo?
var isChecking = false
var showUpdateOverlay = false //
@MainActor
func checkUpdate(isManual: Bool = false) async -> Bool {
isChecking = true
defer {
isChecking = false
}
do {
let updateInfo = try await SDLAPIClient.appCheckUpdate()
//
let currentVersion = SystemConfig.version_name
let needsUpdate = VersionComparator.isVersion(currentVersion, olderThan: updateInfo.latestVersion)
if needsUpdate {
self.updateInfo = updateInfo
//
if !isManual {
self.showUpdateOverlay = true
}
return true
}
} catch {
print("Update check failed: \(error)")
}
return false
}
}
struct VersionComparator {
/// current < latest true ()
static func isVersion(_ current: String, olderThan latest: String) -> Bool {
let currentComponents = current.split(separator: ".").map { Int($0) ?? 0 }
let latestComponents = latest.split(separator: ".").map { Int($0) ?? 0 }
let maxLength = max(currentComponents.count, latestComponents.count)
for i in 0..<maxLength {
let currentPart = i < currentComponents.count ? currentComponents[i] : 0
let latestPart = i < latestComponents.count ? latestComponents[i] : 0
if currentPart < latestPart {
return true
}
if currentPart > latestPart {
return false
}
}
return false
}
}