Skip to content

Commit c394b0e

Browse files
Save reports locally
1 parent 29e64dc commit c394b0e

1 file changed

Lines changed: 36 additions & 1 deletion

File tree

OpenHaystack/OpenHaystack/HaystackApp/AccessoryController.swift

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,8 @@ class AccessoryController: ObservableObject {
273273
completion(.failure(.downloadingReportsFailed))
274274
case .success(let devices):
275275
let reports = devices.compactMap({ $0.reports }).flatMap({ $0 })
276+
self?.mergeAndSaveReports(reports: reports)
277+
276278
if reports.isEmpty {
277279
completion(.failure(.noReportsFound))
278280
} else {
@@ -281,11 +283,44 @@ class AccessoryController: ObservableObject {
281283
}
282284
}
283285
}
284-
285286
}
286287
}
287288
}
289+
290+
func mergeAndSaveReports(reports: [FindMyReport]) {
291+
// Get URL of the file to save reports
292+
guard let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("location_reports.json") else {
293+
return
294+
}
295+
print(fileURL)
296+
297+
var allReports: [FindMyReport] = []
298+
299+
// Read previously saved reports from file
300+
if let data = try? Data(contentsOf: fileURL),
301+
let savedReports = try? JSONDecoder().decode([FindMyReport].self, from: data) {
302+
// Remove duplicates from newly downloaded reports
303+
let uniqueReports = reports.filter { newReport in
304+
!savedReports.contains { existingReport in
305+
return newReport.id == existingReport.id
306+
}
307+
}
308+
// Merge newly downloaded reports with previously saved reports
309+
allReports.append(contentsOf: savedReports)
310+
allReports.append(contentsOf: uniqueReports)
311+
} else {
312+
// No previously saved reports, simply add all newly downloaded reports
313+
allReports.append(contentsOf: reports)
314+
}
288315

316+
// Write merged reports back to file
317+
do {
318+
let jsonData = try JSONEncoder().encode(allReports)
319+
try jsonData.write(to: fileURL)
320+
} catch {
321+
print("Failed to write new reports to file")
322+
}
323+
}
289324
}
290325

291326
class AccessoryControllerPreview: AccessoryController {

0 commit comments

Comments
 (0)