Jelajahi Sumber

Add Upload steps for Nightscout in Onboarding

Mike Plante 9 bulan lalu
induk
melakukan
374fcf3122

+ 8 - 0
Trio.xcodeproj/project.pbxproj

@@ -445,7 +445,9 @@
 		BDFF7A8B2D25F97D0016C40C /* Unit Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDFF7A8A2D25F97D0016C40C /* Unit Tests.swift */; };
 		BF1667ADE69E4B5B111CECAE /* ManualTempBasalProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 680C4420C9A345D46D90D06C /* ManualTempBasalProvider.swift */; };
 		C21FE1E72DA59C6B007D550B /* GlucoseDailyDistributionChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = C21FE1E62DA59C6B007D550B /* GlucoseDailyDistributionChart.swift */; };
+		C263D59F2E4267F400CBF08C /* NightscoutUploadGlucoseStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C263D59E2E4267F400CBF08C /* NightscoutUploadGlucoseStepView.swift */; };
 		C28DD7262DBA9A9E00EC02DD /* GlucosePercentileDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28DD7252DBA9A9E00EC02DD /* GlucosePercentileDetailView.swift */; };
+		C29835B02E2AA3F30068C5BB /* NightscoutUploadStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C29835AF2E2AA3F30068C5BB /* NightscoutUploadStepView.swift */; };
 		C29E268A2DADFD2A00F87E75 /* GlucoseDailyPercentileChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = C29E26892DADFD2A00F87E75 /* GlucoseDailyPercentileChart.swift */; };
 		C2A0A42F2CE03131003B98E8 /* ConstantValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2A0A42E2CE0312C003B98E8 /* ConstantValues.swift */; };
 		C2A6D1E42DB1581D0036DB66 /* GlucoseStatsSetup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2A6D1E32DB1581D0036DB66 /* GlucoseStatsSetup.swift */; };
@@ -1265,7 +1267,9 @@
 		BF8BCB0C37DEB5EC377B9612 /* BasalProfileEditorRootView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BasalProfileEditorRootView.swift; sourceTree = "<group>"; };
 		C19984D62EFC0035A9E9644D /* TreatmentsProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TreatmentsProvider.swift; sourceTree = "<group>"; };
 		C21FE1E62DA59C6B007D550B /* GlucoseDailyDistributionChart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucoseDailyDistributionChart.swift; sourceTree = "<group>"; };
+		C263D59E2E4267F400CBF08C /* NightscoutUploadGlucoseStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NightscoutUploadGlucoseStepView.swift; sourceTree = "<group>"; };
 		C28DD7252DBA9A9E00EC02DD /* GlucosePercentileDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucosePercentileDetailView.swift; sourceTree = "<group>"; };
+		C29835AF2E2AA3F30068C5BB /* NightscoutUploadStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NightscoutUploadStepView.swift; sourceTree = "<group>"; };
 		C29E26892DADFD2A00F87E75 /* GlucoseDailyPercentileChart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucoseDailyPercentileChart.swift; sourceTree = "<group>"; };
 		C2A0A42E2CE0312C003B98E8 /* ConstantValues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConstantValues.swift; sourceTree = "<group>"; };
 		C2A6D1E32DB1581D0036DB66 /* GlucoseStatsSetup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucoseStatsSetup.swift; sourceTree = "<group>"; };
@@ -3336,7 +3340,9 @@
 		DD3F1F8E2D9E151200DCE7B3 /* Nightscout */ = {
 			isa = PBXGroup;
 			children = (
+				C263D59E2E4267F400CBF08C /* NightscoutUploadGlucoseStepView.swift */,
 				DD3F1F8F2D9E153A00DCE7B3 /* NightscoutImportStepView.swift */,
+				C29835AF2E2AA3F30068C5BB /* NightscoutUploadStepView.swift */,
 				DD3F1F8C2D9E0E0000DCE7B3 /* NightscoutSetupStepView.swift */,
 				DD3F1F8A2D9E08B200DCE7B3 /* NightscoutLoginStepView.swift */,
 			);
@@ -4191,6 +4197,7 @@
 				58645BA32CA2D325008AFCE7 /* BatterySetup.swift in Sources */,
 				DD82D4B82DCAB2BA00BAFC77 /* PropertyPersistentFlags.swift in Sources */,
 				388E5A5C25B6F0770019842D /* JSON.swift in Sources */,
+				C263D59F2E4267F400CBF08C /* NightscoutUploadGlucoseStepView.swift in Sources */,
 				3811DF0225CA9FEA00A708ED /* Credentials.swift in Sources */,
 				5837A5302BD2E3C700A5DC04 /* CarbEntryStored+helper.swift in Sources */,
 				389A572026079BAA00BC102F /* Interpolation.swift in Sources */,
@@ -4486,6 +4493,7 @@
 				CEE9A65C2BBB41C800EB5194 /* CalibrationService.swift in Sources */,
 				110AEDED2C51A0AE00615CC9 /* ShortcutsConfigProvider.swift in Sources */,
 				38E4453D274E411700EC9A94 /* Disk+Errors.swift in Sources */,
+				C29835B02E2AA3F30068C5BB /* NightscoutUploadStepView.swift in Sources */,
 				58D08B3A2C8DFECD00AA37D3 /* TempTargets.swift in Sources */,
 				38E98A2325F52C9300C0CED0 /* Signpost.swift in Sources */,
 				CE7CA3542A064973004BE681 /* TempPresetsIntentRequest.swift in Sources */,

+ 10 - 3
Trio/Sources/Localizations/Main/Localizable.xcstrings

@@ -8832,9 +8832,6 @@
         }
       }
     },
