Ivan Valkou 4 лет назад
Родитель
Сommit
491f3c721c

+ 2 - 0
FreeAPS.xcodeproj/project.pbxproj

@@ -204,6 +204,7 @@
 		38E8757927579D9200975559 /* Publisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3811DE5525C9D4D500A708ED /* Publisher.swift */; };
 		38E8757B2757B1C300975559 /* TempTargetsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E8757A2757B1C300975559 /* TempTargetsView.swift */; };
 		38E8757D2757C45D00975559 /* BolusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E8757C2757C45D00975559 /* BolusView.swift */; };
+		38E8757E2758C86A00975559 /* ConvenienceExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38192E0C261BAF980094D973 /* ConvenienceExtensions.swift */; };
 		38E989DD25F5021400C0CED0 /* PumpStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E989DC25F5021400C0CED0 /* PumpStatus.swift */; };
 		38E98A2325F52C9300C0CED0 /* Signpost.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E98A1B25F52C9300C0CED0 /* Signpost.swift */; };
 		38E98A2425F52C9300C0CED0 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E98A1C25F52C9300C0CED0 /* Logger.swift */; };
@@ -2231,6 +2232,7 @@
 				38E8752A27554D5700975559 /* FreeAPSApp.swift in Sources */,
 				38E8757B2757B1C300975559 /* TempTargetsView.swift in Sources */,
 				38E8753027554D5700975559 /* NotificationView.swift in Sources */,
+				38E8757E2758C86A00975559 /* ConvenienceExtensions.swift in Sources */,
 				38E8754727554DF100975559 /* Color+Extensions.swift in Sources */,
 				38E8755927567CA600975559 /* Decimal+Extensions.swift in Sources */,
 			);

+ 20 - 1
FreeAPS/Sources/Services/WatchManager/WatchManager.swift

@@ -51,7 +51,8 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
             self.state.trend = glucoseValues.trend
             self.state.delta = glucoseValues.delta
             self.state.glucoseDate = self.glucoseStorage.recent().last?.dateString
-            self.state.lastLoopDate = self.enactedSuggestion?.deliverAt
+            self.state.lastLoopDate = self.enactedSuggestion?.recieved == true ? self.enactedSuggestion?.deliverAt : self
+                .apsManager.lastLoopDate
             self.state.bolusIncrement = self.settingsManager.preferences.bolusIncrement
             self.state.maxCOB = self.settingsManager.preferences.maxCOB
             self.state.maxBolus = self.settingsManager.pumpSettings.maxBolus
@@ -78,6 +79,7 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
                     )
                 }
             self.state.bolusAfterCarbs = !self.settingsManager.settings.skipBolusScreenAfterCarbs
+            self.state.eventualBG = self.evetualBGStraing()
 
             self.sendState()
         }
@@ -141,6 +143,16 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
         return description
     }
 
+    private func evetualBGStraing() -> String? {
+        guard let eventualBG = suggestion?.eventualBG else {
+            return nil
+        }
+        let units = settingsManager.settings.units
+        return "⇢ " + eventualFormatter.string(
+            from: (units == .mmolL ? eventualBG.asMmolL : Decimal(eventualBG)) as NSNumber
+        )!
+    }
+
     private var glucoseFormatter: NumberFormatter {
         let formatter = NumberFormatter()
         formatter.numberStyle = .decimal
@@ -153,6 +165,13 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
         return formatter
     }
 
+    private var eventualFormatter: NumberFormatter {
+        let formatter = NumberFormatter()
+        formatter.numberStyle = .decimal
+        formatter.maximumFractionDigits = 2
+        return formatter
+    }
+
     private var deltaFormatter: NumberFormatter {
         let formatter = NumberFormatter()
         formatter.numberStyle = .decimal

+ 1 - 0
FreeAPSWatch WatchKit Extension/DataFlow.swift

@@ -15,6 +15,7 @@ struct WatchState: Codable {
     var cob: Decimal?
     var tempTargets: [TempTargetWatchPreset] = []
     var bolusAfterCarbs: Bool?
+    var eventualBG: String?
 }
 
 struct TempTargetWatchPreset: Codable, Identifiable {

+ 42 - 15
FreeAPSWatch WatchKit Extension/Views/MainView.swift

@@ -47,6 +47,7 @@ struct MainView: View {
                     Text(state.delta).font(.caption2)
                         .scaledToFill()
                         .minimumScaleFactor(0.5)
+                        .foregroundColor(.secondary)
                 }
                 Spacer()
 
@@ -59,27 +60,48 @@ struct MainView: View {
                         Text(timeString).font(.caption2)
                             .scaledToFill()
                             .minimumScaleFactor(0.5)
+                            .foregroundColor(.secondary)
                     } else {
                         Text("--").font(.caption2)
                     }
                 }
             }
             Spacer()
