Version 2.3.2

This commit is contained in:
2026-02-20 14:49:56 +01:00
parent 5f9631077b
commit 41185cc08b
7 changed files with 1842 additions and 1223 deletions

View File

@@ -36,37 +36,44 @@ final class UpdateCheckService {
var updateAvailable: Bool = false
var latestVersion: String? = nil
private let apiURL = "https://gitlab.pm/api/v4/projects/rune%2Foai-swift/releases"
private let apiURL = "https://gitlab.pm/api/v1/repos/rune/oai-swift/releases/latest"
private let releasesURL = URL(string: "https://gitlab.pm/rune/oai-swift/releases")!
private init() {}
/// Kick off a background update check. Silently does nothing on failure.
func checkForUpdates() {
Task {
await performCheck()
Task.detached(priority: .background) {
await self.performCheck()
}
}
@MainActor
private func performCheck() async {
guard let url = URL(string: apiURL) else { return }
var request = URLRequest(url: url)
request.timeoutInterval = 10
guard let (data, _) = try? await URLSession.shared.data(for: request) else { return }
guard let releases = try? JSONSerialization.jsonObject(with: data) as? [[String: Any]],
let latest = releases.first,
let tagName = latest["tag_name"] as? String else { return }
guard let (data, _) = try? await URLSession.shared.data(for: request) else {
Log.ui.warning("UpdateCheck: network request failed")
return
}
guard let release = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
let tagName = release["tag_name"] as? String else {
Log.ui.warning("UpdateCheck: unexpected API response — \(String(data: data, encoding: .utf8) ?? "<binary>")")
return
}
// Strip leading "v" from tag (e.g. "v2.3.1" "2.3.1")
let latestVer = tagName.hasPrefix("v") ? String(tagName.dropFirst()) : tagName
let currentVer = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0.0"
if isNewer(latestVer, than: currentVer) {
self.latestVersion = latestVer
self.updateAvailable = true
await MainActor.run {
self.latestVersion = latestVer
self.updateAvailable = true
}
}
}