-    "%lld h" : {
-
-    },
     "%lld hr" : {
       "localizations" : {
         "bg" : {
@@ -162430,6 +162427,12 @@
         }
       }
     },
+    "Please choose if you want to upload CGM readings from Trio to Nightscout." : {
+
+    },
+    "Please choose if you want to upload treatment data to Nightscout." : {
+
+    },
     "Please enter your credentials:" : {
       "localizations" : {
         "bg" : {
@@ -205237,6 +205240,7 @@
       }
     },
     "The Upload Treatments toggle enables uploading of the following data sets to your connected Nightscout URL:" : {
+      "extractionState" : "stale",
       "localizations" : {
         "bg" : {
           "stringUnit" : {
@@ -212571,6 +212575,9 @@
         }
       }
     },
+    "This toggle enables uploading of the following data sets to your connected Nightscout URL:" : {
+
+    },
     "This will add your current glucose on the top right of your Trio icon as a red notification badge. Changing setting takes effect on next Glucose reading." : {
       "localizations" : {
         "bg" : {

+ 1 - 1
Trio/Sources/Modules/NightscoutConfig/View/NightscoutUploadView.swift

@@ -35,7 +35,7 @@ struct NightscoutUploadView: View {
                 VStack(alignment: .leading, spacing: 10) {
                     Text("Default: OFF").bold()
                     Text(
-                        "The Upload Treatments toggle enables uploading of the following data sets to your connected Nightscout URL:"
+                        "This toggle enables uploading of the following data sets to your connected Nightscout URL:"
                     )
                     VStack(alignment: .leading, spacing: 5) {
                         Text("• Carbs")

+ 7 - 0
Trio/Sources/Modules/Onboarding/OnboardingStateModel.swift

@@ -100,6 +100,8 @@ extension Onboarding {
         var isConnectedToNS: Bool = false
         var nightscoutImportError: NightscoutImportError?
         var nightscoutImportStatus: ImportStatus = .none
+        var isUploadEnabled: Bool = true
+        var uploadGlucose: Bool = true
 
         // MARK: - Units and Pump Omboarding Option
 
@@ -700,6 +702,11 @@ extension Onboarding {
             var settingsCopy = settingsManager.settings
             settingsCopy.units = units
 
+            if nightscoutSetupOption == .setupNightscout {
+                settingsCopy.isUploadEnabled = isUploadEnabled
+                settingsCopy.uploadGlucose = uploadGlucose
+            }
+
             // ensure existing values cannot exceed new guardrails
             if !isFreshTrioInstall {
                 let providedSettings = settingsProvider.settings

+ 4 - 0
Trio/Sources/Modules/Onboarding/View/OnboardingRootView.swift

@@ -333,6 +333,10 @@ struct OnboardingStepContent: View {
                                     NightscoutSetupStepView(state: state)
                                 case .connectToNightscout:
                                     NightscoutLoginStepView(state: state)
+                                case .uploadToNightscout:
+                                    NightscoutUploadStepView(state: state)
+                                case .uploadGlucoseToNightscout:
+                                    NightscoutUploadGlucoseStepView(state: state)
                                 case .importFromNightscout:
                                     NightscoutImportStepView(state: state)
                                 }

+ 31 - 0
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/Nightscout/NightscoutUploadGlucoseStepView.swift

@@ -0,0 +1,31 @@
+import SwiftUI
+
+struct NightscoutUploadGlucoseStepView: View {
+    @Bindable var state: Onboarding.StateModel
+
+    var body: some View {
+        VStack(alignment: .leading, spacing: 20) {
+            Text(
+                "Please choose if you want to upload CGM readings from Trio to Nightscout."
+            )
+            .font(.headline)
+            .padding(.horizontal)
+            .multilineTextAlignment(.leading)
+
+            HStack {
+                Toggle(isOn: $state.uploadGlucose) {
+                    Text("Upload Glucose")
+                }.tint(Color.accentColor)
+            }
+            .padding()
+            .background(Color.chart.opacity(0.65))
+            .cornerRadius(10)
+
+            Text("Enabling this setting allows CGM readings from Trio to be used in Nightscout.")
+                .padding(.horizontal)
+                .font(.footnote)
+                .foregroundStyle(Color.secondary)
+                .multilineTextAlignment(.leading)
+        }
+    }
+}

+ 45 - 0
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/Nightscout/NightscoutUploadStepView.swift

@@ -0,0 +1,45 @@
+import SwiftUI
+
+struct NightscoutUploadStepView: View {
+    @Bindable var state: Onboarding.StateModel
+
+    var body: some View {
+        VStack(alignment: .leading, spacing: 20) {
+            Text(
+                "Please choose if you want to upload treatment data to Nightscout."
+            )
+            .font(.headline)
+            .padding(.horizontal)
+            .multilineTextAlignment(.leading)
+
+            HStack {
+                Toggle(isOn: $state.isUploadEnabled) {
+                    Text("Allow Uploading to Nightscout")
+                }.tint(Color.accentColor)
+            }
+            .padding()
+            .background(Color.chart.opacity(0.65))
+            .cornerRadius(10)
+
+            Text(
+                "This toggle enables uploading of the following data sets to your connected Nightscout URL:"
+            )
+            .padding(.horizontal)
+            .font(.footnote)
+            .foregroundStyle(Color.secondary)
+            .multilineTextAlignment(.leading)
+
+            VStack(alignment: .leading, spacing: 5) {
+                Text("• Carbs")
+                Text("• Temp Targets")
+                Text("• Device Status")
+                Text("• Preferences")
+                Text("• Settings")
+            }
+            .padding(.horizontal)
+            .font(.footnote)
+            .foregroundStyle(Color.secondary)
+            .multilineTextAlignment(.leading)
+        }
+    }
+}

+ 2 - 0
Trio/Sources/Modules/Onboarding/View/OnboardingView+Util.swift

@@ -562,6 +562,8 @@ enum NightscoutImportOption: String, Equatable, CaseIterable, Identifiable {
 enum NightscoutSubstep: Int, CaseIterable, Identifiable {
     case setupSelection
     case connectToNightscout
+    case uploadToNightscout
+    case uploadGlucoseToNightscout
     case importFromNightscout
 
     var id: Int { rawValue }