Ver código fonte

Remove PumpSettingsEditor and move settings
* Move MaxBolus and MaxBasal to General Settings > Units and Limits
* Move DIA setting to Algorithm Settings > Additionals
* Remove the (now) obsolete PumpSettingsEditor module
* Make all necessary adjustements

Deniz Cengiz 1 ano atrás
pai
commit
0cbbdeb495

+ 0 - 32
FreeAPS.xcodeproj/project.pbxproj

@@ -60,7 +60,6 @@
 		1BBB001DAD60F3B8CEA4B1C7 /* ISFEditorStateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 505E09DC17A0C3D0AF4B66FE /* ISFEditorStateModel.swift */; };
 		1BBB001DAD60F3B8CEA4B1C7 /* ISFEditorStateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 505E09DC17A0C3D0AF4B66FE /* ISFEditorStateModel.swift */; };
 		1D845DF2E3324130E1D95E67 /* DataTableProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60744C3E9BB3652895C908CC /* DataTableProvider.swift */; };
 		1D845DF2E3324130E1D95E67 /* DataTableProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60744C3E9BB3652895C908CC /* DataTableProvider.swift */; };
 		23888883D4EA091C88480FF2 /* BolusProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C19984D62EFC0035A9E9644D /* BolusProvider.swift */; };
 		23888883D4EA091C88480FF2 /* BolusProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C19984D62EFC0035A9E9644D /* BolusProvider.swift */; };
-		2BE9A6FA20875F6F4F9CD461 /* PumpSettingsEditorProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D97F14812C1AFED3621165A5 /* PumpSettingsEditorProvider.swift */; };
 		3083261C4B268E353F36CD0B /* AutotuneConfigDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DCCCCE633F5E98E41B0CD3C /* AutotuneConfigDataFlow.swift */; };
 		3083261C4B268E353F36CD0B /* AutotuneConfigDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DCCCCE633F5E98E41B0CD3C /* AutotuneConfigDataFlow.swift */; };
 		3171D2818C7C72CD1584BB5E /* GlucoseNotificationSettingsStateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2C6489D29ECCCAD78E0721 /* GlucoseNotificationSettingsStateModel.swift */; };
 		3171D2818C7C72CD1584BB5E /* GlucoseNotificationSettingsStateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2C6489D29ECCCAD78E0721 /* GlucoseNotificationSettingsStateModel.swift */; };
 		320D030F724170A637F06D50 /* (null) in Sources */ = {isa = PBXBuildFile; };
 		320D030F724170A637F06D50 /* (null) in Sources */ = {isa = PBXBuildFile; };
@@ -235,7 +234,6 @@
 		38FEF3FC2737E53800574A46 /* MainStateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38FEF3FB2737E53800574A46 /* MainStateModel.swift */; };
 		38FEF3FC2737E53800574A46 /* MainStateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38FEF3FB2737E53800574A46 /* MainStateModel.swift */; };
 		38FEF3FE2738083E00574A46 /* CGMProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38FEF3FD2738083E00574A46 /* CGMProvider.swift */; };
 		38FEF3FE2738083E00574A46 /* CGMProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38FEF3FD2738083E00574A46 /* CGMProvider.swift */; };
 		38FEF413273B317A00574A46 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38FEF412273B317A00574A46 /* HKUnit.swift */; };
 		38FEF413273B317A00574A46 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38FEF412273B317A00574A46 /* HKUnit.swift */; };
-		448B6FCB252BD4796E2960C0 /* PumpSettingsEditorDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0274EE6439B1C3ED70730D41 /* PumpSettingsEditorDataFlow.swift */; };
 		45252C95D220E796FDB3B022 /* ConfigEditorDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8A87AA037BD079BA3528BA /* ConfigEditorDataFlow.swift */; };
 		45252C95D220E796FDB3B022 /* ConfigEditorDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8A87AA037BD079BA3528BA /* ConfigEditorDataFlow.swift */; };
 		45717281F743594AA9D87191 /* ConfigEditorRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 920DDB21E5D0EB813197500D /* ConfigEditorRootView.swift */; };
 		45717281F743594AA9D87191 /* ConfigEditorRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 920DDB21E5D0EB813197500D /* ConfigEditorRootView.swift */; };
 		5075C1608E6249A51495C422 /* TargetsEditorProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDEA2DC60EDE0A3CA54DC73 /* TargetsEditorProvider.swift */; };
 		5075C1608E6249A51495C422 /* TargetsEditorProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDEA2DC60EDE0A3CA54DC73 /* TargetsEditorProvider.swift */; };
@@ -271,7 +269,6 @@
 		6B1A8D282B14D91700E76752 /* LiveActivityExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 6B1A8D172B14D91600E76752 /* LiveActivityExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		6B1A8D282B14D91700E76752 /* LiveActivityExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 6B1A8D172B14D91600E76752 /* LiveActivityExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		6B1A8D2E2B156EEF00E76752 /* LiveActivityBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B1A8D2D2B156EEF00E76752 /* LiveActivityBridge.swift */; };
 		6B1A8D2E2B156EEF00E76752 /* LiveActivityBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B1A8D2D2B156EEF00E76752 /* LiveActivityBridge.swift */; };
 		6B1F539F9FF75646D1606066 /* SnoozeDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36A708CDB546692C2230B385 /* SnoozeDataFlow.swift */; };
 		6B1F539F9FF75646D1606066 /* SnoozeDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36A708CDB546692C2230B385 /* SnoozeDataFlow.swift */; };
-		6B9625766B697D1C98E455A2 /* PumpSettingsEditorStateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72778B68C3004F71F6E79BDC /* PumpSettingsEditorStateModel.swift */; };
 		6BCF84DD2B16843A003AD46E /* LiveActitiyAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BCF84DC2B16843A003AD46E /* LiveActitiyAttributes.swift */; };
 		6BCF84DD2B16843A003AD46E /* LiveActitiyAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BCF84DC2B16843A003AD46E /* LiveActitiyAttributes.swift */; };
 		6BCF84DE2B16843A003AD46E /* LiveActitiyAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BCF84DC2B16843A003AD46E /* LiveActitiyAttributes.swift */; };
 		6BCF84DE2B16843A003AD46E /* LiveActitiyAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BCF84DC2B16843A003AD46E /* LiveActitiyAttributes.swift */; };
 		6EADD581738D64431902AC0A /* (null) in Sources */ = {isa = PBXBuildFile; };
 		6EADD581738D64431902AC0A /* (null) in Sources */ = {isa = PBXBuildFile; };
