@@ -14,6 +14,8 @@ import SwiftUI
14
14
15
15
class AccessoryController : ObservableObject {
16
16
@Published var accessories : [ Accessory ]
17
+ @AppStorage ( APISource . storageKey) var apiSource : APISource = . mailPlugin
18
+
17
19
var selfObserver : AnyCancellable ?
18
20
var listElementsObserver = [ AnyCancellable] ( )
19
21
let findMyController : FindMyController
@@ -235,39 +237,64 @@ class AccessoryController: ObservableObject {
235
237
///
236
238
/// - Parameter completion: called when the reports have been succesfully downloaded or the request has failed
237
239
func downloadLocationReports( completion: @escaping ( Result < Void , OpenHaystackMainView . AlertType > ) -> Void ) {
238
- AnisetteDataManager . shared. requestAnisetteData { [ weak self] result in
239
- guard let self = self else {
240
- completion ( . failure( . noReportsFound) )
241
- return
242
- }
243
- switch result {
244
- case . failure( _) :
245
- completion ( . failure( . activatePlugin) )
246
- case . success( let accountData) :
247
-
248
- guard let token = accountData. searchPartyToken,
249
- token. isEmpty == false
250
- else {
251
- completion ( . failure( . searchPartyToken) )
240
+ switch apiSource {
241
+ case . mailPlugin:
242
+ AnisetteDataManager . shared. requestAnisetteData { [ weak self] result in
243
+ guard let self = self else {
244
+ completion ( . failure( . noReportsFound) )
252
245
return
253
246
}
247
+ switch result {
248
+ case . failure( _) :
249
+ completion ( . failure( . activatePlugin) )
250
+ case . success( let accountData) :
251
+
252
+ guard let token = accountData. searchPartyToken,
253
+ token. isEmpty == false
254
+ else {
255
+ completion ( . failure( . searchPartyToken) )
256
+ return
257
+ }
254
258
255
- self . findMyController. fetchReports ( for: self . accessories, with: token) { [ weak self] result in
256
- switch result {
257
- case . failure( let error) :
258
- os_log ( . error, " Downloading reports failed %@ " , error. localizedDescription)
259
- completion ( . failure( . downloadingReportsFailed) )
260
- case . success( let devices) :
261
- let reports = devices. compactMap ( { $0. reports } ) . flatMap ( { $0 } )
262
- if reports. isEmpty {
263
- completion ( . failure( . noReportsFound) )
264
- } else {
265
- self ? . updateWithDecryptedReports ( devices: devices)
266
- completion ( . success( ( ) ) )
259
+ self . findMyController. fetchReports ( for: self . accessories, with: token) { [ weak self] result in
260
+ switch result {
261
+ case . failure( let error) :
262
+ os_log ( . error, " Downloading reports failed %@ " , error. localizedDescription)
263
+ completion ( . failure( . downloadingReportsFailed) )
264
+ case . success( let devices) :
265
+ let reports = devices. compactMap ( { $0. reports } ) . flatMap ( { $0 } )
266
+ if reports. isEmpty {
267
+ completion ( . failure( . noReportsFound) )
268
+ } else {
269
+ self ? . updateWithDecryptedReports ( devices: devices)
270
+ completion ( . success( ( ) ) )
271
+ }
267
272
}
268
273
}
269
- }
270
274
275
+ }
276
+ }
277
+ case . reportsServer( let serverOptions) :
278
+ guard let url = serverOptions. url else {
279
+ os_log ( . error, " Downloading reports failed, no URL provided " )
280
+ completion ( . failure( . downloadingReportsFailed) )
281
+ return
282
+ }
283
+
284
+ self . findMyController. fetchReports ( for: self . accessories, with: url, authorizationHeader: serverOptions. authorizationHeader) { [ weak self] result in
285
+ switch result {
286
+ case . failure( let error) :
287
+ os_log ( . error, " Downloading reports failed %@ " , error. localizedDescription)
288
+ completion ( . failure( . downloadingReportsFailed) )
289
+ case . success( let devices) :
290
+ let reports = devices. compactMap ( { $0. reports } ) . flatMap ( { $0 } )
291
+ if reports. isEmpty {
292
+ completion ( . failure( . noReportsFound) )
293
+ } else {
294
+ self ? . updateWithDecryptedReports ( devices: devices)
295
+ completion ( . success( ( ) ) )
296
+ }
297
+ }
271
298
}
272
299
}
273
300
}
0 commit comments