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

Merge pull request #120 from MikePlante1/disable-smb-schedule

Rename smbIsAlwaysOff to smbIsScheduledOff (alpha)
bjornoleh 2 лет назад
Родитель
Сommit
aa55271758

+ 3 - 3
Core_Data.xcdatamodeld/Core_Data.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="21754" systemVersion="22F82" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
+<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="22757" systemVersion="23E224" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
     <entity name="BGaverages" representedClassName="BGaverages" syncable="YES" codeGenerationType="class">
         <attribute name="average" optional="YES" attributeType="Decimal" defaultValueString="0.0"/>
         <attribute name="average_1" optional="YES" attributeType="Decimal" defaultValueString="0.0"/>
@@ -66,8 +66,8 @@
         <attribute name="isfAndCr" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
         <attribute name="isPreset" optional="YES" attributeType="Boolean" defaultValueString="NO" 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="100"/>
@@ -85,8 +85,8 @@
         <attribute name="isfAndCr" optional="YES" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES"/>
         <attribute name="name" optional="YES" attributeType="String"/>
         <attribute name="percentage" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="YES"/>
-        <attribute name="smbIsAlwaysOff" optional="YES" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
         <attribute name="smbIsOff" optional="YES" attributeType="Boolean" 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.0"/>

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
FreeAPS/Resources/javascript/bundle/determine-basal.js


+ 2 - 2
FreeAPS/Sources/APS/OpenAPS/OpenAPS.swift

