Refactor globals
This commit is contained in:
@ -11,10 +11,15 @@ final class TemperatureStorage: ObservableObject {
|
||||
in: .userDomainMask,
|
||||
appropriateFor: nil, create: true)
|
||||
}
|
||||
|
||||
|
||||
@AppStorage("newestDate")
|
||||
private var newestMeasurementTime: Int = 0
|
||||
|
||||
|
||||
/**
|
||||
The date of the latest measurement.
|
||||
|
||||
Incoming data older than this date will be rejected to prevent duplicate measurements
|
||||
*/
|
||||
private var newestMeasurementDate: Date {
|
||||
get {
|
||||
Date(seconds: newestMeasurementTime)
|
||||
@ -30,8 +35,6 @@ final class TemperatureStorage: ObservableObject {
|
||||
@Published
|
||||
var dailyMeasurementCounts: [MeasurementDailyCount] = []
|
||||
|
||||
private var unsavedMeasurements: [TemperatureMeasurement] = []
|
||||
|
||||
private let fileNameFormatter: DateFormatter
|
||||
|
||||
private let storageFolder: URL
|
||||
@ -98,6 +101,12 @@ final class TemperatureStorage: ObservableObject {
|
||||
.filter { $0.date >= startDate }
|
||||
recentMeasurements = yesterdayValues + todayValues
|
||||
}
|
||||
|
||||
private func updateLastMeasurements(_ measurements: [TemperatureMeasurement]) {
|
||||
let startDate = Date().addingTimeInterval(-lastValueInterval).seconds
|
||||
let new = recentMeasurements + measurements
|
||||
recentMeasurements = Array(new.drop { $0.id < startDate })
|
||||
}
|
||||
|
||||
private func loadMeasurements(for date: Date) -> [TemperatureMeasurement] {
|
||||
loadMeasurements(from: fileName(for: date))
|
||||
@ -123,14 +132,20 @@ final class TemperatureStorage: ObservableObject {
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
func save() {
|
||||
for (dateIndex, values) in unsavedMeasurements.splitByDate() {
|
||||
|
||||
func add(_ measurements: [TemperatureMeasurement]) {
|
||||
let lastDate = self.newestMeasurementDate.seconds
|
||||
let newValues = measurements
|
||||
.filter { $0.id > lastDate }
|
||||
.splitByDate()
|
||||
|
||||
for (dateIndex, values) in newValues {
|
||||
let count = saveNew(values, for: dateIndex)
|
||||
print("Day \(dateIndex): \(count) of \(values.count) saved")
|
||||
setDailyCount(count, for: dateIndex)
|
||||
print("Day \(dateIndex): \(count) values")
|
||||
}
|
||||
unsavedMeasurements = []
|
||||
saveDailyCounts()
|
||||
updateLastMeasurements(measurements)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -138,21 +153,9 @@ final class TemperatureStorage: ObservableObject {
|
||||
*/
|
||||
private func saveNew(_ measurements: [TemperatureMeasurement], for dateIndex: Int) -> Int {
|
||||
let fileName = fileName(for: dateIndex)
|
||||
var existing = loadMeasurements(from: fileName)
|
||||
guard !existing.isEmpty else {
|
||||
save(measurements, for: fileName)
|
||||
setDailyCount(measurements.count, for: dateIndex)
|
||||
return measurements.count
|
||||
}
|
||||
var inserted = 0
|
||||
for value in measurements {
|
||||
if existing.insert(value) {
|
||||
inserted += 1
|
||||
}
|
||||
}
|
||||
save(existing, for: fileName)
|
||||
setDailyCount(existing.count, for: dateIndex)
|
||||
return inserted
|
||||
let values = loadMeasurements(from: fileName) + measurements
|
||||
save(values, for: fileName)
|
||||
return values.count
|
||||
}
|
||||
|
||||
private func save(_ measurements: [TemperatureMeasurement], for fileName: String) {
|
||||
@ -239,23 +242,6 @@ final class TemperatureStorage: ObservableObject {
|
||||
|
||||
}
|
||||
|
||||
extension TemperatureStorage: TemperatureDataTransferDelegate {
|
||||
|
||||
func didReceiveRecording(_ measurement: TemperatureMeasurement) {
|
||||
// Add to unsaved measurements
|
||||
if unsavedMeasurements.insert(measurement) {
|
||||
incrementCount(for: measurement.date.dateIndex)
|
||||
}
|
||||
|
||||
// Add to last measurements
|
||||
recentMeasurements.insert(measurement)
|
||||
}
|
||||
|
||||
func saveAfterTransfer() {
|
||||
save()
|
||||
}
|
||||
}
|
||||
|
||||
private extension Array where Element == TemperatureMeasurement {
|
||||
|
||||
@discardableResult
|
||||
|
Reference in New Issue
Block a user