@@ -288,7 +285,6 @@
 		9825E5E923F0B8FA80C8C7C7 /* NightscoutConfigStateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A48AE3AC813A49A517846A /* NightscoutConfigStateModel.swift */; };
 		9825E5E923F0B8FA80C8C7C7 /* NightscoutConfigStateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A48AE3AC813A49A517846A /* NightscoutConfigStateModel.swift */; };
 		98641AF4F92123DA668AB931 /* CarbRatioEditorRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BDC6993C1087310EDFC428 /* CarbRatioEditorRootView.swift */; };
 		98641AF4F92123DA668AB931 /* CarbRatioEditorRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BDC6993C1087310EDFC428 /* CarbRatioEditorRootView.swift */; };
 		A05235B9112E677ED03B6E8E /* AutotuneConfigRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CF5ACEE1F0859670E71B2C0 /* AutotuneConfigRootView.swift */; };
 		A05235B9112E677ED03B6E8E /* AutotuneConfigRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CF5ACEE1F0859670E71B2C0 /* AutotuneConfigRootView.swift */; };
-		A0B8EC8CC5CD1DD237D1BCD2 /* PumpSettingsEditorRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8C7F882606FF83A21BE00D8 /* PumpSettingsEditorRootView.swift */; };
 		A33352ED40476125EBAC6EE0 /* CarbRatioEditorDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E22146D3DF4853786C78132 /* CarbRatioEditorDataFlow.swift */; };
 		A33352ED40476125EBAC6EE0 /* CarbRatioEditorDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E22146D3DF4853786C78132 /* CarbRatioEditorDataFlow.swift */; };
 		AD3D2CD42CD01B9EB8F26522 /* PumpConfigDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF65DA88F972B56090AD6AC3 /* PumpConfigDataFlow.swift */; };
 		AD3D2CD42CD01B9EB8F26522 /* PumpConfigDataFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF65DA88F972B56090AD6AC3 /* PumpConfigDataFlow.swift */; };
 		B7C465E9472624D8A2BE2A6A /* (null) in Sources */ = {isa = PBXBuildFile; };
 		B7C465E9472624D8A2BE2A6A /* (null) in Sources */ = {isa = PBXBuildFile; };
@@ -590,7 +586,6 @@
 /* End PBXCopyFilesBuildPhase section */
 /* End PBXCopyFilesBuildPhase section */
 
 
 /* Begin PBXFileReference section */
 /* Begin PBXFileReference section */
-		0274EE6439B1C3ED70730D41 /* PumpSettingsEditorDataFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PumpSettingsEditorDataFlow.swift; sourceTree = "<group>"; };
 		110AEDE02C5193D100615CC9 /* BolusIntent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BolusIntent.swift; sourceTree = "<group>"; };
 		110AEDE02C5193D100615CC9 /* BolusIntent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BolusIntent.swift; sourceTree = "<group>"; };
 		110AEDE12C5193D100615CC9 /* BolusIntentRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BolusIntentRequest.swift; sourceTree = "<group>"; };
 		110AEDE12C5193D100615CC9 /* BolusIntentRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BolusIntentRequest.swift; sourceTree = "<group>"; };
 		110AEDE52C51A0AE00615CC9 /* ShortcutsConfigView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShortcutsConfigView.swift; sourceTree = "<group>"; };
 		110AEDE52C51A0AE00615CC9 /* ShortcutsConfigView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShortcutsConfigView.swift; sourceTree = "<group>"; };
@@ -913,7 +908,6 @@
 		6B1A8D252B14D91700E76752 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		6B1A8D252B14D91700E76752 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		6B1A8D2D2B156EEF00E76752 /* LiveActivityBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityBridge.swift; sourceTree = "<group>"; };
 		6B1A8D2D2B156EEF00E76752 /* LiveActivityBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityBridge.swift; sourceTree = "<group>"; };
 		6BCF84DC2B16843A003AD46E /* LiveActitiyAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActitiyAttributes.swift; sourceTree = "<group>"; };
 		6BCF84DC2B16843A003AD46E /* LiveActitiyAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActitiyAttributes.swift; sourceTree = "<group>"; };
-		72778B68C3004F71F6E79BDC /* PumpSettingsEditorStateModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PumpSettingsEditorStateModel.swift; sourceTree = "<group>"; };
 		79BDA519C9B890FD9A5DFCF3 /* ISFEditorDataFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ISFEditorDataFlow.swift; sourceTree = "<group>"; };
 		79BDA519C9B890FD9A5DFCF3 /* ISFEditorDataFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ISFEditorDataFlow.swift; sourceTree = "<group>"; };
 		7E22146D3DF4853786C78132 /* CarbRatioEditorDataFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CarbRatioEditorDataFlow.swift; sourceTree = "<group>"; };
 		7E22146D3DF4853786C78132 /* CarbRatioEditorDataFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CarbRatioEditorDataFlow.swift; sourceTree = "<group>"; };
 		8782B44544F38F2B2D82C38E /* NightscoutConfigRootView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NightscoutConfigRootView.swift; sourceTree = "<group>"; };
 		8782B44544F38F2B2D82C38E /* NightscoutConfigRootView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NightscoutConfigRootView.swift; sourceTree = "<group>"; };
@@ -932,7 +926,6 @@
 		AF65DA88F972B56090AD6AC3 /* PumpConfigDataFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PumpConfigDataFlow.swift; sourceTree = "<group>"; };
 		AF65DA88F972B56090AD6AC3 /* PumpConfigDataFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PumpConfigDataFlow.swift; sourceTree = "<group>"; };
 		B5822B15939E719628E9FF7C /* SnoozeRootView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SnoozeRootView.swift; sourceTree = "<group>"; };
 		B5822B15939E719628E9FF7C /* SnoozeRootView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SnoozeRootView.swift; sourceTree = "<group>"; };
 		B5EF98E22A39CD656A230704 /* AutotuneConfigProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AutotuneConfigProvider.swift; sourceTree = "<group>"; };
 		B5EF98E22A39CD656A230704 /* AutotuneConfigProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AutotuneConfigProvider.swift; sourceTree = "<group>"; };
-		B8C7F882606FF83A21BE00D8 /* PumpSettingsEditorRootView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PumpSettingsEditorRootView.swift; sourceTree = "<group>"; };
 		B9B5C0607505A38F256BF99A /* CGMDataFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CGMDataFlow.swift; sourceTree = "<group>"; };
 		B9B5C0607505A38F256BF99A /* CGMDataFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CGMDataFlow.swift; sourceTree = "<group>"; };
 		B9CAAEFB2AE70836000F68BC /* branch.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = branch.txt; sourceTree = SOURCE_ROOT; };
 		B9CAAEFB2AE70836000F68BC /* branch.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = branch.txt; sourceTree = SOURCE_ROOT; };
 		BA49538D56989D8DA6FCF538 /* TargetsEditorDataFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TargetsEditorDataFlow.swift; sourceTree = "<group>"; };
 		BA49538D56989D8DA6FCF538 /* TargetsEditorDataFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TargetsEditorDataFlow.swift; sourceTree = "<group>"; };
@@ -1029,7 +1022,6 @@
 		CFCFE0781F9074C2917890E8 /* ManualTempBasalStateModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ManualTempBasalStateModel.swift; sourceTree = "<group>"; };
 		CFCFE0781F9074C2917890E8 /* ManualTempBasalStateModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ManualTempBasalStateModel.swift; sourceTree = "<group>"; };
 		D0BDC6993C1087310EDFC428 /* CarbRatioEditorRootView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CarbRatioEditorRootView.swift; sourceTree = "<group>"; };
 		D0BDC6993C1087310EDFC428 /* CarbRatioEditorRootView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CarbRatioEditorRootView.swift; sourceTree = "<group>"; };
 		D295A3F870E826BE371C0BB5 /* AutotuneConfigStateModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AutotuneConfigStateModel.swift; sourceTree = "<group>"; };
 		D295A3F870E826BE371C0BB5 /* AutotuneConfigStateModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AutotuneConfigStateModel.swift; sourceTree = "<group>"; };
-		D97F14812C1AFED3621165A5 /* PumpSettingsEditorProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PumpSettingsEditorProvider.swift; sourceTree = "<group>"; };
 		DC2C6489D29ECCCAD78E0721 /* GlucoseNotificationSettingsStateModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GlucoseNotificationSettingsStateModel.swift; sourceTree = "<group>"; };
 		DC2C6489D29ECCCAD78E0721 /* GlucoseNotificationSettingsStateModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GlucoseNotificationSettingsStateModel.swift; sourceTree = "<group>"; };
 		DD09D47A2C5986D1003FEA5D /* CalendarEventSettingsDataFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarEventSettingsDataFlow.swift; sourceTree = "<group>"; };
 		DD09D47A2C5986D1003FEA5D /* CalendarEventSettingsDataFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarEventSettingsDataFlow.swift; sourceTree = "<group>"; };
 		DD09D47C2C5986DA003FEA5D /* CalendarEventSettingsProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarEventSettingsProvider.swift; sourceTree = "<group>"; };
 		DD09D47C2C5986DA003FEA5D /* CalendarEventSettingsProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarEventSettingsProvider.swift; sourceTree = "<group>"; };
@@ -1442,7 +1434,6 @@
 				D533BF261CDC1C3F871E7BFD /* NightscoutConfig */,
 				D533BF261CDC1C3F871E7BFD /* NightscoutConfig */,
 				DDD163032C4C67B400CD525A /* OverrideConfig */,
 				DDD163032C4C67B400CD525A /* OverrideConfig */,
 				99C01B871ACAB3F32CE755C7 /* PumpConfig */,
 				99C01B871ACAB3F32CE755C7 /* PumpConfig */,
