@@ -10,14 +10,95 @@ import Network
1010import em_proxy
1111import UniformTypeIdentifiers
1212
13+ let fileManager = FileManager . default
14+
15+
16+
17+ func httpGet( _ urlString: String , result: @escaping ( String ? ) -> Void ) {
18+ if let url = URL ( string: urlString) {
19+
20+
21+ let task = URLSession . shared. dataTask ( with: url) { data, response, error in
22+
23+
24+ if let error = error {
25+ print ( " Error: \( error. localizedDescription) " )
26+ result ( nil )
27+ return
28+ }
29+
30+
31+ if let data = data, let httpResponse = response as? HTTPURLResponse {
32+
33+
34+ if httpResponse. statusCode == 200 {
35+ print ( " Response: \( httpResponse. statusCode) " )
36+
37+
38+ if let DataString = String ( data: data, encoding: . utf8) {
39+ result ( DataString)
40+ }
41+ } else {
42+ print ( " Received non-200 status code: \( httpResponse. statusCode) " )
43+ }
44+ }
45+ }
46+
47+
48+ task. resume ( )
49+ }
50+ }
51+
52+ func UpdateRetrieval( ) -> Bool {
53+ let fileURL = URL . documentsDirectory. appendingPathComponent ( " version.txt " )
54+ if !fileManager. fileExists ( atPath: fileURL. path) {
55+
56+ let urlString = " https://raw.githubusercontent.com/0-Blu/StikJIT/refs/heads/main/version.txt "
57+ var FileContent : String = " " ;
58+
59+ httpGet ( urlString) { result in
60+ if let fc = result {
61+ FileContent = fc
62+ }
63+
64+ }
65+ if ( FileContent == " " ) {
66+ do {
67+ try FileContent . write ( to: fileURL, atomically: true , encoding: . utf8)
68+
69+ print ( " Wrote to file successfully " )
70+ } catch {
71+ print ( " Error writing to file: \( error) " )
72+ }
73+ } else {
74+ print ( " Failed to get version.txt, will try again later. " )
75+ }
76+ }
77+ let ver = try ! String ( contentsOfFile: fileURL. path)
78+ let urlString = " https://raw.githubusercontent.com/0-Blu/StikJIT/refs/heads/main/version.txt "
79+ var res = false
80+ httpGet ( urlString) { result in
81+ if let fc = result {
82+ if ( ver != fc) {
83+ res = true
84+ }
85+ } // if nil then request failed so we won't throw an error
86+
87+ }
88+ return res
89+
90+
91+ }
92+
1393@main
1494struct HeartbeatApp : App {
1595 @State private var isLoading = true
1696 @State private var isPairing = false
1797 @State private var heartBeat = false
1898 @State private var error : Int32 ? = nil
19- @State private var show_error = false
20- @State private var error_string = " "
99+ @State private var show_alert = false
100+ @State private var alert_string = " "
101+ @State private var alert_title = " "
21102 @StateObject private var mount = MountingProgress . shared
22103
23104 let urls : [ String ] = [
@@ -35,11 +116,36 @@ struct HeartbeatApp: App {
35116 ]
36117
37118 init ( ) {
119+ newVerCheck ( )
38120 let fixMethod = class_getInstanceMethod ( UIDocumentPickerViewController . self, #selector( UIDocumentPickerViewController . fix_init ( forOpeningContentTypes: asCopy: ) ) ) !
39121 let origMethod = class_getInstanceMethod ( UIDocumentPickerViewController . self, #selector( UIDocumentPickerViewController . init ( forOpeningContentTypes: asCopy: ) ) ) !
40122 method_exchangeImplementations ( origMethod, fixMethod)
41123 }
124+ func newVerCheck( ) {
125+ let currentDate = Calendar . current. startOfDay ( for: Date ( ) )
42126
127+
128+ let VUA = UserDefaults . standard. object ( forKey: " VersionUpdateAlert " ) as? Date ?? Date . distantPast
129+
130+
131+ if currentDate > Calendar . current. startOfDay ( for: VUA) {
132+
133+ if ( UpdateRetrieval ( ) ) {
134+ alert_title = " Update Avaliable! "
135+ let urlString = " https://raw.githubusercontent.com/0-Blu/StikJIT/refs/heads/main/version.txt "
136+ httpGet ( urlString) { result in
137+ if result == nil { return }
138+ alert_string = " Update to: version \( result!) ! "
139+ show_alert = true
140+ }
141+
142+
143+ }
144+
145+
146+ UserDefaults . standard. set ( currentDate, forKey: " VersionUpdateAlert " )
147+ }
148+ }
43149 var body : some Scene {
44150 WindowGroup {
45151 if isLoading {
@@ -122,8 +228,9 @@ struct HeartbeatApp: App {
122228 if !fileManager. fileExists ( atPath: destinationURL. path) {
123229 downloadFile ( from: urlString, to: destinationURL) { result in
124230 if ( result != " " ) {
125- error_string = " [Download DDI Error]: " + result
126- show_error = true
231+ alert_title = " An Error has Occurred "
232+ alert_string = " [Download DDI Error]: " + result
233+ show_alert = true
127234 }
128235
129236 }
@@ -132,10 +239,10 @@ struct HeartbeatApp: App {
132239 }
133240
134241 }
135- . alert ( " An Error Occurred " , isPresented: $show_error ) {
242+ . alert ( alert_title , isPresented: $show_alert ) {
136243 Button ( " OK " , role: . cancel) { }
137244 } message: {
138- Text ( error_string )
245+ Text ( alert_title )
139246 }
140247 }
141248 }
0 commit comments