@@ -30,6 +30,26 @@ class SoftwareUpdater: NSObject, ObservableObject, SPUUpdaterDelegate {
30
30
}
31
31
}
32
32
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
+
33
53
override init ( ) {
34
54
super. init ( )
35
55
updater = SPUStandardUpdaterController (
@@ -38,7 +58,9 @@ class SoftwareUpdater: NSObject, ObservableObject, SPUUpdaterDelegate {
38
58
userDriverDelegate: nil
39
59
) . updater
40
60
41
- updater? . setFeedURL ( . appcast)
61
+ feedURLTask = Task {
62
+ await setFeedURL ( )
63
+ }
42
64
43
65
automaticallyChecksForUpdatesObservation = updater? . observe (
44
66
\. automaticallyChecksForUpdates,
@@ -60,6 +82,10 @@ class SoftwareUpdater: NSObject, ObservableObject, SPUUpdaterDelegate {
60
82
includePrereleaseVersions = UserDefaults . standard. bool ( forKey: " includePrereleaseVersions " )
61
83
}
62
84
85
+ deinit {
86
+ feedURLTask? . cancel ( )
87
+ }
88
+
63
89
func allowedChannels( for updater: SPUUpdater ) -> Set < String > {
64
90
if includePrereleaseVersions {
65
91
return [ " dev " ]
@@ -70,10 +96,20 @@ class SoftwareUpdater: NSObject, ObservableObject, SPUUpdaterDelegate {
70
96
func checkForUpdates( ) {
71
97
updater? . checkForUpdates ( )
72
98
}
99
+
100
+ private struct GHAPIResult : Codable {
101
+ enum CodingKeys : String , CodingKey {
102
+ case tagName = " tag_name "
103
+ }
104
+
105
+ var tagName : String
106
+ }
73
107
}
74
108
75
109
extension URL {
76
- static let appcast = URL (
110
+ static var appcast = URL (
77
111
string: " https://github.com/CodeEditApp/CodeEdit/releases/download/latest/appcast.xml "
78
112
) !
79
113
}
114
+
115
+ // https://github.com/CodeEditApp/CodeEdit/releases/download/0.0.1-alpha.10/appcast.xml
0 commit comments