HomeProvider.swift 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import Foundation
  2. import LoopKitUI
  3. import SwiftDate
  4. extension Home {
  5. final class Provider: BaseProvider, HomeProvider {
  6. @Injected() var apsManager: APSManager!
  7. @Injected() var glucoseStorage: GlucoseStorage!
  8. @Injected() var tempTargetsStorage: TempTargetsStorage!
  9. @Injected() var announcementStorage: AnnouncementsStorage!
  10. func pumpTimeZone() -> TimeZone? {
  11. apsManager.pumpManager?.status.timeZone
  12. }
  13. func heartbeatNow() {
  14. apsManager.heartbeat(date: Date())
  15. }
  16. func tempTargets(hours: Int) -> [TempTarget] {
  17. tempTargetsStorage.recent().filter {
  18. $0.createdAt.addingTimeInterval(hours.hours.timeInterval) > Date()
  19. }
  20. }
  21. func tempTarget() -> TempTarget? {
  22. tempTargetsStorage.current()
  23. }
  24. func announcement(_ hours: Int) -> [Announcement] {
  25. announcementStorage.validate().filter {
  26. $0.createdAt.addingTimeInterval(hours.hours.timeInterval) > Date()
  27. }
  28. }
  29. func pumpSettings() -> PumpSettings {
  30. storage.retrieve(OpenAPS.Settings.settings, as: PumpSettings.self)
  31. ?? PumpSettings(from: OpenAPS.defaults(for: OpenAPS.Settings.settings))
  32. ?? PumpSettings(insulinActionCurve: 10, maxBolus: 10, maxBasal: 2)
  33. }
  34. func pumpReservoir() -> Decimal? {
  35. storage.retrieve(OpenAPS.Monitor.reservoir, as: Decimal.self)
  36. }
  37. func getBasalProfile() async -> [BasalProfileEntry] {
  38. await storage.retrieveAsync(OpenAPS.Settings.basalProfile, as: [BasalProfileEntry].self)
  39. ?? [BasalProfileEntry](from: OpenAPS.defaults(for: OpenAPS.Settings.basalProfile))
  40. ?? []
  41. }
  42. func getBGTarget() async -> BGTargets {
  43. await storage.retrieveAsync(OpenAPS.Settings.bgTargets, as: BGTargets.self)
  44. ?? BGTargets(from: OpenAPS.defaults(for: OpenAPS.Settings.bgTargets))
  45. ?? BGTargets(units: .mgdL, userPreferredUnits: .mgdL, targets: [])
  46. }
  47. }
  48. }