HistoryStateModel.swift 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import CoreData
  2. import HealthKit
  3. import Observation
  4. import SwiftUI
  5. extension History {
  6. @Observable final class StateModel: BaseStateModel<Provider> {
  7. @ObservationIgnored @Injected() var broadcaster: Broadcaster!
  8. @ObservationIgnored @Injected() var apsManager: APSManager!
  9. @ObservationIgnored @Injected() var unlockmanager: UnlockManager!
  10. @ObservationIgnored @Injected() private var storage: FileStorage!
  11. @ObservationIgnored @Injected() var pumpHistoryStorage: PumpHistoryStorage!
  12. @ObservationIgnored @Injected() var glucoseStorage: GlucoseStorage!
  13. @ObservationIgnored @Injected() var healthKitManager: HealthKitManager!
  14. @ObservationIgnored @Injected() var carbsStorage: CarbsStorage!
  15. var mode: Mode = .treatments
  16. var treatments: [Treatment] = []
  17. var manualGlucose: Decimal = 0
  18. var waitForSuggestion: Bool = false
  19. var insulinEntryDeleted: Bool = false
  20. var carbEntryDeleted: Bool = false
  21. var units: GlucoseUnits = .mgdL
  22. var carbEntryToEdit: CarbEntryStored?
  23. var showCarbEntryEditor = false
  24. override func subscribe() {
  25. units = settingsManager.settings.units
  26. broadcaster.register(DeterminationObserver.self, observer: self)
  27. broadcaster.register(SettingsObserver.self, observer: self)
  28. }
  29. /// Checks if the glucose data is fresh based on the given date
  30. /// - Parameter glucoseDate: The date to check
  31. /// - Returns: Boolean indicating if the data is fresh
  32. func isGlucoseDataFresh(_ glucoseDate: Date?) -> Bool {
  33. glucoseStorage.isGlucoseDataFresh(glucoseDate)
  34. }
  35. func addManualGlucose() {
  36. // Always save value in mg/dL
  37. let glucose = units == .mmolL ? manualGlucose.asMgdL : manualGlucose
  38. let glucoseAsInt = Int(glucose)
  39. glucoseStorage.addManualGlucose(glucose: glucoseAsInt)
  40. }
  41. }
  42. }
  43. extension History.StateModel: DeterminationObserver, SettingsObserver {
  44. func determinationDidUpdate(_: Determination) {
  45. DispatchQueue.main.async {
  46. self.waitForSuggestion = false
  47. }
  48. }
  49. func settingsDidChange(_: TrioSettings) {
  50. units = settingsManager.settings.units
  51. }
  52. }