-				E493126EA71765130F64CCE5 /* PumpSettingsEditor */,
 				3811DE3825C9D4A100A708ED /* Settings */,
 				3811DE3825C9D4A100A708ED /* Settings */,
 				110AEDEA2C51A0AE00615CC9 /* ShortcutsConfig */,
 				110AEDEA2C51A0AE00615CC9 /* ShortcutsConfig */,
 				DD17451E2C55520000211FAC /* SMBSettings */,
 				DD17451E2C55520000211FAC /* SMBSettings */,
@@ -2215,14 +2206,6 @@
 			path = Model;
 			path = Model;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
 		};
 		};
-		64271A287C92581EADCB47FA /* View */ = {
-			isa = PBXGroup;
-			children = (
-				B8C7F882606FF83A21BE00D8 /* PumpSettingsEditorRootView.swift */,
-			);
-			path = View;
-			sourceTree = "<group>";
-		};
 		6517011F19F244F64E1FF14B /* TargetsEditor */ = {
 		6517011F19F244F64E1FF14B /* TargetsEditor */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
@@ -2724,17 +2707,6 @@
 			path = CarbRatioEditor;
 			path = CarbRatioEditor;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
 		};
 		};
-		E493126EA71765130F64CCE5 /* PumpSettingsEditor */ = {
-			isa = PBXGroup;
-			children = (
-				0274EE6439B1C3ED70730D41 /* PumpSettingsEditorDataFlow.swift */,
-				D97F14812C1AFED3621165A5 /* PumpSettingsEditorProvider.swift */,
-				72778B68C3004F71F6E79BDC /* PumpSettingsEditorStateModel.swift */,
-				64271A287C92581EADCB47FA /* View */,
-			);
-			path = PumpSettingsEditor;
-			sourceTree = "<group>";
-		};
 		EEC747824D6593B5CD87E195 /* View */ = {
 		EEC747824D6593B5CD87E195 /* View */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
@@ -3395,12 +3367,8 @@
 				581AC4392BE22ED10038760C /* JSONConverter.swift in Sources */,
 				581AC4392BE22ED10038760C /* JSONConverter.swift in Sources */,
 				CE7CA3522A064973004BE681 /* ListTempPresetsIntent.swift in Sources */,
 				CE7CA3522A064973004BE681 /* ListTempPresetsIntent.swift in Sources */,
 				BD4064D12C4ED26900582F43 /* CoreDataObserver.swift in Sources */,
 				BD4064D12C4ED26900582F43 /* CoreDataObserver.swift in Sources */,
-				448B6FCB252BD4796E2960C0 /* PumpSettingsEditorDataFlow.swift in Sources */,
 				38E44536274E411700EC9A94 /* Disk.swift in Sources */,
 				38E44536274E411700EC9A94 /* Disk.swift in Sources */,
-				2BE9A6FA20875F6F4F9CD461 /* PumpSettingsEditorProvider.swift in Sources */,
-				6B9625766B697D1C98E455A2 /* PumpSettingsEditorStateModel.swift in Sources */,
 				19A910362A24D6D700C8951B /* DateFilter.swift in Sources */,
 				19A910362A24D6D700C8951B /* DateFilter.swift in Sources */,
-				A0B8EC8CC5CD1DD237D1BCD2 /* PumpSettingsEditorRootView.swift in Sources */,
 				E06B911A275B5EEA003C04B6 /* Array+Extension.swift in Sources */,
 				E06B911A275B5EEA003C04B6 /* Array+Extension.swift in Sources */,
 				38EA0600262091870064E39B /* BolusProgressViewStyle.swift in Sources */,
 				38EA0600262091870064E39B /* BolusProgressViewStyle.swift in Sources */,
 				389ECDFE2601061500D86C4F /* View+Snapshot.swift in Sources */,
 				389ECDFE2601061500D86C4F /* View+Snapshot.swift in Sources */,

+ 2 - 2
FreeAPS/Sources/Models/DecimalPickerSettings.swift

@@ -136,8 +136,8 @@ struct DecimalPickerSettings {
     var timeCap = PickerSetting(value: 20, step: 5, min: 5, max: 60, type: PickerSetting.PickerSettingType.hour)
     var timeCap = PickerSetting(value: 20, step: 5, min: 5, max: 60, type: PickerSetting.PickerSettingType.hour)
     var hours = PickerSetting(value: 6, step: 0.5, min: 2, max: 24, type: PickerSetting.PickerSettingType.hour)
     var hours = PickerSetting(value: 6, step: 0.5, min: 2, max: 24, type: PickerSetting.PickerSettingType.hour)
     var dia = PickerSetting(value: 6, step: 0.5, min: 4, max: 10, type: PickerSetting.PickerSettingType.hour)
     var dia = PickerSetting(value: 6, step: 0.5, min: 4, max: 10, type: PickerSetting.PickerSettingType.hour)
-    var maxBolus = PickerSetting(value: 10, step: 1, min: 1, max: 30, type: PickerSetting.PickerSettingType.insulinUnit)
-    var maxBasal = PickerSetting(value: 10, step: 1, min: 1, max: 30, type: PickerSetting.PickerSettingType.insulinUnit)
+    var maxBolus = PickerSetting(value: 10, step: 0.5, min: 1, max: 30, type: PickerSetting.PickerSettingType.insulinUnit)
+    var maxBasal = PickerSetting(value: 10, step: 0.5, min: 1, max: 30, type: PickerSetting.PickerSettingType.insulinUnit)
 }
 }
 
 
 struct PickerSetting {
 struct PickerSetting {

+ 62 - 1
FreeAPS/Sources/Modules/AlgorithmAdvancedSettings/AlgorithmAdvancedSettingsProvider.swift

@@ -1,3 +1,64 @@
+import Combine
+import Foundation
+import HealthKit
+import LoopKit
+import LoopKitUI
+
 extension AlgorithmAdvancedSettings {
 extension AlgorithmAdvancedSettings {
-    final class Provider: BaseProvider, AlgorithmAdvancedSettingsProvider {}
+    final class Provider: BaseProvider, AlgorithmAdvancedSettingsProvider {
+        private let processQueue = DispatchQueue(label: "PumpSettingsEditorProvider.processQueue")
+        @Injected() private var broadcaster: Broadcaster!
+
+        func settings() -> PumpSettings {
+            storage.retrieve(OpenAPS.Settings.settings, as: PumpSettings.self)
+                ?? PumpSettings(from: OpenAPS.defaults(for: OpenAPS.Settings.settings))
+                ?? PumpSettings(insulinActionCurve: 6.0, maxBolus: 10, maxBasal: 2)
+        }
+
+        func save(settings: PumpSettings) -> AnyPublisher<Void, Error> {
+            func save(_ settings: PumpSettings) {
+                storage.save(settings, as: OpenAPS.Settings.settings)
+                processQueue.async {
+                    self.broadcaster.notify(PumpSettingsObserver.self, on: self.processQueue) {
+                        $0.pumpSettingsDidChange(settings)
+                    }
+                }
+            }
+
+            guard let pump = deviceManager?.pumpManager else {
+                save(settings)
+                return Just(()).setFailureType(to: Error.self).eraseToAnyPublisher()
+            }
+            let limits = DeliveryLimits(
+                maximumBasalRate: HKQuantity(unit: .internationalUnitsPerHour, doubleValue: Double(settings.maxBasal)),
+                maximumBolus: HKQuantity(unit: .internationalUnit(), doubleValue: Double(settings.maxBolus))
+            )
+            return Future { promise in
+                self.processQueue.async {
+                    pump.syncDeliveryLimits(limits: limits) { result in
+                        switch result {
+                        case let .success(actual):
+                            // Store the limits from the pumpManager to ensure the correct values
+                            // Example: Dana pumps don't allow to set these limits, only to fetch them
+                            // This will ensure we always have the correct values stored
+                            save(PumpSettings(
+                                insulinActionCurve: settings.insulinActionCurve,
+                                maxBolus: Decimal(
+                                    actual.maximumBolus?
+                                        .doubleValue(for: .internationalUnit()) ?? Double(settings.maxBolus)
+                                ),
+                                maxBasal: Decimal(
+                                    actual.maximumBasalRate?
+                                        .doubleValue(for: .internationalUnitsPerHour) ?? Double(settings.maxBasal)
+                                )
+                            ))
+                            promise(.success(()))
+                        case let .failure(error):
+                            promise(.failure(error))
+                        }
+                    }
+                }
+            }.eraseToAnyPublisher()
+        }
+    }
 }
 }

+ 34 - 0
FreeAPS/Sources/Modules/AlgorithmAdvancedSettings/AlgorithmAdvancedSettingsStateModel.swift

@@ -1,9 +1,11 @@
+import Combine
 import SwiftUI
 import SwiftUI
 
 
 extension AlgorithmAdvancedSettings {
 extension AlgorithmAdvancedSettings {
     final class StateModel: BaseStateModel<Provider> {
     final class StateModel: BaseStateModel<Provider> {
         @Injected() var settings: SettingsManager!
         @Injected() var settings: SettingsManager!
         @Injected() var storage: FileStorage!
         @Injected() var storage: FileStorage!
+        @Injected() var nightscout: NightscoutManager!
 
 
         @Published var units: GlucoseUnits = .mgdL
         @Published var units: GlucoseUnits = .mgdL
 
 
@@ -20,10 +22,16 @@ extension AlgorithmAdvancedSettings {
         @Published var remainingCarbsCap: Decimal = 90
         @Published var remainingCarbsCap: Decimal = 90
         @Published var noisyCGMTargetMultiplier: Decimal = 1.3
         @Published var noisyCGMTargetMultiplier: Decimal = 1.3
 
 
+        @Published var insulinActionCurve: Decimal = 6
+
         var preferences: Preferences {
         var preferences: Preferences {
             settingsManager.preferences
             settingsManager.preferences
         }
         }
 
 
+        var pumpSettings: PumpSettings {
+            provider.settings()
+        }
+
         override func subscribe() {
         override func subscribe() {
             units = settingsManager.settings.units
             units = settingsManager.settings.units
 
 
@@ -39,6 +47,12 @@ extension AlgorithmAdvancedSettings {
             remainingCarbsFraction = settings.preferences.remainingCarbsFraction
             remainingCarbsFraction = settings.preferences.remainingCarbsFraction
             remainingCarbsCap = settings.preferences.remainingCarbsCap
             remainingCarbsCap = settings.preferences.remainingCarbsCap
             noisyCGMTargetMultiplier = settings.preferences.noisyCGMTargetMultiplier
             noisyCGMTargetMultiplier = settings.preferences.noisyCGMTargetMultiplier
+
+            insulinActionCurve = pumpSettings.insulinActionCurve
+        }
+
+        var isPumpSettingUnchanged: Bool {
+            pumpSettings.insulinActionCurve == insulinActionCurve
         }
         }
 
 
         var isSettingUnchanged: Bool {
         var isSettingUnchanged: Bool {
@@ -76,6 +90,26 @@ extension AlgorithmAdvancedSettings {
                 newSettings.timestamp = Date()
                 newSettings.timestamp = Date()
                 storage.save(newSettings, as: OpenAPS.Settings.preferences)
                 storage.save(newSettings, as: OpenAPS.Settings.preferences)
             }
             }
+
+            if !isPumpSettingUnchanged {
+                let settings = PumpSettings(
+                    insulinActionCurve: insulinActionCurve,
+                    maxBolus: pumpSettings.maxBolus,
+                    maxBasal: pumpSettings.maxBasal
+                )
+                provider.save(settings: settings)
+                    .receive(on: DispatchQueue.main)
+                    .sink { _ in
+                        let settings = self.provider.settings()
+                        self.insulinActionCurve = settings.insulinActionCurve
+
+                        Task.detached(priority: .low) {
+                            debug(.nightscout, "Attempting to upload DIA to Nightscout")
+                            await self.nightscout.uploadProfiles()
+                        }
+                    } receiveValue: {}
+                    .store(in: &lifetime)
+            }
         }
         }
     }
     }
 }
 }

+ 18 - 0
FreeAPS/Sources/Modules/AlgorithmAdvancedSettings/View/AlgorithmAdvancedSettingsRootView.swift

@@ -92,6 +92,24 @@ extension AlgorithmAdvancedSettings {
                 )
                 )
 
 
                 SettingInputSection(
                 SettingInputSection(
+                    decimalValue: $state.insulinActionCurve,
+                    booleanValue: $booleanPlaceholder,
+                    shouldDisplayHint: $shouldDisplayHint,
+                    selectedVerboseHint: Binding(
+                        get: { selectedVerboseHint },
+                        set: {
+                            selectedVerboseHint = $0
+                            hintLabel = "Duration of Insulin Action"
+                        }
+                    ),
+                    units: state.units,
+                    type: .decimal("dia"),
+                    label: "Duration of Insulin Action",
+                    miniHint: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr.",
+                    verboseHint: "Duration of Insulin Action… bla bla bla"
+                )
+
+                SettingInputSection(
                     decimalValue: $state.insulinPeakTime,
                     decimalValue: $state.insulinPeakTime,
                     booleanValue: $state.useCustomPeakTime,
                     booleanValue: $state.useCustomPeakTime,
                     shouldDisplayHint: $shouldDisplayHint,
                     shouldDisplayHint: $shouldDisplayHint,

+ 6 - 1
FreeAPS/Sources/Modules/GeneralSettings/UnitsLimitsSettingsDataFlow.swift

@@ -1,5 +1,10 @@
+import Combine
+
 enum UnitsLimitsSettings {
 enum UnitsLimitsSettings {
     enum Config {}
     enum Config {}
 }
 }
 
 
-protocol UnitsLimitsSettingsProvider: Provider {}
+protocol UnitsLimitsSettingsProvider: Provider {
+    func settings() -> PumpSettings
+    func save(settings: PumpSettings) -> AnyPublisher<Void, Error>
+}

+ 64 - 1
FreeAPS/Sources/Modules/GeneralSettings/UnitsLimitsSettingsProvider.swift

@@ -1,5 +1,68 @@
+import Combine
 import Foundation
 import Foundation
+import HealthKit
+import LoopKit
+import LoopKitUI
+
+protocol PumpSettingsObserver {
+    func pumpSettingsDidChange(_ pumpSettings: PumpSettings)
+}
 
 
 extension UnitsLimitsSettings {
 extension UnitsLimitsSettings {
-    final class Provider: BaseProvider, UnitsLimitsSettingsProvider {}
+    final class Provider: BaseProvider, UnitsLimitsSettingsProvider {
+        private let processQueue = DispatchQueue(label: "PumpSettingsEditorProvider.processQueue")
+        @Injected() private var broadcaster: Broadcaster!
+
+        func settings() -> PumpSettings {
+            storage.retrieve(OpenAPS.Settings.settings, as: PumpSettings.self)
+                ?? PumpSettings(from: OpenAPS.defaults(for: OpenAPS.Settings.settings))
+                ?? PumpSettings(insulinActionCurve: 6.0, maxBolus: 10, maxBasal: 2)
+        }
+
+        func save(settings: PumpSettings) -> AnyPublisher<Void, Error> {
+            func save(_ settings: PumpSettings) {
+                storage.save(settings, as: OpenAPS.Settings.settings)
+                processQueue.async {
+                    self.broadcaster.notify(PumpSettingsObserver.self, on: self.processQueue) {
+                        $0.pumpSettingsDidChange(settings)
+                    }
+                }
+            }
+
+            guard let pump = deviceManager?.pumpManager else {
+                save(settings)
+                return Just(()).setFailureType(to: Error.self).eraseToAnyPublisher()
+            }
+            let limits = DeliveryLimits(
+                maximumBasalRate: HKQuantity(unit: .internationalUnitsPerHour, doubleValue: Double(settings.maxBasal)),
+                maximumBolus: HKQuantity(unit: .internationalUnit(), doubleValue: Double(settings.maxBolus))
+            )
+            return Future { promise in
+                self.processQueue.async {
+                    pump.syncDeliveryLimits(limits: limits) { result in
+                        switch result {
+                        case let .success(actual):
+                            // Store the limits from the pumpManager to ensure the correct values
+                            // Example: Dana pumps don't allow to set these limits, only to fetch them
+                            // This will ensure we always have the correct values stored
+                            save(PumpSettings(
+                                insulinActionCurve: settings.insulinActionCurve,
+                                maxBolus: Decimal(
+                                    actual.maximumBolus?
+                                        .doubleValue(for: .internationalUnit()) ?? Double(settings.maxBolus)
+                                ),
+                                maxBasal: Decimal(
+                                    actual.maximumBasalRate?
+                                        .doubleValue(for: .internationalUnitsPerHour) ?? Double(settings.maxBasal)
+                                )
+                            ))
+                            promise(.success(()))
+                        case let .failure(error):
+                            promise(.failure(error))
+                        }
+                    }
+                }
+            }.eraseToAnyPublisher()
+        }
+    }
 }
 }

+ 32 - 1
FreeAPS/Sources/Modules/GeneralSettings/UnitsLimitsSettingsStateModel.swift

@@ -1,3 +1,4 @@
+import Combine
 import SwiftUI
 import SwiftUI
 
 
 extension UnitsLimitsSettings {
 extension UnitsLimitsSettings {
@@ -6,25 +7,39 @@ extension UnitsLimitsSettings {
         @Injected() var storage: FileStorage!
         @Injected() var storage: FileStorage!
 
 
         @Published var units: GlucoseUnits = .mgdL
         @Published var units: GlucoseUnits = .mgdL
-        @Published var unitsIndex = 0 // 0 = mg/dl
+        @Published var unitsIndex = 0 // index 0 is mg/dl
 
 
+        @Published var maxBolus: Decimal = 10
+        @Published var maxBasal: Decimal = 2
         @Published var maxIOB: Decimal = 0
         @Published var maxIOB: Decimal = 0
         @Published var maxCOB: Decimal = 120
         @Published var maxCOB: Decimal = 120
+        @Published var hasChanged: Bool = false
 
 
         var preferences: Preferences {
         var preferences: Preferences {
             settingsManager.preferences
             settingsManager.preferences
         }
         }
 
 
+        var pumpSettings: PumpSettings {
+            provider.settings()
+        }
+
         override func subscribe() {
         override func subscribe() {
             units = settingsManager.settings.units
             units = settingsManager.settings.units
             subscribeSetting(\.units, on: $unitsIndex.map { $0 == 0 ? GlucoseUnits.mgdL : .mmolL }) {
             subscribeSetting(\.units, on: $unitsIndex.map { $0 == 0 ? GlucoseUnits.mgdL : .mmolL }) {
                 unitsIndex = $0 == .mgdL ? 0 : 1
                 unitsIndex = $0 == .mgdL ? 0 : 1
             }
             }
 
 
+            maxBasal = pumpSettings.maxBasal
+            maxBolus = pumpSettings.maxBolus
             maxIOB = settings.preferences.maxIOB
             maxIOB = settings.preferences.maxIOB
             maxCOB = settings.preferences.maxCOB
             maxCOB = settings.preferences.maxCOB
         }
         }
 
 
+        var isPumpSettingUnchanged: Bool {
+            pumpSettings.maxBasal == maxBasal &&
+                pumpSettings.maxBolus == maxBolus
+        }
+
         var isSettingUnchanged: Bool {
         var isSettingUnchanged: Bool {
             preferences.maxIOB == maxIOB &&
             preferences.maxIOB == maxIOB &&
                 preferences.maxCOB == maxCOB
                 preferences.maxCOB == maxCOB
@@ -40,6 +55,22 @@ extension UnitsLimitsSettings {
                 newSettings.timestamp = Date()
                 newSettings.timestamp = Date()
                 storage.save(newSettings, as: OpenAPS.Settings.preferences)
                 storage.save(newSettings, as: OpenAPS.Settings.preferences)
             }
             }
+
+            if !isPumpSettingUnchanged {
+                let settings = PumpSettings(
+                    insulinActionCurve: pumpSettings.insulinActionCurve,
+                    maxBolus: maxBolus,
+                    maxBasal: maxBasal
+                )
+                provider.save(settings: settings)
+                    .receive(on: DispatchQueue.main)
+                    .sink { _ in
+                        let settings = self.provider.settings()
+                        self.maxBasal = settings.maxBasal
+                        self.maxBolus = settings.maxBolus
+                    } receiveValue: {}
+                    .store(in: &lifetime)
+            }
         }
         }
     }
     }
 }
 }

+ 36 - 0
FreeAPS/Sources/Modules/GeneralSettings/View/UnitsLimitsSettingsRootView.swift

@@ -45,6 +45,42 @@ extension UnitsLimitsSettings {
                 ).listRowBackground(Color.chart)
                 ).listRowBackground(Color.chart)
 
 
                 SettingInputSection(
                 SettingInputSection(
+                    decimalValue: $state.maxBolus,
+                    booleanValue: $booleanPlaceholder,
+                    shouldDisplayHint: $shouldDisplayHint,
+                    selectedVerboseHint: Binding(
+                        get: { selectedVerboseHint },
+                        set: {
+                            selectedVerboseHint = $0
+                            hintLabel = "Max Bolus"
+                        }
+                    ),
+                    units: state.units,
+                    type: .decimal("maxBolus"),
+                    label: "Max Bolus",
+                    miniHint: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr.",
+                    verboseHint: "Max Bolus… bla bla bla"
+                )
+
+                SettingInputSection(
+                    decimalValue: $state.maxBasal,
+                    booleanValue: $booleanPlaceholder,
+                    shouldDisplayHint: $shouldDisplayHint,
+                    selectedVerboseHint: Binding(
+                        get: { selectedVerboseHint },
+                        set: {
+                            selectedVerboseHint = $0
+                            hintLabel = "Max Basal"
+                        }
+                    ),
+                    units: state.units,
+                    type: .decimal("maxBasal"),
+                    label: "Max Basal",
+                    miniHint: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr.",
+                    verboseHint: "Max Basal… bla bla bla"
+                )
+
+                SettingInputSection(
                     decimalValue: $state.maxIOB,
                     decimalValue: $state.maxIOB,
                     booleanValue: $booleanPlaceholder,
                     booleanValue: $booleanPlaceholder,
                     shouldDisplayHint: $shouldDisplayHint,
                     shouldDisplayHint: $shouldDisplayHint,

+ 1 - 1
FreeAPS/Sources/Modules/NightscoutConfig/View/ProfileImport/NightscoutImportResultView.swift

@@ -103,7 +103,7 @@ struct NightscoutImportResultView: BaseView {
                     }.disabled(hasVisitedCREditor)
                     }.disabled(hasVisitedCREditor)
 
 
                     NavigationLink(
                     NavigationLink(
-                        destination: PumpSettingsEditor.RootView(resolver: resolver)
+                        destination: AlgorithmAdvancedSettings.RootView(resolver: resolver)
                             .onDisappear { hasVisitedPumpSettingsEditor = true }
                             .onDisappear { hasVisitedPumpSettingsEditor = true }
                     ) {
                     ) {
                         HStack {
                         HStack {

+ 0 - 7
FreeAPS/Sources/Modules/PumpConfig/View/PumpConfigRootView.swift

@@ -90,13 +90,6 @@ extension PumpConfig {
                     )
                     )
                     .padding(.top)
                     .padding(.top)
                     .listRowBackground(Color.chart)
                     .listRowBackground(Color.chart)
-
-                    if state.pumpState != nil {
-                        Section {
-                            Text("Delivery Limits & DIA")
-                                .navigationLink(to: .pumpSettingsEditor, from: self)
-                        }.listRowBackground(Color.chart)
-                    }
                 }
                 }
                 .scrollContentBackground(.hidden).background(color)
                 .scrollContentBackground(.hidden).background(color)
                 .onAppear(perform: configureView)
                 .onAppear(perform: configureView)

+ 0 - 10
FreeAPS/Sources/Modules/PumpSettingsEditor/PumpSettingsEditorDataFlow.swift

@@ -1,10 +0,0 @@
-import Combine
-
-enum PumpSettingsEditor {
-    enum Config {}
-}
-
-protocol PumpSettingsEditorProvider: Provider {
-    func settings() -> PumpSettings
-    func save(settings: PumpSettings) -> AnyPublisher<Void, Error>
-}

+ 0 - 71
FreeAPS/Sources/Modules/PumpSettingsEditor/PumpSettingsEditorProvider.swift

@@ -1,71 +0,0 @@
-import Combine
-import HealthKit
-import LoopKit
-import LoopKitUI
-
-protocol PumpSettingsObserver {
-    func pumpSettingsDidChange(_ pumpSettings: PumpSettings)
-}
-
-extension PumpSettingsEditor {
-    final class Provider: BaseProvider, PumpSettingsEditorProvider {
-        private let processQueue = DispatchQueue(label: "PumpSettingsEditorProvider.processQueue")
-        @Injected() private var broadcaster: Broadcaster!
-
-        func settings() -> PumpSettings {
-            storage.retrieve(OpenAPS.Settings.settings, as: PumpSettings.self)
-                ?? PumpSettings(from: OpenAPS.defaults(for: OpenAPS.Settings.settings))
-                ?? PumpSettings(insulinActionCurve: 6, maxBolus: 10, maxBasal: 2)
-        }
-
-        func save(settings: PumpSettings) -> AnyPublisher<Void, Error> {
-            func save(_ settings: PumpSettings) {
-                storage.save(settings, as: OpenAPS.Settings.settings)
-                processQueue.async {
-                    self.broadcaster.notify(PumpSettingsObserver.self, on: self.processQueue) {
-                        $0.pumpSettingsDidChange(settings)
-                    }
-                }
-            }
-
-            guard let pump = deviceManager?.pumpManager else {
-                save(settings)
-                return Just(()).setFailureType(to: Error.self).eraseToAnyPublisher()
-            }
-            // Don't ask why 🤦‍♂️
-            // let sync = DeliveryLimitSettingsTableViewController(style: .grouped)
-            let limits = DeliveryLimits(
-                maximumBasalRate: HKQuantity(unit: .internationalUnitsPerHour, doubleValue: Double(settings.maxBasal)),
-                maximumBolus: HKQuantity(unit: .internationalUnit(), doubleValue: Double(settings.maxBolus))
-            )
-            // sync.maximumBasalRatePerHour = Double(settings.maxBasal)
-            // sync.maximumBolus = Double(settings.maxBolus)
-            return Future { promise in
-                self.processQueue.async {
-                    pump.syncDeliveryLimits(limits: limits) { result in
-                        switch result {
-                        case let .success(actual):
-                            // Store the limits from the pumpManager to ensure the correct values
-                            // Example: Dana pumps don't allow to set these limits, only to fetch them
-                            // This will ensure we always have the correct values stored
-                            save(PumpSettings(
-                                insulinActionCurve: settings.insulinActionCurve,
-                                maxBolus: Decimal(
-                                    actual.maximumBolus?
-                                        .doubleValue(for: .internationalUnit()) ?? Double(settings.maxBolus)
-                                ),
-                                maxBasal: Decimal(
-                                    actual.maximumBasalRate?
-                                        .doubleValue(for: .internationalUnitsPerHour) ?? Double(settings.maxBasal)
-                                )
-                            ))
-                            promise(.success(()))
-                        case let .failure(error):
-                            promise(.failure(error))
-                        }
-                    }
-                }
-            }.eraseToAnyPublisher()
-        }
-    }
-}

+ 0 - 95
FreeAPS/Sources/Modules/PumpSettingsEditor/PumpSettingsEditorStateModel.swift

@@ -1,95 +0,0 @@
-import Combine
-import SwiftUI
-
-extension PumpSettingsEditor {
-    final class StateModel: BaseStateModel<Provider> {
-        @Injected() private var nightscout: NightscoutManager!
-
-        @Published var units: GlucoseUnits = .mgdL
-        @Published var maxBasal: Decimal = 0.0 {
-            didSet {
-                checkForChanges()
-            }
-        }
-
-        @Published var maxBolus: Decimal = 0.0 {
-            didSet {
-                checkForChanges()
-            }
-        }
-
-        @Published var dia: Decimal = 0.0 {
-            didSet {
-                checkForChanges()
-            }
-        }
-
-        @Published var syncInProgress = false
-        @Published var hasChanged: Bool = false
-
-        private var initialMaxBasal: Decimal = 0.0
-        private var initialMaxBolus: Decimal = 0.0
-        private var initialDia: Decimal = 0.0
-
-        override func subscribe() {
-            units = settingsManager.settings.units
-
-            let settings = provider.settings()
-            maxBasal = settings.maxBasal
-            maxBolus = settings.maxBolus
-            dia = settings.insulinActionCurve
-
-            initialMaxBasal = settings.maxBasal
-            initialMaxBolus = settings.maxBolus
-            initialDia = settings.insulinActionCurve
-
-            checkForChanges()
-        }
-
-        var unchanged: Bool {
-            initialMaxBasal == maxBasal &&
-                initialMaxBolus == maxBolus &&
-                initialDia == dia
-        }
-
-        private func checkForChanges() {
-            hasChanged = !unchanged
-        }
-
-        func save() {
-            syncInProgress = true
-            let settings = PumpSettings(
-                insulinActionCurve: dia,
-                maxBolus: maxBolus,
-                maxBasal: maxBasal
-            )
-            provider.save(settings: settings)
-                .receive(on: DispatchQueue.main)
-                .sink { _ in
-                    let settings = self.provider.settings()
-                    self.syncInProgress = false
-                    self.maxBasal = settings.maxBasal
-                    self.maxBolus = settings.maxBolus
-                    self.dia = settings.insulinActionCurve
-
-                    self.initialMaxBasal = settings.maxBasal
-                    self.initialMaxBolus = settings.maxBolus
-                    self.initialDia = settings.insulinActionCurve
-
-                    self.checkForChanges()
-
-                    Task.detached(priority: .low) {
-                        debug(.nightscout, "Attempting to upload DIA to Nightscout")
-                        await self.nightscout.uploadProfiles()
-                    }
-                } receiveValue: {}
-                .store(in: &lifetime)
-        }
-    }
-}
-
-extension PumpSettingsEditor.StateModel: SettingsObserver {
-    func settingsDidChange(_: FreeAPSSettings) {
-        units = settingsManager.settings.units
-    }
-}

+ 0 - 129
FreeAPS/Sources/Modules/PumpSettingsEditor/View/PumpSettingsEditorRootView.swift

@@ -1,129 +0,0 @@
-import SwiftUI
-import Swinject
-
-extension PumpSettingsEditor {
-    struct RootView: BaseView {
-        let resolver: Resolver
-        @StateObject var state = StateModel()
-
-        @State private var shouldDisplayHint: Bool = false
-        @State var hintDetent = PresentationDetent.large
-        @State var selectedVerboseHint: String?
-        @State var hintLabel: String?
-        @State private var decimalPlaceholder: Decimal = 0.0
-        @State private var booleanPlaceholder: Bool = false
-
-        @Environment(\.colorScheme) var colorScheme
-        var color: LinearGradient {
-            colorScheme == .dark ? LinearGradient(
-                gradient: Gradient(colors: [
-                    Color.bgDarkBlue,
-                    Color.bgDarkerDarkBlue
-                ]),
-                startPoint: .top,
-                endPoint: .bottom
-            )
-                :
-                LinearGradient(
-                    gradient: Gradient(colors: [Color.gray.opacity(0.1)]),
-                    startPoint: .top,
-                    endPoint: .bottom
-                )
-        }
-
-        private var formatter: NumberFormatter {
-            let formatter = NumberFormatter()
-            formatter.numberStyle = .decimal
-            return formatter
-        }
-
-        var body: some View {
-            Form {
-                SettingInputSection(
-                    decimalValue: $state.maxBolus,
-                    booleanValue: $booleanPlaceholder,
-                    shouldDisplayHint: $shouldDisplayHint,
-                    selectedVerboseHint: Binding(
-                        get: { selectedVerboseHint },
-                        set: {
-                            selectedVerboseHint = $0
-                            hintLabel = "Max Bolus"
-                        }
-                    ),
-                    units: state.units,
-                    type: .decimal("maxBolus"),
-                    label: "Max Bolus",
-                    miniHint: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr.",
-                    verboseHint: "Max Bolus… bla bla bla"
-                )
-
-                SettingInputSection(
-                    decimalValue: $state.maxBasal,
-                    booleanValue: $booleanPlaceholder,
-                    shouldDisplayHint: $shouldDisplayHint,
-                    selectedVerboseHint: Binding(
-                        get: { selectedVerboseHint },
-                        set: {
-                            selectedVerboseHint = $0
-                            hintLabel = "Max Basal"
-                        }
-                    ),
-                    units: state.units,
-                    type: .decimal("maxBasal"),
-                    label: "Max Basal",
-                    miniHint: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr.",
-                    verboseHint: "Max Basal… bla bla bla"
-                )
-
-                SettingInputSection(
-                    decimalValue: $state.dia,
-                    booleanValue: $booleanPlaceholder,
-                    shouldDisplayHint: $shouldDisplayHint,
-                    selectedVerboseHint: Binding(
-                        get: { selectedVerboseHint },
-                        set: {
-                            selectedVerboseHint = $0
-                            hintLabel = "Duration of Insulin Action"
-                        }
-                    ),
-                    units: state.units,
-                    type: .decimal("dia"),
-                    label: "Duration of Insulin Action",
-                    miniHint: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr.",
-                    verboseHint: "Duration of Insulin Action… bla bla bla"
-                )
-
-                Section {
-                    HStack {
-                        if state.syncInProgress {
-                            ProgressView().padding(.trailing, 10)
-                        }
-                        Button {
-                            let impactHeavy = UIImpactFeedbackGenerator(style: .heavy)
-                            impactHeavy.impactOccurred()
-                            state.save()
-                        } label: {
-                            Text(state.syncInProgress ? "Saving..." : "Save")
-                        }
-                        .disabled(state.syncInProgress || !state.hasChanged)
-                        .frame(maxWidth: .infinity, alignment: .center)
-                        .tint(.white)
-                    }
-                }.listRowBackground(state.syncInProgress || !state.hasChanged ? Color(.systemGray4) : Color(.systemBlue))
-            }
-            .sheet(isPresented: $shouldDisplayHint) {
-                SettingInputHintView(
-                    hintDetent: $hintDetent,
-                    shouldDisplayHint: $shouldDisplayHint,
-                    hintLabel: hintLabel ?? "",
-                    hintText: selectedVerboseHint ?? "",
-                    sheetTitle: "Help"
-                )
-            }
-            .scrollContentBackground(.hidden).background(color)
-            .onAppear(perform: configureView)
-            .navigationTitle("Delivery Limits")
-            .navigationBarTitleDisplayMode(.automatic)
-        }
-    }
-}

+ 2 - 7
FreeAPS/Sources/Modules/Settings/SettingItems.swift

@@ -41,12 +41,6 @@ enum SettingItems {
     static let devicesItems = [
     static let devicesItems = [
         SettingItem(title: "Insulin Pump", view: .pumpConfig, path: ["Devices"]),
         SettingItem(title: "Insulin Pump", view: .pumpConfig, path: ["Devices"]),
         SettingItem(
         SettingItem(
-            title: "Delivery Limits & DIA",
-            view: .pumpSettingsEditor,
-            searchContents: ["Max Basal", "Max Bolus", "Duration of Insulin Action", "DIA"],
-            path: ["Devices", "Insulin Pump", "Delivery Limits & DIA"]
-        ),
-        SettingItem(
             title: "CGM",
             title: "CGM",
             view: .cgm,
             view: .cgm,
             searchContents: ["Smooth Glucose Value"],
             searchContents: ["Smooth Glucose Value"],
@@ -65,7 +59,7 @@ enum SettingItems {
         SettingItem(
         SettingItem(
             title: "Units and Limits",
             title: "Units and Limits",
             view: .unitsAndLimits,
             view: .unitsAndLimits,
-            searchContents: ["Glucose Units", "Max IOB", "Max COB"],
+            searchContents: ["Glucose Units", "Max Basal", "Max Bolus", "Max IOB", "Max COB"],
             path: ["Therapy Settings", "Units and Limits"]
             path: ["Therapy Settings", "Units and Limits"]
         ),
         ),
         SettingItem(title: "Basal Rates", view: .basalProfileEditor, path: ["Therapy Settings"]),
         SettingItem(title: "Basal Rates", view: .basalProfileEditor, path: ["Therapy Settings"]),
@@ -130,6 +124,7 @@ enum SettingItems {
                 "Max Daily Safety Multiplier",
                 "Max Daily Safety Multiplier",
                 "Current Basal Safety Multiplier",
                 "Current Basal Safety Multiplier",
                 "Use Custom Peak Time",
                 "Use Custom Peak Time",
+                "Duration of Insulin Action", "DIA",
                 "Insulin Peak Time",
                 "Insulin Peak Time",
                 "Skip Neutral Temps",
                 "Skip Neutral Temps",
                 "Unsuspend If No Temp",
                 "Unsuspend If No Temp",

+ 0 - 3
FreeAPS/Sources/Router/Screen.swift

@@ -10,7 +10,6 @@ enum Screen: Identifiable, Hashable {
     case nighscoutConfigDirect
     case nighscoutConfigDirect
     case pumpConfig
     case pumpConfig
     case pumpConfigDirect
     case pumpConfigDirect
-    case pumpSettingsEditor
     case basalProfileEditor
     case basalProfileEditor
     case isfEditor
     case isfEditor
     case crEditor
     case crEditor
@@ -70,8 +69,6 @@ extension Screen {
             PumpConfig.RootView(resolver: resolver, displayClose: false)
             PumpConfig.RootView(resolver: resolver, displayClose: false)
         case .pumpConfigDirect:
         case .pumpConfigDirect:
             PumpConfig.RootView(resolver: resolver, displayClose: true)
             PumpConfig.RootView(resolver: resolver, displayClose: true)
-        case .pumpSettingsEditor:
-            PumpSettingsEditor.RootView(resolver: resolver)
         case .basalProfileEditor:
         case .basalProfileEditor:
             BasalProfileEditor.RootView(resolver: resolver)
             BasalProfileEditor.RootView(resolver: resolver)
         case .isfEditor:
         case .isfEditor: