Show all points for day
This commit is contained in:
@ -63,6 +63,7 @@ final class TemperatureStorage: ObservableObject {
|
||||
}
|
||||
|
||||
ensureExistenceOfFolder()
|
||||
recalculateDailyCounts()
|
||||
}
|
||||
|
||||
private func ensureExistenceOfFolder() {
|
||||
@ -105,15 +106,15 @@ final class TemperatureStorage: ObservableObject {
|
||||
}
|
||||
let yesterdayValues = loadMeasurements(for: dateIndexOfStart)
|
||||
.filter { $0.date >= startDate }
|
||||
recentMeasurements = yesterdayValues + todayValues
|
||||
recentMeasurements = todayValues + yesterdayValues
|
||||
log.info("Loaded \(recentMeasurements.count) recent measurements")
|
||||
}
|
||||
|
||||
private func updateLastMeasurements(_ measurements: [TemperatureMeasurement]) {
|
||||
let startDate = Date().addingTimeInterval(-lastValueInterval).seconds
|
||||
let new = recentMeasurements + measurements
|
||||
recentMeasurements = Array(new.drop { $0.id < startDate })
|
||||
log.info("\(recentMeasurements.count) recent measurements (of \(measurements.count) new entries)")
|
||||
recentMeasurements = (measurements + recentMeasurements)
|
||||
.filter { $0.id > startDate }
|
||||
log.info("\(recentMeasurements.count) recent measurements (with \(measurements.count) new entries)")
|
||||
}
|
||||
|
||||
private func loadMeasurements(for date: Date) -> [TemperatureMeasurement] {
|
||||
@ -143,17 +144,19 @@ final class TemperatureStorage: ObservableObject {
|
||||
|
||||
func add(_ measurements: [TemperatureMeasurement]) {
|
||||
let lastDate = self.newestMeasurementDate.seconds
|
||||
let newerValues = measurements.filter { $0.id > lastDate }
|
||||
let newerValues: [TemperatureMeasurement] = measurements.filter { $0.id > lastDate }.reversed()
|
||||
let newValues = newerValues.splitByDate()
|
||||
log.info("Adding \(newValues.count) of \(measurements.count) measurements")
|
||||
log.info("Adding \(newerValues.count) of \(measurements.count) measurements")
|
||||
|
||||
for (dateIndex, values) in newValues {
|
||||
let count = saveNew(values, for: dateIndex)
|
||||
setDailyCount(count, for: dateIndex)
|
||||
//log.info("Day \(dateIndex): \(count) values")
|
||||
}
|
||||
saveDailyCounts()
|
||||
updateLastMeasurements(measurements)
|
||||
if let newest = newerValues.max()?.id {
|
||||
newestMeasurementTime = newest
|
||||
}
|
||||
}
|
||||
|
||||
func removeMeasurements(for dateIndex: Int) {
|
||||
@ -176,7 +179,7 @@ final class TemperatureStorage: ObservableObject {
|
||||
*/
|
||||
private func saveNew(_ measurements: [TemperatureMeasurement], for dateIndex: Int) -> Int {
|
||||
let fileName = fileName(for: dateIndex)
|
||||
let values = loadMeasurements(from: fileName) + measurements
|
||||
let values = measurements + loadMeasurements(from: fileName)
|
||||
save(values, for: fileName)
|
||||
return values.count
|
||||
}
|
||||
@ -184,7 +187,7 @@ final class TemperatureStorage: ObservableObject {
|
||||
private func save(_ measurements: [TemperatureMeasurement], for fileName: String) {
|
||||
let fileUrl = fileUrl(for: fileName)
|
||||
do {
|
||||
let data = try BinaryEncoder.encode(measurements.sorted())
|
||||
let data = try BinaryEncoder.encode(measurements.sorted().reversed())
|
||||
try data.write(to: fileUrl)
|
||||
} catch {
|
||||
log.error("Failed to save \(fileName): \(error)")
|
||||
@ -203,10 +206,7 @@ final class TemperatureStorage: ObservableObject {
|
||||
|
||||
private func add(dailyCount count: Int, for dateIndex: Int) {
|
||||
let entry = MeasurementDailyCount(dateIndex: dateIndex, count: count)
|
||||
guard let index = dailyMeasurementCounts.firstIndex(where: { $0.dateIndex < dateIndex }) else {
|
||||
dailyMeasurementCounts.append(entry)
|
||||
return
|
||||
}
|
||||
let index = dailyMeasurementCounts.firstIndex(where: { $0.dateIndex > dateIndex }) ?? 0
|
||||
dailyMeasurementCounts.insert(entry, at: index)
|
||||
}
|
||||
|
||||
@ -240,8 +240,10 @@ final class TemperatureStorage: ObservableObject {
|
||||
self.dailyMeasurementCounts = measurements.reduce(into: [Int: Int]()) { counts, value in
|
||||
let index = value.date.dateIndex
|
||||
counts[index] = (counts[index] ?? 0) + 1
|
||||
}.map { MeasurementDailyCount(dateIndex: $0.key, count: $0.value) }
|
||||
.sorted()
|
||||
}
|
||||
.map { MeasurementDailyCount(dateIndex: $0.key, count: $0.value) }
|
||||
.sorted()
|
||||
.reversed()
|
||||
}
|
||||
|
||||
func recalculateDailyCounts() {
|
||||
@ -260,13 +262,13 @@ final class TemperatureStorage: ObservableObject {
|
||||
self.dailyMeasurementCounts = newValues
|
||||
.map { .init(dateIndex: $0.key, count: $0.value) }
|
||||
.sorted()
|
||||
.reversed()
|
||||
log.info("Daily counts recalculated from \(files.count) files")
|
||||
}
|
||||
} catch {
|
||||
log.error("Failed to load daily counts: \(error)")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private extension Array where Element == TemperatureMeasurement {
|
||||
|
Reference in New Issue
Block a user