@@ -259,7 +259,7 @@ final class OpenAPS {
                     isfAndCr: overrideArray.first?.isfAndCr ?? false,
                     isf: overrideArray.first?.isf ?? false,
                     cr: overrideArray.first?.cr ?? false,
-                    smbIsAlwaysOff: overrideArray.first?.smbIsAlwaysOff ?? false,
+                    smbIsScheduledOff: overrideArray.first?.smbIsScheduledOff ?? false,
                     start: (overrideArray.first?.start ?? 0) as Decimal,
                     end: (overrideArray.first?.end ?? 0) as Decimal,
                     smbMinutes: (overrideArray.first?.smbMinutes ?? smbMinutes) as Decimal,
@@ -287,7 +287,7 @@ final class OpenAPS {
                     isfAndCr: overrideArray.first?.isfAndCr ?? false,
                     isf: overrideArray.first?.isf ?? false,
                     cr: overrideArray.first?.cr ?? false,
-                    smbIsAlwaysOff: overrideArray.first?.smbIsAlwaysOff ?? false,
+                    smbIsScheduledOff: overrideArray.first?.smbIsScheduledOff ?? false,
                     start: (overrideArray.first?.start ?? 0) as Decimal,
                     end: (overrideArray.first?.end ?? 0) as Decimal,
                     smbMinutes: (overrideArray.first?.smbMinutes ?? smbMinutes) as Decimal,

+ 4 - 4
FreeAPS/Sources/Models/Oref2_variables.swift

@@ -18,7 +18,7 @@ struct Oref2_variables: JSON, Equatable {
     var isfAndCr: Bool
     var isf: Bool
     var cr: Bool
-    var smbIsAlwaysOff: Bool
+    var smbIsScheduledOff: Bool
     var start: Decimal
     var end: Decimal
     var smbMinutes: Decimal
@@ -42,7 +42,7 @@ struct Oref2_variables: JSON, Equatable {
         isfAndCr: Bool,
         isf: Bool,
         cr: Bool,
-        smbIsAlwaysOff: Bool,
+        smbIsScheduledOff: Bool,
         start: Decimal,
         end: Decimal,
         smbMinutes: Decimal,
@@ -65,7 +65,7 @@ struct Oref2_variables: JSON, Equatable {
         self.isfAndCr = isfAndCr
         self.isf = isf
         self.cr = cr
-        self.smbIsAlwaysOff = smbIsAlwaysOff
+        self.smbIsScheduledOff = smbIsScheduledOff
         self.start = start
         self.end = end
         self.smbMinutes = smbMinutes
@@ -92,7 +92,7 @@ extension Oref2_variables {
         case isfAndCr
         case isf
         case cr
-        case smbIsAlwaysOff
+        case smbIsScheduledOff
         case start
         case end
         case smbMinutes

+ 16 - 26
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -243,35 +243,25 @@ extension Home {
                         ""
                 )
 
-            let smbToggleString = (fetchedPercent.first?.smbIsOff ?? false) ? " \u{20e0}" : ""
-            var comma1 = ", "
-            var comma2 = comma1
-            var comma3 = comma1
-            if targetString == "" || percentString == "" { comma1 = "" }
-            if durationString == "" { comma2 = "" }
-            if smbToggleString == "" { comma3 = "" }
-
-            if percentString == "", targetString == "" {
-                comma1 = ""
-                comma2 = ""
-            }
-            if percentString == "", targetString == "", smbToggleString == "" {
-                durationString = ""
-                comma1 = ""
-                comma2 = ""
-                comma3 = ""
-            }
-            if durationString == "" {
-                comma2 = ""
-            }
-            if smbToggleString == "" {
-                comma3 = ""
-            }
-
             if durationString == "", !indefinite {
                 return nil
             }
-            return percentString + comma1 + targetString + comma2 + durationString + comma3 + smbToggleString
+
+            let smbToggleString = (
+                (fetchedPercent.first?.smbIsOff ?? false) || fetchedPercent.first?.smbIsScheduledOff ?? false
+            ) ?
+                " \u{20e0}" : ""
+            let smbScheduleString = (fetchedPercent.first?.smbIsScheduledOff ?? false) &&
+                !(fetchedPercent.first?.smbIsOff ?? false) ?
+                " \(fetchedPercent.first?.start ?? 0)-\(fetchedPercent.first?.end ?? 0)" : ""
+            let comma1 = (percentString == "" || (targetString == "" && durationString == "" && smbToggleString == ""))
+                ? "" : " , "
+            let comma2 = (targetString == "" || (durationString == "" && smbToggleString == ""))
+                ? "" : " , "
+            let comma3 = (durationString == "" || smbToggleString == "")
+                ? "" : " , "
+
+            return percentString + comma1 + targetString + comma2 + durationString + comma3 + smbToggleString + smbScheduleString
         }
 
         var infoPanel: some View {

+ 12 - 12
FreeAPS/Sources/Modules/OverrideProfilesConfig/OverrideProfilesStateModel.swift

@@ -19,7 +19,7 @@ extension OverrideProfilesConfig {
         @Published var isfAndCr: Bool = true
         @Published var isf: Bool = true
         @Published var cr: Bool = true
-        @Published var smbIsAlwaysOff: Bool = false
+        @Published var smbIsScheduledOff: Bool = false
         @Published var start: Decimal = 0
         @Published var end: Decimal = 23
         @Published var smbMinutes: Decimal = 0
@@ -66,11 +66,11 @@ extension OverrideProfilesConfig {
                         saveOverride.isf = isf
                         saveOverride.cr = cr
                     } else { saveOverride.isfAndCr = true }
-                    if smbIsAlwaysOff {
-                        saveOverride.smbIsAlwaysOff = true
+                    if smbIsScheduledOff {
+                        saveOverride.smbIsScheduledOff = true
                         saveOverride.start = start as NSDecimalNumber
                         saveOverride.end = end as NSDecimalNumber
-                    } else { saveOverride.smbIsAlwaysOff = false }
+                    } else { saveOverride.smbIsScheduledOff = false }
 
                     saveOverride.smbMinutes = smbMinutes as NSDecimalNumber
                     saveOverride.uamMinutes = uamMinutes as NSDecimalNumber
@@ -107,11 +107,11 @@ extension OverrideProfilesConfig {
                         saveOverride.isf = isf
                         saveOverride.cr = cr
                     } else { saveOverride.isfAndCr = true }
-                    if smbIsAlwaysOff {
-                        saveOverride.smbIsAlwaysOff = true
+                    if smbIsScheduledOff {
+                        saveOverride.smbIsScheduledOff = true
                         saveOverride.start = start as NSDecimalNumber
                         saveOverride.end = end as NSDecimalNumber
-                    } else { smbIsAlwaysOff = false }
+                    } else { smbIsScheduledOff = false }
 
                     saveOverride.smbMinutes = smbMinutes as NSDecimalNumber
                     saveOverride.uamMinutes = uamMinutes as NSDecimalNumber
@@ -147,11 +147,11 @@ extension OverrideProfilesConfig {
                         saveOverride.isf = profile.isf
                         saveOverride.cr = profile.cr
                     } else { saveOverride.isfAndCr = true }
-                    if profile.smbIsAlwaysOff {
-                        saveOverride.smbIsAlwaysOff = true
+                    if profile.smbIsScheduledOff {
+                        saveOverride.smbIsScheduledOff = true
                         saveOverride.start = profile.start
                         saveOverride.end = profile.end
-                    } else { saveOverride.smbIsAlwaysOff = false }
+                    } else { saveOverride.smbIsScheduledOff = false }
 
                     saveOverride.smbMinutes = (profile.smbMinutes ?? 0) as NSDecimalNumber
                     saveOverride.uamMinutes = (profile.uamMinutes ?? 0) as NSDecimalNumber
@@ -175,14 +175,14 @@ extension OverrideProfilesConfig {
                 smbIsOff = overrideArray.first?.smbIsOff ?? false
                 advancedSettings = overrideArray.first?.advancedSettings ?? false
                 isfAndCr = overrideArray.first?.isfAndCr ?? true
-                smbIsAlwaysOff = overrideArray.first?.smbIsAlwaysOff ?? false
+                smbIsScheduledOff = overrideArray.first?.smbIsScheduledOff ?? false
 
                 if advancedSettings {
                     if !isfAndCr {
                         isf = overrideArray.first?.isf ?? false
                         cr = overrideArray.first?.cr ?? false
                     }
-                    if smbIsAlwaysOff {
+                    if smbIsScheduledOff {
                         start = (overrideArray.first?.start ?? 0) as Decimal
                         end = (overrideArray.first?.end ?? 0) as Decimal
                     }

+ 23 - 22
FreeAPS/Sources/Modules/OverrideProfilesConfig/View/OverrideProfilesRootView.swift

@@ -120,24 +120,26 @@ extension OverrideProfilesConfig {
                     if state.advancedSettings {
                         HStack {
                             Toggle(isOn: $state.smbIsOff) {
-                                Text("Disable SMBs")
+                                Text("Always Disable SMBs")
                             }
                         }
-                        HStack {
-                            Toggle(isOn: $state.smbIsAlwaysOff) {
-                                Text("Schedule when SMBs are Off")
-                            }.disabled(!state.smbIsOff)
-                        }
-                        if state.smbIsAlwaysOff {
+                        if !state.smbIsOff {
                             HStack {
-                                Text("First Hour SMBs are Off (24 hours)")
-                                DecimalTextField("0", value: $state.start, formatter: formatter, cleanInput: false)
-                                Text("hour").foregroundColor(.secondary)
+                                Toggle(isOn: $state.smbIsScheduledOff) {
+                                    Text("Schedule when SMBs are Off")
+                                }
                             }
-                            HStack {
-                                Text("Last Hour SMBs are Off (24 hours)")
-                                DecimalTextField("0", value: $state.end, formatter: formatter, cleanInput: false)
-                                Text("hour").foregroundColor(.secondary)
+                            if state.smbIsScheduledOff {
+                                HStack {
+                                    Text("First Hour SMBs are Off (24 hours)")
+                                    DecimalTextField("0", value: $state.start, formatter: formatter, cleanInput: false)
+                                    Text("hour").foregroundColor(.secondary)
+                                }
+                                HStack {
+                                    Text("First Hour SMBs are Resumed (24 hours)")
+                                    DecimalTextField("0", value: $state.end, formatter: formatter, cleanInput: false)
+                                    Text("hour").foregroundColor(.secondary)
+                                }
                             }
                         }
                         HStack {
@@ -281,7 +283,7 @@ extension OverrideProfilesConfig {
             let percent = preset.percentage / 100
             let perpetual = preset.indefinite
             let durationString = perpetual ? "" : "\(formatter.string(from: duration as NSNumber)!)"
-            let scheduledSMBstring = (preset.smbIsOff && preset.smbIsAlwaysOff) ? "Scheduled SMBs" : ""
+            let scheduledSMBstring = (preset.smbIsOff && preset.smbIsScheduledOff) ? "Scheduled SMBs" : ""
             let smbString = (preset.smbIsOff && scheduledSMBstring == "") ? "SMBs are off" : ""
             let targetString = target != 0 ? "\(glucoseFormatter.string(from: target as NSNumber)!)" : ""
             let maxMinutesSMB = (preset.smbMinutes as Decimal?) != nil ? (preset.smbMinutes ?? 0) as Decimal : 0
@@ -328,14 +330,13 @@ extension OverrideProfilesConfig {
         }
 
         private func unChanged() -> Bool {
-            let isChanged = (state.percentage == 100 && !state.override_target && !state.smbIsOff && !state.advancedSettings) ||
-                (!state._indefinite && state.duration == 0) || (state.override_target && state.target == 0) ||
-                (
-                    state.percentage == 100 && !state.override_target && !state.smbIsOff && state.isf && state.cr && state
-                        .smbMinutes == state.defaultSmbMinutes && state.uamMinutes == state.defaultUamMinutes
-                )
+            let defaultProfile = state.percentage == 100 && !state.override_target && !state.advancedSettings
+            let noDurationSpecified = !state._indefinite && state.duration == 0
+            let targetZeroWithOverride = state.override_target && state.target == 0
+            let allSettingsDefault = state.percentage == 100 && !state.override_target && !state.smbIsOff && !state
+                .smbIsScheduledOff && state.smbMinutes == state.defaultSmbMinutes && state.uamMinutes == state.defaultUamMinutes
 
-            return isChanged
+            return defaultProfile || noDurationSpecified || targetZeroWithOverride || allSettingsDefault
         }
 
         private func removeProfile(at offsets: IndexSet) {

+ 4 - 4
open-iaps-oref/lib/determine-basal/determine-basal.js

@@ -45,7 +45,7 @@ function convert_bg(value, profile)
     }
 }
 function enable_smb(profile, microBolusAllowed, meal_data, bg, target_bg, high_bg, oref_variables, time) {
-    if (oref_variables.smbIsOff){
+    if (oref_variables.smbIsScheduledOff){
         /* Below logic is related to profile overrides which can disable SMBs or disable them for a scheduled window.
          * SMBs will be disabled from [start, end), such that if an SMB is scheduled to be disabled from 10 AM to 2 PM,
          * an SMB will not be allowed from 10:00:00 until 1:59:59.
@@ -154,7 +154,7 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
     const isfAndCr = oref2_variables.isfAndCr;
     const isf = oref2_variables.isf;
     const cr_ = oref2_variables.cr;
-    const smbIsAlwaysOff = oref2_variables.smbIsAlwaysOff;
+    const smbIsScheduledOff = oref2_variables.smbIsScheduledOff;
     const start = oref2_variables.start;
     var end = oref2_variables.end;
     const smbMinutes = oref2_variables.smbMinutes;
@@ -1019,7 +1019,7 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
     threshold = min_bg - 0.5*(min_bg-40);
     // Set threshold to the user's setting, as long as it's between 60-120 and above the default calculated threshold
     threshold = Math.min(Math.max(profile.threshold_setting, threshold, 60), 120);
-    console.error("Threshold set to ${convert_bg(threshold, profile)}");
+    console.error(`Threshold set to ${convert_bg(threshold, profile)}`);
 
 // If iob_data or its required properties are missing, return.
 // This has to be checked after checking that we're not in one of the CGM-data-related error conditions handled above,
@@ -1162,7 +1162,7 @@ var determine_basal = function determine_basal(glucose_status, currenttemp, iob_
     let enableSMB = false;
 
     // If SMB is always off, don't bother checking if we should enable SMBs
-    if (smbIsAlwaysOff) {
+    if (smbIsOff) {
         console.error("SMBs are always off.");
         enableSMB = false;
     } else {

+ 5 - 1
oref0_source_version.txt

@@ -1,6 +1,10 @@
-oref0 branch: dev - git version: b89a39b
+oref0 branch: dev - git version: 5774155
 
 Last commits:
+5774155 Merge pull request #20 from MikePlante1/disable_smb_schedule
+e3a8d73 Merge pull request #17 from MikePlante1/console_error_refactor
+a29d9ce rename smbIsAlwaysOff to smbIsScheduledOff
+d898eb1 fix threshold console.error
 b89a39b Merge pull request #16 from bjornoleh/webpack-update
 b8aaf93 Merge pull request #15 from avouspierre/dev
 4aba4e0 webpack-cp.sh: git log --since=2024-01-01