-            HStack (alignment: .firstTextBaseline) {
-                Text("IOB: " + iobFormatter.string(from: (state.iob ?? 0) as NSNumber)! + " U").font(.caption2)
-                    .scaledToFill()
-                    .minimumScaleFactor(0.5)
+            HStack(alignment: .firstTextBaseline) {
+                HStack {
+                    Text(iobFormatter.string(from: (state.iob ?? 0) as NSNumber)! + " U")
+                        .font(.caption2)
+                        .scaledToFill()
+                        .foregroundColor(.insulin)
+                        .minimumScaleFactor(0.5)
+
+                }.minimumScaleFactor(0.5)
                 Spacer()
-                Text("COB: " + iobFormatter.string(from: (state.cob ?? 0) as NSNumber)! + " g").font(.caption2)
-                    .scaledToFill()
-                    .minimumScaleFactor(0.5)
+                HStack {
+                    Text(iobFormatter.string(from: (state.cob ?? 0) as NSNumber)! + " g")
+                        .font(.caption2)
+                        .scaledToFill()
+                        .foregroundColor(.loopGreen)
+                        .minimumScaleFactor(0.5)
+                }
+
+                if let eventualBG = state.eventualBG.nonEmpty {
+                    Spacer()
+                    HStack {
+                        Text(eventualBG)
+                            .font(.caption2)
+                            .scaledToFill()
+                            .foregroundColor(.secondary)
+                            .minimumScaleFactor(0.5)
+                    }
+                }
             }
             Spacer()
         }.padding()
     }
 
     var buttons: some View {
-        HStack {
+        HStack(alignment: .center) {
             NavigationLink(isActive: $state.isCarbsViewActive) {
                 CarbsView()
                     .environmentObject(state)
@@ -102,7 +124,9 @@ struct MainView: View {
                         .frame(width: 24, height: 24)
                         .foregroundColor(.loopYellow)
                     if let until = state.tempTargets.compactMap(\.until).first, until > Date() {
-                        Text(until, style: .timer).font(.system(size: 8))
+                        Text(until, style: .timer)
+                            .scaledToFill()
+                            .font(.system(size: 8))
                     }
                 }
             }
@@ -132,7 +156,7 @@ struct MainView: View {
         if minAgo > 1440 {
             return "--"
         }
-        return "\(minAgo) " + NSLocalizedString("min ago", comment: "Minutes ago since last loop")
+        return "\(minAgo) " + NSLocalizedString("min", comment: "Minutes ago since last loop")
     }
 
     private var color: Color {
@@ -155,12 +179,15 @@ struct ContentView_Previews: PreviewProvider {
     static var previews: some View {
         let state = WatchStateModel()
 
-        state.glucose = "15,7"
-        state.delta = "+0.39"
-        state.iob = 10.38
-        state.cob = 112
-
+        state.glucose = "888"
+        state.delta = "+888"
+        state.iob = 100.38
+        state.cob = 112.123
+        state.eventualBG = "⇢ 8,888"
         state.lastLoopDate = Date().addingTimeInterval(-200)
+        state
+            .tempTargets =
+            [TempTargetWatchPreset(name: "Test", id: "test", description: "", until: Date().addingTimeInterval(3600 * 3))]
 
         return Group {
             MainView()

+ 2 - 0
FreeAPSWatch WatchKit Extension/Views/WatchStateModel.swift

@@ -9,6 +9,7 @@ class WatchStateModel: NSObject, ObservableObject {
     @Published var glucose = "00"
     @Published var trend = "→"
     @Published var delta = "+00"
+    @Published var eventualBG = ""
     @Published var lastLoopDate: Date?
     @Published var glucoseDate: Date?
     @Published var bolusIncrement: Decimal?
@@ -131,6 +132,7 @@ class WatchStateModel: NSObject, ObservableObject {
         cob = state.cob
         tempTargets = state.tempTargets
         bolusAfterCarbs = state.bolusAfterCarbs ?? true
+        eventualBG = state.eventualBG ?? ""
     }
 }