HomeProvider.swift 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 pumpHistoryStorage: PumpHistoryStorage!
  9. @Injected() var tempTargetsStorage: TempTargetsStorage!
  10. @Injected() var carbsStorage: CarbsStorage!
  11. @Injected() var announcementStorage: AnnouncementsStorage!
  12. var suggestion: Suggestion? {
  13. storage.retrieve(OpenAPS.Enact.suggested, as: Suggestion.self)
  14. }
  15. var enactedSuggestion: Suggestion? {
  16. storage.retrieve(OpenAPS.Enact.enacted, as: Suggestion.self)
  17. }
  18. func pumpTimeZone() -> TimeZone? {
  19. apsManager.pumpManager?.status.timeZone
  20. }
  21. func heartbeatNow() {
  22. apsManager.heartbeat(date: Date())
  23. }
  24. func filteredGlucose(hours: Int) -> [BloodGlucose] {
  25. glucoseStorage.recent().filter {
  26. $0.dateString.addingTimeInterval(hours.hours.timeInterval) > Date()
  27. }
  28. }
  29. func manualGlucose(hours: Int) -> [BloodGlucose] {
  30. glucoseStorage.recent().filter {
  31. $0.type == GlucoseType.manual.rawValue &&
  32. $0.dateString.addingTimeInterval(hours.hours.timeInterval) > Date()
  33. }
  34. }
  35. func pumpHistory(hours: Int) -> [PumpHistoryEvent] {
  36. pumpHistoryStorage.recent().filter {
  37. $0.timestamp.addingTimeInterval(hours.hours.timeInterval) > Date()
  38. }
  39. }
  40. func tempTargets(hours: Int) -> [TempTarget] {
  41. tempTargetsStorage.recent().filter {
  42. $0.createdAt.addingTimeInterval(hours.hours.timeInterval) > Date()
  43. }
  44. }
  45. func tempTarget() -> TempTarget? {
  46. tempTargetsStorage.current()
  47. }
  48. func carbs(hours: Int) -> [CarbsEntry] {
  49. carbsStorage.recent().filter {
  50. $0.createdAt.addingTimeInterval(hours.hours.timeInterval) > Date()
  51. }
  52. }
  53. func announcement(_ hours: Int) -> [Announcement] {
  54. announcementStorage.validate().filter {
  55. $0.createdAt.addingTimeInterval(hours.hours.timeInterval) > Date()
  56. }
  57. }
  58. func pumpSettings() -> PumpSettings {
  59. storage.retrieve(OpenAPS.Settings.settings, as: PumpSettings.self)
  60. ?? PumpSettings(from: OpenAPS.defaults(for: OpenAPS.Settings.settings))
  61. ?? PumpSettings(insulinActionCurve: 6, maxBolus: 10, maxBasal: 2)
  62. }
  63. func pumpBattery() -> Battery? {
  64. storage.retrieve(OpenAPS.Monitor.battery, as: Battery.self)
  65. }
  66. func pumpReservoir() -> Decimal? {
  67. storage.retrieve(OpenAPS.Monitor.reservoir, as: Decimal.self)
  68. }
  69. func autotunedBasalProfile() -> [BasalProfileEntry] {
  70. storage.retrieve(OpenAPS.Settings.profile, as: Autotune.self)?.basalProfile
  71. ?? storage.retrieve(OpenAPS.Settings.pumpProfile, as: Autotune.self)?.basalProfile
  72. ?? [BasalProfileEntry(start: "00:00", minutes: 0, rate: 1)]
  73. }
  74. func basalProfile() -> [BasalProfileEntry] {
  75. storage.retrieve(OpenAPS.Settings.pumpProfile, as: Autotune.self)?.basalProfile
  76. ?? [BasalProfileEntry(start: "00:00", minutes: 0, rate: 1)]
  77. }
  78. }
  79. }