Ivan Valkou 5 лет назад
Родитель
Сommit
7db48d4d30

+ 5 - 0
FreeAPS/Resources/Info.plist

@@ -55,5 +55,10 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 </dict>
 </plist>

+ 3 - 1
FreeAPS/Resources/json/defaults/freeaps/freeaps_settings.json

@@ -3,5 +3,7 @@
     "closedLoop": false,
     "allowAnnouncements": false,
     "useAutotune": false
-    "isUploadEnabled": true
+    "isUploadEnabled": true,
+    "useLocalGlucoseSource": false,
+    "localGlucosePort": 8080
 }

+ 2 - 0
FreeAPS/Sources/Models/FreeAPSSettings.swift

@@ -6,4 +6,6 @@ struct FreeAPSSettings: JSON {
     var allowAnnouncements: Bool
     var useAutotune: Bool
     var isUploadEnabled: Bool?
+    var useLocalGlucoseSource: Bool?
+    var localGlucosePort: Int?
 }

+ 18 - 0
FreeAPS/Sources/Modules/NightscoutConfig/NightscoutConfigViewModel.swift

@@ -12,15 +12,33 @@ extension NightscoutConfig {
         @Published var connecting = false
         @Published var isUploadEnabled = false
 
+        @Published var useLocalSource = false
+        @Published var localPort: Decimal = 0
+
         override func subscribe() {
             url = keychain.getValue(String.self, forKey: Config.urlKey) ?? ""
             secret = keychain.getValue(String.self, forKey: Config.secretKey) ?? ""
             isUploadEnabled = settingsManager.settings.isUploadEnabled ?? false
+            useLocalSource = settingsManager.settings.useLocalGlucoseSource ?? false
+            localPort = Decimal(settingsManager.settings.localGlucosePort ?? 8080)
+
             $isUploadEnabled
                 .removeDuplicates()
                 .sink { [weak self] enabled in
                     self?.settingsManager.settings.isUploadEnabled = enabled
                 }.store(in: &lifetime)
+
+            $useLocalSource
+                .removeDuplicates()
+                .sink { [weak self] use in
+                    self?.settingsManager.settings.useLocalGlucoseSource = use
+                }.store(in: &lifetime)
+
+            $localPort
+                .removeDuplicates()
+                .sink { [weak self] port in
+                    self?.settingsManager.settings.localGlucosePort = Int(port)
+                }.store(in: &lifetime)
         }
 
         func connect() {

+ 14 - 0
FreeAPS/Sources/Modules/NightscoutConfig/View/NightscoutConfigRootView.swift

@@ -4,6 +4,12 @@ extension NightscoutConfig {
     struct RootView: BaseView {
         @EnvironmentObject var viewModel: ViewModel<Provider>
 
+        private var portFormater: NumberFormatter {
+            let formatter = NumberFormatter()
+            formatter.allowsFloats = false
+            return formatter
+        }
+
         var body: some View {
             Form {
                 Section {
@@ -38,6 +44,14 @@ extension NightscoutConfig {
                 Section {
                     Toggle("Allow uploads", isOn: $viewModel.isUploadEnabled)
                 }
+
+                Section(header: Text("Local glucose source")) {
+                    Toggle("Use local glucose server", isOn: $viewModel.useLocalSource)
+                    HStack {
+                        Text("Port")
+                        DecimalTextField("", value: $viewModel.localPort, formatter: portFormater)
+                    }
+                }
             }
             .navigationBarTitle("Nightscout Config", displayMode: .automatic)
         }

+ 8 - 1
FreeAPS/Sources/Services/Network/NightscoutManager.swift

@@ -52,7 +52,14 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
     }
 
     func fetchGlucose() -> AnyPublisher<[BloodGlucose], Never> {
-        guard let nightscout = nightscoutAPI else {
+        let useLocal = (settingsManager.settings.useLocalGlucoseSource ?? false) && settingsManager.settings
+            .localGlucosePort != nil
+
+        let maybeNightscout = useLocal
+            ? NightscoutAPI(url: URL(string: "http://127.0.0.1:\(settingsManager.settings.localGlucosePort!)")!)
+            : nightscoutAPI
+
+        guard let nightscout = maybeNightscout else {
             return Just([]).eraseToAnyPublisher()
         }