Browse Source

Merge pull request #429 from dabear/dev+glucose-source-unit-change

Glucose source unit change update cgmmanagers
Sjoerd Bozon 1 năm trước cách đây
mục cha
commit
51f1e1bc71

+ 11 - 1
FreeAPS/Sources/APS/FetchGlucoseManager.swift

@@ -1,5 +1,6 @@
 import Combine
 import Foundation
+import HealthKit
 import LoopKit
 import LoopKitUI
 import SwiftDate
@@ -98,6 +99,14 @@ final class BaseFetchGlucoseManager: FetchGlucoseManager, Injectable {
         settingsManager.settings.uploadGlucose = cgmM.shouldSyncToRemoteService
     }
 
+    private func updateManagerUnits(_ manager: CGMManagerUI?) {
+        let units = settingsManager.settings.units
+        let managerName = cgmManager.map { "\(type(of: $0))" } ?? "nil"
+        let loopkitUnits: HKUnit = units == .mgdL ? .milligramsPerDeciliter : .millimolesPerLiter
+        print("manager: \(managerName) is changing units to: \(loopkitUnits.description) ")
+        manager?.unitDidChange(to: loopkitUnits)
+    }
+
     func updateGlucoseSource(cgmGlucoseSourceType: CGMType, cgmGlucosePluginId: String, newManager: CGMManagerUI?) {
         // if changed, remove all calibrations
         if self.cgmGlucoseSourceType != cgmGlucoseSourceType || self.cgmGlucosePluginId != cgmGlucosePluginId {
@@ -120,6 +129,8 @@ final class BaseFetchGlucoseManager: FetchGlucoseManager, Injectable {
             removeCalibrations()
         } else if self.cgmGlucoseSourceType == .plugin, cgmManager == nil, let rawCGMManager = rawCGMManager {
             cgmManager = cgmManagerFromRawValue(rawCGMManager)
+            updateManagerUnits(cgmManager)
+
         } else {
             saveConfigManager()
         }
@@ -151,7 +162,6 @@ final class BaseFetchGlucoseManager: FetchGlucoseManager, Injectable {
         else {
             return nil
         }
-
         return Manager.init(rawState: rawState)
     }
 

+ 1 - 0
FreeAPS/Sources/Modules/PreferencesEditor/PreferencesEditorDataFlow.swift

@@ -109,6 +109,7 @@ protocol PreferencesEditorProvider: Provider {
     var preferences: Preferences { get }
     func savePreferences(_ preferences: Preferences)
     func migrateUnits()
+    func updateManagerUnits()
 }
 
 protocol PreferencesSettable: AnyObject {

+ 11 - 0
FreeAPS/Sources/Modules/PreferencesEditor/PreferencesEditorProvider.swift

@@ -1,8 +1,10 @@
 import Foundation
+import HealthKit
 
 extension PreferencesEditor {
     final class Provider: BaseProvider, PreferencesEditorProvider {
         @Injected() private var settingsManager: SettingsManager!
+        @Injected() var fetchGlucoseManager: FetchGlucoseManager!
         private let processQueue = DispatchQueue(label: "PreferencesEditorProvider.processQueue")
 
         var preferences: Preferences {
@@ -17,6 +19,15 @@ extension PreferencesEditor {
             }
         }
 
+        func updateManagerUnits() {
+            var manager = fetchGlucoseManager.cgmManager
+            let managerName = manager.map { "\(type(of: $0))" } ?? "nil"
+            let units = settingsManager.settings.units
+            let loopkitUnits: HKUnit = units == .mgdL ? .milligramsPerDeciliter : .millimolesPerLiter
+            print("manager: \(managerName) is changing units to: \(loopkitUnits.description) ")
+            manager?.unitDidChange(to: loopkitUnits)
+        }
+
         func migrateUnits() {
             migrateTargets()
             migrateISF()

+ 1 - 0
FreeAPS/Sources/Modules/PreferencesEditor/PreferencesEditorStateModel.swift

@@ -16,6 +16,7 @@ extension PreferencesEditor {
             subscribeSetting(\.units, on: $unitsIndex.map { $0 == 0 ? GlucoseUnits.mgdL : .mmolL }) {
                 unitsIndex = $0 == .mgdL ? 0 : 1
             } didSet: { [weak self] _ in
+                self?.provider.updateManagerUnits()
                 self?.provider.migrateUnits()
             }