Selaa lähdekoodia

Revert "mergeConflicts"

This reverts commit 1eb41f32b9073082e23992730318cd555107a9d3.
Robert 1 vuosi sitten
vanhempi
commit
4799520701

+ 4 - 4
FreeAPS/Sources/APS/Storage/OverrideStorage.swift

@@ -144,12 +144,12 @@ final class BaseOverrideStorage: @preconcurrency OverrideStorage, Injectable {
                     newOverride.isfAndCr = true
                 }
 
-                if override.smbIsScheduledOff {
-                    newOverride.smbIsScheduledOff = true
+                if override.smbIsAlwaysOff {
+                    newOverride.smbIsAlwaysOff = true
                     newOverride.start = override.start as NSDecimalNumber
                     newOverride.end = override.end as NSDecimalNumber
                 } else {
-                    newOverride.smbIsScheduledOff = false
+                    newOverride.smbIsAlwaysOff = false
                 }
 
                 newOverride.smbMinutes = override.smbMinutes as NSDecimalNumber
@@ -184,7 +184,7 @@ final class BaseOverrideStorage: @preconcurrency OverrideStorage, Injectable {
         newOverride.isfAndCr = override.isfAndCr
         newOverride.isf = override.isf
         newOverride.cr = override.cr
-        newOverride.smbIsScheduledOff = override.smbIsScheduledOff
+        newOverride.smbIsAlwaysOff = override.smbIsAlwaysOff
         newOverride.start = override.start
         newOverride.end = override.end
         newOverride.smbMinutes = override.smbMinutes

+ 1 - 1
FreeAPS/Sources/Models/Override.swift

@@ -16,7 +16,7 @@ struct Override {
     let isfAndCr: Bool
     let isf: Bool
     let cr: Bool
-    let smbIsScheduledOff: Bool
+    let smbIsAlwaysOff: Bool
     let start: Decimal
     let end: Decimal
     let smbMinutes: Decimal

+ 17 - 1
FreeAPS/Sources/Modules/Home/HomeStateModel.swift

@@ -88,7 +88,7 @@ extension Home {
         var tempTargetStored: [TempTargetStored] = []
         var tempTargetRunStored: [TempTargetRunStored] = []
         private(set) var setupPumpType: PumpConfig.PumpType = .minimed
-        var currentBGTarget: Decimal = 0
+        @Published var currentBGTarget: Decimal = 0
 
         var minForecast: [Int] = []
         var maxForecast: [Int] = []
@@ -454,6 +454,22 @@ extension Home {
             }
         }
 
+        @MainActor func cancelOverride(withID id: NSManagedObjectID) async {
+            do {
+                let profileToCancel = try viewContext.existingObject(with: id) as? OverrideStored
+                profileToCancel?.enabled = false
+
+                await saveToOverrideRunStored(withID: id)
+
+                guard viewContext.hasChanges else { return }
+                try viewContext.save()
+
+                Foundation.NotificationCenter.default.post(name: .willUpdateOverrideConfiguration, object: nil)
+            } catch {
+                debugPrint("\(DebuggingIdentifiers.failed) \(#file) \(#function) Failed to cancel Profile")
+            }
+        }
+
         func calculateTINS() -> String {
             let startTime = calculateStartTime(hours: Int(hours))
 

+ 18 - 11
FreeAPS/Sources/Modules/OverrideConfig/OverrideStateModel.swift

@@ -6,9 +6,9 @@ import SwiftUI
 extension OverrideConfig {
     @Observable final class StateModel: BaseStateModel<Provider> {
         @ObservationIgnored @Injected() var broadcaster: Broadcaster!
+        @ObservationIgnored @Injected() var storage: TempTargetsStorage!
         @ObservationIgnored @Injected() var apsManager: APSManager!
         @ObservationIgnored @Injected() var overrideStorage: OverrideStorage!
-        @ObservationIgnored @Injected() var tempTargetStorage: TempTargetsStorage!
 
         var overridePercentage: Double = 100
         var isEnabled = false
@@ -17,7 +17,6 @@ extension OverrideConfig {
         var target: Decimal = 100
         var shouldOverrideTarget: Bool = false
         var smbIsOff: Bool = false
-        var smbIsScheduledOff: Bool = false
         var id = ""
         var overrideName: String = ""
         var isPreset: Bool = false
@@ -26,6 +25,7 @@ extension OverrideConfig {
         var isfAndCr: Bool = true
         var isf: Bool = true
         var cr: Bool = true
+        var smbIsScheduledOff: Bool = false
         var start: Decimal = 0
         var end: Decimal = 0
         var smbMinutes: Decimal = 0
@@ -38,8 +38,8 @@ extension OverrideConfig {
         var showOverrideEditSheet = false
         var showTempTargetEditSheet = false
         var currentActiveTempTarget: TempTargetStored?
+        var currentActiveOverride: OverrideStored?
         var activeTempTargetName: String = ""
-        var showInvalidTargetAlert = false
 
         var units: GlucoseUnits = .mgdL
 
@@ -139,8 +139,15 @@ extension OverrideConfig.StateModel {
                 self.updateLatestOverrideConfiguration()
             }
             .store(in: &cancellables)
-    }
 
+        // Custom Notification to update View when an Temp Target has been cancelled via Home View
+        Foundation.NotificationCenter.default.addObserver(
+            self,
+            selector: #selector(handleTempTargetConfigurationUpdate),
+            name: .didUpdateTempTargetConfiguration,
+            object: nil
+        )
+    }
     // MARK: - Enact Overrides
 
     func reorderOverride(from source: IndexSet, to destination: Int) {
@@ -276,7 +283,7 @@ extension OverrideConfig.StateModel {
             date: Date(),
             duration: overrideDuration,
             indefinite: indefinite,
-            percentage: overridePercentage,
+            percentage: overrideSliderPercentage,
             smbIsOff: smbIsOff,
             isPreset: isPreset,
             id: id,
@@ -286,7 +293,7 @@ extension OverrideConfig.StateModel {
             isfAndCr: isfAndCr,
             isf: isf,
             cr: cr,
-            smbIsScheduledOff: smbIsScheduledOff,
+            smbIsAlwaysOff: smbIsAlwaysOff,
             start: start,
             end: end,
             smbMinutes: smbMinutes,
@@ -315,7 +322,7 @@ extension OverrideConfig.StateModel {
             date: Date(),
             duration: overrideDuration,
             indefinite: indefinite,
-            percentage: overridePercentage,
+            percentage: overrideSliderPercentage,
             smbIsOff: smbIsOff,
             isPreset: true,
             id: id,
@@ -325,7 +332,7 @@ extension OverrideConfig.StateModel {
             isfAndCr: isfAndCr,
             isf: isf,
             cr: cr,
-            smbIsScheduledOff: smbIsScheduledOff,
+            smbIsAlwaysOff: smbIsAlwaysOff,
             start: start,
             end: end,
             smbMinutes: smbMinutes,
@@ -463,16 +470,16 @@ extension OverrideConfig.StateModel {
 
         overrideDuration = 0
         indefinite = true
-        overridePercentage = 100
+        overrideSliderPercentage = 100
 
         advancedSettings = false
-        smbIsScheduledOff = false
+        smbIsOff = false
         overrideName = ""
         shouldOverrideTarget = false
         isf = true
         cr = true
         isfAndCr = true
-        smbIsScheduledOff = false
+        smbIsAlwaysOff = false
         start = 0
         end = 23
         smbMinutes = defaultSmbMinutes

+ 9 - 9
FreeAPS/Sources/Modules/OverrideConfig/View/AddOverrideForm.swift

@@ -77,15 +77,15 @@ struct AddOverrideForm: View {
         Section {
             VStack {
                 Spacer()
-                Text("\(state.overridePercentage.formatted(.number)) %")
+                Text("\(state.overrideSliderPercentage.formatted(.number)) %")
                     .foregroundColor(
                         state
-                            .overridePercentage >= 130 ? .red :
+                            .overrideSliderPercentage >= 130 ? .red :
                             (isEditing ? .orange : Color.tabBar)
                     )
                     .font(.largeTitle)
                 Slider(
-                    value: $state.overridePercentage,
+                    value: $state.overrideSliderPercentage,
                     in: 10 ... 200,
                     step: 1,
                     onEditingChanged: { editing in
@@ -129,11 +129,11 @@ struct AddOverrideForm: View {
                     }
                 }
                 HStack {
-                    Toggle(isOn: $state.smbIsScheduledOff) {
+                    Toggle(isOn: $state.smbIsAlwaysOff) {
                         Text("Schedule when SMBs are Off")
-                    }.disabled(!state.smbIsScheduledOff)
+                    }.disabled(!state.smbIsOff)
                 }
-                if state.smbIsScheduledOff {
+                if state.smbIsAlwaysOff {
                     HStack {
                         Text("First Hour SMBs are Off (24 hours)")
                         TextFieldWithToolBar(text: $state.start, placeholder: "0", numberFormatter: formatter)
@@ -190,7 +190,7 @@ struct AddOverrideForm: View {
                 if !state.isInputInvalid(target: state.target) {
                     showAlert.toggle()
 
-                    alertString = "\(state.overridePercentage.formatted(.number)) %, " +
+                    alertString = "\(state.overrideSliderPercentage.formatted(.number)) %, " +
                         (
                             state.overrideDuration > 0 || !state
                                 .indefinite ?
@@ -273,12 +273,12 @@ struct AddOverrideForm: View {
 
     private func unChanged() -> Bool {
         let isChanged = (
-            state.overridePercentage == 100 && !state.shouldOverrideTarget && !state.smbIsOff && !state
+            state.overrideSliderPercentage == 100 && !state.shouldOverrideTarget && !state.smbIsOff && !state
                 .advancedSettings
         ) ||
             (!state.indefinite && state.overrideDuration == 0) || (state.shouldOverrideTarget && state.target == 0) ||
             (
-                state.overridePercentage == 100 && !state.shouldOverrideTarget && !state.smbIsOff && state.isf && state
+                state.overrideSliderPercentage == 100 && !state.shouldOverrideTarget && !state.smbIsOff && state.isf && state
                     .cr && state
                     .smbMinutes == state.defaultSmbMinutes && state.uamMinutes == state.defaultUamMinutes
             )

+ 8 - 8
FreeAPS/Sources/Modules/OverrideConfig/View/EditOverrideForm.swift

@@ -14,7 +14,7 @@ struct EditOverrideForm: View {
     @State private var target: Decimal?
     @State private var advancedSettings: Bool
     @State private var smbIsOff: Bool
-    @State private var smbIsScheduledOff: Bool
+    @State private var smbIsAlwaysOff: Bool
     @State private var start: Decimal?
     @State private var end: Decimal?
     @State private var isfAndCr: Bool
@@ -42,7 +42,7 @@ struct EditOverrideForm: View {
         _target_override = State(initialValue: overrideToEdit.target?.decimalValue != 0)
         _advancedSettings = State(initialValue: overrideToEdit.advancedSettings)
         _smbIsOff = State(initialValue: overrideToEdit.smbIsOff)
-        _smbIsScheduledOff = State(initialValue: overrideToEdit.smbIsScheduledOff)
+        _smbIsAlwaysOff = State(initialValue: overrideToEdit.smbIsAlwaysOff)
         _start = State(initialValue: overrideToEdit.start?.decimalValue)
         _end = State(initialValue: overrideToEdit.end?.decimalValue)
         _isfAndCr = State(initialValue: overrideToEdit.isfAndCr)
@@ -132,7 +132,7 @@ struct EditOverrideForm: View {
                 Text("\(percentage.formatted(.number)) %")
                     .foregroundColor(
                         state
-                            .overridePercentage >= 130 ? .red :
+                            .overrideSliderPercentage >= 130 ? .red :
                             (isEditing ? .orange : Color.tabBar)
                     )
                     .font(.largeTitle)
@@ -196,11 +196,11 @@ struct EditOverrideForm: View {
                     Text("Disable SMBs")
                 }.onChange(of: smbIsOff) { _ in hasChanges = true }
 
-                Toggle(isOn: $smbIsScheduledOff) {
+                Toggle(isOn: $smbIsAlwaysOff) {
                     Text("Schedule when SMBs are Off")
-                }.onChange(of: smbIsScheduledOff) { _ in hasChanges = true }
+                }.onChange(of: smbIsAlwaysOff) { _ in hasChanges = true }
 
-                if smbIsScheduledOff {
+                if smbIsAlwaysOff {
                     HStack {
                         Text("First Hour SMBs are Off (24 hours)")
                         TextFieldWithToolBar(
@@ -342,7 +342,7 @@ struct EditOverrideForm: View {
         }
         override.advancedSettings = advancedSettings
         override.smbIsOff = smbIsOff
-        override.smbIsScheduledOff = smbIsScheduledOff
+        override.smbIsAlwaysOff = smbIsAlwaysOff
         override.start = start.map { NSDecimalNumber(decimal: $0) }
         override.end = end.map { NSDecimalNumber(decimal: $0) }
         override.isfAndCr = isfAndCr
@@ -361,7 +361,7 @@ struct EditOverrideForm: View {
         target = override.target?.decimalValue
         advancedSettings = override.advancedSettings
         smbIsOff = override.smbIsOff
-        smbIsScheduledOff = override.smbIsScheduledOff
+        smbIsAlwaysOff = override.smbIsAlwaysOff
         start = override.start?.decimalValue
         end = override.end?.decimalValue
         isfAndCr = override.isfAndCr

+ 1 - 1
FreeAPS/Sources/Modules/OverrideConfig/View/OverrideRootView.swift

@@ -467,7 +467,7 @@ extension OverrideConfig {
             let percent = preset.percentage / 100
             let perpetual = preset.indefinite
             let durationString = perpetual ? "" : "\(formatter.string(from: duration as NSNumber)!)"
-            let scheduledSMBstring = (preset.smbIsOff && preset.smbIsScheduledOff) ? "Scheduled SMBs" : ""
+            let scheduledSMBstring = (preset.smbIsOff && preset.smbIsAlwaysOff) ? "Scheduled SMBs" : ""
             let smbString = (preset.smbIsOff && scheduledSMBstring == "") ? "SMBs are off" : ""
             let targetString = target != 0 ? target.description : ""
             let maxMinutesSMB = (preset.smbMinutes as Decimal?) != nil ? (preset.smbMinutes ?? 0) as Decimal : 0

+ 1 - 1
Model/Classes+Properties/OverrideStored+CoreDataProperties.swift

@@ -21,8 +21,8 @@ public extension OverrideStored {
     @NSManaged var name: String?
     @NSManaged var orderPosition: Int16
     @NSManaged var percentage: Double
+    @NSManaged var smbIsAlwaysOff: Bool
     @NSManaged var smbIsOff: Bool
-    @NSManaged var smbIsScheduledOff: Bool
     @NSManaged var smbMinutes: NSDecimalNumber?
     @NSManaged var start: NSDecimalNumber?
     @NSManaged var target: NSDecimalNumber?

+ 2 - 2
Model/TrioCoreDataPersistentContainer.xcdatamodeld/TrioCoreDataPersistentContainer.xcdatamodel/contents

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="23231" systemVersion="23G93" minimumToolsVersion="Automatic" sourceLanguage="Swift" usedWithSwiftData="YES" userDefinedModelVersionIdentifier="">
+<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="23231" systemVersion="24A335" minimumToolsVersion="Automatic" sourceLanguage="Swift" usedWithSwiftData="YES" userDefinedModelVersionIdentifier="">
     <entity name="BolusStored" representedClassName="BolusStored" syncable="YES">
         <attribute name="amount" optional="YES" attributeType="Decimal" defaultValueString="0"/>
         <attribute name="isExternal" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
@@ -152,8 +152,8 @@
         <attribute name="name" optional="YES" attributeType="String"/>
         <attribute name="orderPosition" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="YES"/>
         <attribute name="percentage" optional="YES" attributeType="Double" defaultValueString="100" usesScalarValueType="YES"/>
+        <attribute name="smbIsAlwaysOff" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
         <attribute name="smbIsOff" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
-        <attribute name="smbIsScheduledOff" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
         <attribute name="smbMinutes" optional="YES" attributeType="Decimal" defaultValueString="30"/>
         <attribute name="start" optional="YES" attributeType="Decimal" defaultValueString="0.0"/>
         <attribute name="target" optional="YES" attributeType="Decimal" defaultValueString="0"/>