Просмотр исходного кода

Refactor CGM StateModel to Singleton; change callers and passers accordingly

Co-Authored-By: marv-out <marv-out@users.noreply.github.com>
Deniz Cengiz 1 год назад
Родитель
Сommit
a982bcf220

+ 10 - 0
Trio/Sources/Modules/CGM/CGMStateModel.swift

@@ -37,6 +37,16 @@ class CGMDeletionCompletionNotifying: CompletionNotifying {
 
 extension CGM {
     final class StateModel: BaseStateModel<Provider> {
+        // Singleton implementation
+        private static var _shared: StateModel?
+        static var shared: StateModel {
+            if _shared == nil {
+                _shared = StateModel()
+                _shared?.resolver = TrioApp().resolver
+            }
+            return _shared!
+        }
+
         @Injected() var fetchGlucoseManager: FetchGlucoseManager!
         @Injected() var pluginCGMManager: PluginManager!
         @Injected() private var broadcaster: Broadcaster!

+ 3 - 2
Trio/Sources/Modules/Home/HomeStateModel.swift

@@ -20,7 +20,9 @@ extension Home {
         @ObservationIgnored @Injected() var tempTargetStorage: TempTargetsStorage!
         @ObservationIgnored @Injected() var overrideStorage: OverrideStorage!
 
-        var cgmStateModel: CGM.StateModel?
+        var cgmStateModel: CGM.StateModel {
+            CGM.StateModel.shared
+        }
 
         private let timer = DispatchTimer(timeInterval: 5)
         private(set) var filteredHours = 24
@@ -137,7 +139,6 @@ extension Home {
 
         override init() {
             super.init()
-            cgmStateModel = CGM.StateModel()
         }
 
         override func subscribe() {

+ 6 - 13
Trio/Sources/Modules/Home/View/HomeRootView.swift

@@ -971,19 +971,12 @@ extension Home {
                      .none,
                      .simulator,
                      .xdrip:
-
-                    // TODO: clean this up
-                    if let cgmState = state.cgmStateModel {
-                        CGM.OtherCGMView(
-                            resolver: self.resolver,
-                            state: cgmState,
-                            cgmCurrent: state.cgmCurrent,
-                            deleteCGM: state.deleteCGM
-                        )
-                    } else {
-                        Text("Error: No CGM State Model Available")
-                    }
-
+                    CGM.OtherCGMView(
+                        resolver: self.resolver,
+                        state: state.cgmStateModel,
+                        cgmCurrent: state.cgmCurrent,
+                        deleteCGM: state.deleteCGM
+                    )
                 case .plugin:
                     if let fetchGlucoseManager = state.fetchGlucoseManager,
                        let cgmManager = fetchGlucoseManager.cgmManager,