Ivan Valkou 5 лет назад
Родитель
Сommit
25cd302eec

+ 7 - 1
FreeAPS/Sources/Modules/Home/HomeDataFlow.swift

@@ -1,5 +1,11 @@
+import Foundation
+
 enum Home {
     enum Config {}
 }
 
-protocol HomeProvider: Provider {}
+protocol HomeProvider: Provider {
+    var suggestion: Suggestion? { get }
+    func fetchAndLoop()
+    func filteredGlucose() -> [BloodGlucose]
+}

+ 21 - 1
FreeAPS/Sources/Modules/Home/HomeProvider.swift

@@ -1,3 +1,23 @@
+import Foundation
+import SwiftDate
+
 extension Home {
-    final class Provider: BaseProvider, HomeProvider {}
+    final class Provider: BaseProvider, HomeProvider {
+        @Injected() var apsManager: APSManager!
+        @Injected() var glucoseStorage: GlucoseStorage!
+
+        var suggestion: Suggestion? {
+            try? storage.retrieve(OpenAPS.Enact.suggested, as: Suggestion.self)
+        }
+
+        func fetchAndLoop() {
+            apsManager.fetchAndLoop()
+        }
+
+        func filteredGlucose() -> [BloodGlucose] {
+            glucoseStorage.recent().filter {
+                $0.dateString.addingTimeInterval(3.hours.timeInterval) > Date()
+            }
+        }
+    }
 }

+ 5 - 17
FreeAPS/Sources/Modules/Home/HomeViewModel.swift

@@ -3,20 +3,14 @@ import SwiftUI
 
 extension Home {
     class ViewModel<Provider>: BaseViewModel<Provider>, ObservableObject where Provider: HomeProvider {
-        @Injected() var apsManager: APSManager!
-        @Injected() var history: PumpHistoryStorage!
-        @Injected() var temps: TempTargetsStorage!
-        @Injected() var glucoseStorage: GlucoseStorage!
         @Injected() var broadcaster: Broadcaster!
-        @Injected() var storage: FileStorage!
 
         @Published var glucose: [BloodGlucose] = []
-
         @Published var suggestion: Suggestion?
 
         override func subscribe() {
-            glucose = filteredGlucose(glucoseStorage.recent())
-            suggestion = try? storage.retrieve(OpenAPS.Enact.suggested, as: Suggestion.self)
+            glucose = provider.filteredGlucose()
+            suggestion = provider.suggestion
             broadcaster.register(GlucoseObserver.self, observer: self)
             broadcaster.register(SuggestionObserver.self, observer: self)
         }
@@ -26,7 +20,7 @@ extension Home {
         }
 
         func runLoop() {
-            apsManager.fetchAndLoop()
+            provider.fetchAndLoop()
         }
 
         func addTempTarget() {
@@ -36,18 +30,12 @@ extension Home {
         func bolus() {
             showModal(for: .bolus)
         }
-
-        private func filteredGlucose(_ glucose: [BloodGlucose]) -> [BloodGlucose] {
-            glucose.filter {
-                $0.dateString.addingTimeInterval(3.hours.timeInterval) > Date()
-            }
-        }
     }
 }
 
 extension Home.ViewModel: GlucoseObserver, SuggestionObserver {
-    func glucoseDidUpdate(_ glucose: [BloodGlucose]) {
-        self.glucose = filteredGlucose(glucose)
+    func glucoseDidUpdate(_: [BloodGlucose]) {
+        glucose = provider.filteredGlucose()
     }
 
     func suggestionDidUpdate(_ suggestion: Suggestion) {

+ 1 - 1
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -17,7 +17,7 @@ extension Home {
                     Text("Bolus")
                 }
                 Button(action: viewModel.runLoop) {
-                    Text("Run loop")
+                    Text("Run loop now")
                 }
             }
             .navigationTitle("Home")