ソースを参照

add % of override in Apple Watch

Pierre L 3 年 前
コミット
63fbce55a6

+ 3 - 0
FreeAPS/Sources/Modules/WatchConfig/WatchConfigStateModel.swift

@@ -7,6 +7,7 @@ enum AwConfig: String, JSON, CaseIterable, Identifiable, Codable {
     case BGTarget
     case steps
     case isf
+    case override
 
     var displayName: String {
         switch self {
@@ -18,6 +19,8 @@ enum AwConfig: String, JSON, CaseIterable, Identifiable, Codable {
             return NSLocalizedString("Steps", comment: "")
         case .isf:
             return NSLocalizedString("ISF", comment: "")
+        case .override:
+            return NSLocalizedString("% Override", comment: "")
         }
     }
 }

+ 18 - 0
FreeAPS/Sources/Services/WatchManager/WatchManager.swift

@@ -1,3 +1,4 @@
+import CoreData
 import Foundation
 import Swinject
 import WatchConnectivity
@@ -18,6 +19,8 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
     @Injected() private var tempTargetsStorage: TempTargetsStorage!
     @Injected() private var garmin: GarminManager!
 
+    let coredataContext = CoreDataStack.shared.persistentContainer.viewContext // newBackgroundContext()
+
     private var lifetime = Lifetime()
 
     init(resolver: Resolver, session: WCSession = .default) {
@@ -102,6 +105,21 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
 
             self.state.isf = self.suggestion?.isf
 
+            var overrideArray = [Override]()
+            let requestOverrides = Override.fetchRequest() as NSFetchRequest<Override>
+            let sortOverride = NSSortDescriptor(key: "date", ascending: false)
+            requestOverrides.sortDescriptors = [sortOverride]
+            requestOverrides.fetchLimit = 1
+            try? overrideArray = self.coredataContext.fetch(requestOverrides)
+
+            if overrideArray.first?.enabled ?? false {
+                let percentString = "\((overrideArray.first?.percentage ?? 100).formatted(.number)) %"
+                self.state.override = percentString
+
+            } else {
+                self.state.override = "100 %"
+            }
+
             self.sendState()
         }
     }

+ 1 - 0
FreeAPSWatch WatchKit Extension/DataFlow.swift

@@ -22,6 +22,7 @@ struct WatchState: Codable {
     var eventualBGRaw: String?
     var displayOnWatch: AwConfig?
     var isf: Decimal?
+    var override: String?
 }
 
 struct TempTargetWatchPreset: Codable, Identifiable {

+ 16 - 0
FreeAPSWatch WatchKit Extension/Views/MainView.swift

@@ -185,6 +185,22 @@ struct MainView: View {
                             .foregroundColor(.white)
                             .minimumScaleFactor(0.5)
                     }
+                case .override:
+                    Spacer()
+                    let override: String = state.override != nil ? state.override! : "-"
+                    HStack {
+                        Image(systemName: "person.3.sequence.fill")
+                            .renderingMode(.template)
+                            .resizable()
+                            .frame(width: 24, height: 12)
+                            .foregroundColor(.blue)
+                        Text("\(override)")
+                            .fontWeight(.regular)
+                            .font(.caption2)
+                            .scaledToFill()
+                            .foregroundColor(.white)
+                            .minimumScaleFactor(0.5)
+                    }
                 }
             }
             Spacer()

+ 3 - 0
FreeAPSWatch WatchKit Extension/WatchStateModel.swift

@@ -9,6 +9,7 @@ enum AwConfig: String, CaseIterable, Identifiable, Codable {
     case BGTarget
     case steps
     case isf
+    case override
 }
 
 class WatchStateModel: NSObject, ObservableObject {
@@ -54,6 +55,7 @@ class WatchStateModel: NSObject, ObservableObject {
     @Published var pendingBolus: Double?
 
     @Published var isf: Decimal?
+    @Published var override: String?
 
     private var lifetime = Set<AnyCancellable>()
     private var confirmationTimeout: AnyCancellable?
@@ -172,6 +174,7 @@ class WatchStateModel: NSObject, ObservableObject {
         eventualBG = state.eventualBG ?? ""
         displayOnWatch = state.displayOnWatch ?? .BGTarget
         isf = state.isf
+        override = state.override
     }
 }