|
@@ -128,21 +128,31 @@ class SettingsViewController: FormViewController {
|
|
|
guard let value = row.value else {
|
|
guard let value = row.value else {
|
|
|
UserDefaultsRepository.url.value = ""
|
|
UserDefaultsRepository.url.value = ""
|
|
|
self.showHideNSDetails()
|
|
self.showHideNSDetails()
|
|
|
- return }
|
|
|
|
|
- // check the format of the URL entered by the user and trim away any spaces or "/" at the end
|
|
|
|
|
- var urlNSInput = value.replacingOccurrences(of: "\\s+$", with: "", options: .regularExpression)
|
|
|
|
|
- if urlNSInput.last == "/" {
|
|
|
|
|
- urlNSInput = String(urlNSInput.dropLast())
|
|
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
- UserDefaultsRepository.url.value = urlNSInput.lowercased()
|
|
|
|
|
- // set the row value back to the correctly formatted URL so that the user immediately sees how it should have been written
|
|
|
|
|
- row.value = UserDefaultsRepository.url.value
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // Normalize input: trim, remove unwanted characters, and lowercase
|
|
|
|
|
+ let trimmedAndFiltered = value.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
|
|
|
+ .replacingOccurrences(of: "[^A-Za-z0-9:/._-]", with: "", options: .regularExpression)
|
|
|
|
|
+ .lowercased()
|
|
|
|
|
+
|
|
|
|
|
+ // Further clean-up: Remove trailing slashes
|
|
|
|
|
+ var cleanURL = trimmedAndFiltered
|
|
|
|
|
+ while cleanURL.last == "/" {
|
|
|
|
|
+ cleanURL = String(cleanURL.dropLast())
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Set the cleaned URL
|
|
|
|
|
+ UserDefaultsRepository.url.value = cleanURL
|
|
|
|
|
+ row.value = cleanURL
|
|
|
|
|
+
|
|
|
self.showHideNSDetails()
|
|
self.showHideNSDetails()
|
|
|
globalVariables.nsVerifiedAlert = 0
|
|
globalVariables.nsVerifiedAlert = 0
|
|
|
|
|
|
|
|
// Verify Nightscout URL and token
|
|
// Verify Nightscout URL and token
|
|
|
self.checkNightscoutStatus()
|
|
self.checkNightscoutStatus()
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
<<< TextRow() { row in
|
|
<<< TextRow() { row in
|
|
|
row.title = "NS Token"
|
|
row.title = "NS Token"
|
|
|
row.placeholder = "Leave blank if not using tokens"
|
|
row.placeholder = "Leave blank if not using tokens"
|
|
@@ -174,7 +184,7 @@ class SettingsViewController: FormViewController {
|
|
|
row.tag = "loopUser"
|
|
row.tag = "loopUser"
|
|
|
row.value = UserDefaultsRepository.loopUser.value
|
|
row.value = UserDefaultsRepository.loopUser.value
|
|
|
row.hidden = "$showNS == false"
|
|
row.hidden = "$showNS == false"
|
|
|
- }.onChange { [weak self] row in
|
|
|
|
|
|
|
+ }.onChange { row in
|
|
|
guard let value = row.value else { return }
|
|
guard let value = row.value else { return }
|
|
|
UserDefaultsRepository.loopUser.value = value
|
|
UserDefaultsRepository.loopUser.value = value
|
|
|
}
|
|
}
|
|
@@ -182,7 +192,7 @@ class SettingsViewController: FormViewController {
|
|
|
<<< SwitchRow("showDex"){ row in
|
|
<<< SwitchRow("showDex"){ row in
|
|
|
row.title = "Show Dexcom Settings"
|
|
row.title = "Show Dexcom Settings"
|
|
|
row.value = UserDefaultsRepository.showDex.value
|
|
row.value = UserDefaultsRepository.showDex.value
|
|
|
- }.onChange { [weak self] row in
|
|
|
|
|
|
|
+ }.onChange { row in
|
|
|
guard let value = row.value else { return }
|
|
guard let value = row.value else { return }
|
|
|
UserDefaultsRepository.showDex.value = value
|
|
UserDefaultsRepository.showDex.value = value
|
|
|
}
|
|
}
|