Skip to content

Commit d0c29f3

Browse files
authored
[fix]: Update Mechanism (#939)
* get latest release URL from GH API * make function private * make task cancellable * remove print statement
1 parent 7d5e8be commit d0c29f3

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

CodeEdit/Features/AppPreferences/SoftwareUpdater.swift

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,26 @@ class SoftwareUpdater: NSObject, ObservableObject, SPUUpdaterDelegate {
3030
}
3131
}
3232

33+
private var feedURLTask: Task<(), Never>?
34+
35+
private func setFeedURL() async {
36+
let url = URL(string: "https://api.github.com/repos/CodeEditApp/CodeEdit/releases/latest")!
37+
let request = URLRequest(url: url)
38+
guard let data = try? await URLSession.shared.data(for: request),
39+
let result = try? JSONDecoder().decode(GHAPIResult.self, from: data.0) else {
40+
DispatchQueue.main.async {
41+
self.updater?.setFeedURL(nil)
42+
}
43+
return
44+
}
45+
URL.appcast = URL(
46+
string: "https://github.com/CodeEditApp/CodeEdit/releases/download/\(result.tagName)/appcast.xml"
47+
)!
48+
DispatchQueue.main.async {
49+
self.updater?.setFeedURL(.appcast)
50+
}
51+
}
52+
3353
override init() {
3454
super.init()
3555
updater = SPUStandardUpdaterController(
@@ -38,7 +58,9 @@ class SoftwareUpdater: NSObject, ObservableObject, SPUUpdaterDelegate {
3858
userDriverDelegate: nil
3959
).updater
4060

41-
updater?.setFeedURL(.appcast)
61+
feedURLTask = Task {
62+
await setFeedURL()
63+
}
4264

4365
automaticallyChecksForUpdatesObservation = updater?.observe(
4466
\.automaticallyChecksForUpdates,
@@ -60,6 +82,10 @@ class SoftwareUpdater: NSObject, ObservableObject, SPUUpdaterDelegate {
6082
includePrereleaseVersions = UserDefaults.standard.bool(forKey: "includePrereleaseVersions")
6183
}
6284

85+
deinit {
86+
feedURLTask?.cancel()
87+
}
88+
6389
func allowedChannels(for updater: SPUUpdater) -> Set<String> {
6490
if includePrereleaseVersions {
6591
return ["dev"]
@@ -70,10 +96,20 @@ class SoftwareUpdater: NSObject, ObservableObject, SPUUpdaterDelegate {
7096
func checkForUpdates() {
7197
updater?.checkForUpdates()
7298
}
99+
100+
private struct GHAPIResult: Codable {
101+
enum CodingKeys: String, CodingKey {
102+
case tagName = "tag_name"
103+
}
104+
105+
var tagName: String
106+
}
73107
}
74108

75109
extension URL {
76-
static let appcast = URL(
110+
static var appcast = URL(
77111
string: "https://github.com/CodeEditApp/CodeEdit/releases/download/latest/appcast.xml"
78112
)!
79113
}
114+
115+
// https://github.com/CodeEditApp/CodeEdit/releases/download/0.0.1-alpha.10/appcast.xml

0 commit comments

Comments
 (0)