HomeViewModel.swift 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import SwiftDate
  2. import SwiftUI
  3. extension Home {
  4. class ViewModel<Provider>: BaseViewModel<Provider>, ObservableObject where Provider: HomeProvider {
  5. @Injected() var apsManager: APSManager!
  6. @Injected() var history: PumpHistoryStorage!
  7. @Injected() var temps: TempTargetsStorage!
  8. @Injected() var glucoseStorage: GlucoseStorage!
  9. @Injected() var broadcaster: Broadcaster!
  10. @Injected() var storage: FileStorage!
  11. @Published var glucose: [BloodGlucose] = []
  12. @Published var suggestion: Suggestion?
  13. override func subscribe() {
  14. glucose = filteredGlucose(glucoseStorage.recent())
  15. suggestion = try? storage.retrieve(OpenAPS.Enact.suggested, as: Suggestion.self)
  16. broadcaster.register(GlucoseObserver.self, observer: self)
  17. broadcaster.register(SuggestionObserver.self, observer: self)
  18. }
  19. func addCarbs() {
  20. showModal(for: .addCarbs)
  21. }
  22. func runLoop() {
  23. apsManager.fetchAndLoop()
  24. }
  25. func addTempTarget() {
  26. showModal(for: .addTempTarget)
  27. }
  28. func bolus() {
  29. showModal(for: .bolus)
  30. }
  31. private func filteredGlucose(_ glucose: [BloodGlucose]) -> [BloodGlucose] {
  32. glucose.filter {
  33. $0.dateString.addingTimeInterval(3.hours.timeInterval) > Date()
  34. }
  35. }
  36. }
  37. }
  38. extension Home.ViewModel: GlucoseObserver, SuggestionObserver {
  39. func glucoseDidUpdate(_ glucose: [BloodGlucose]) {
  40. self.glucose = filteredGlucose(glucose)
  41. }
  42. func suggestionDidUpdate(_ suggestion: Suggestion) {
  43. self.suggestion = suggestion
  44. }
  45. }