Version 2.3.2
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user