|
|
@@ -12,8 +12,8 @@ import EventKit
|
|
|
import EventKitUI
|
|
|
|
|
|
class SettingsViewController: FormViewController {
|
|
|
-
|
|
|
- var appStateController: AppStateController?
|
|
|
+ var tokenRow: TextRow?
|
|
|
+ var appStateController: AppStateController?
|
|
|
var statusLabelRow: LabelRow!
|
|
|
|
|
|
func showHideNSDetails() {
|
|
|
@@ -38,7 +38,6 @@ class SettingsViewController: FormViewController {
|
|
|
|
|
|
guard let nightscoutTab = self.tabBarController?.tabBar.items![3] else { return }
|
|
|
nightscoutTab.isEnabled = isEnabled
|
|
|
-
|
|
|
}
|
|
|
|
|
|
// Determine if the build is from TestFlight
|
|
|
@@ -131,18 +130,43 @@ class SettingsViewController: FormViewController {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // Normalize input: remove unwanted characters and lowercase
|
|
|
- let filtered = value.replacingOccurrences(of: "[^A-Za-z0-9:/._-]", with: "", options: .regularExpression).lowercased()
|
|
|
+ var useTokenUrl = false
|
|
|
|
|
|
- // Further clean-up: Remove trailing slashes
|
|
|
- var cleanURL = filtered
|
|
|
- while cleanURL.last == "/" {
|
|
|
- cleanURL = String(cleanURL.dropLast())
|
|
|
+ // Attempt to handle special case: pasted URL including token
|
|
|
+ if let urlComponents = URLComponents(string: value), let queryItems = urlComponents.queryItems {
|
|
|
+ if let tokenItem = queryItems.first(where: { $0.name.lowercased() == "token" }) {
|
|
|
+ let tokenPattern = "^[^-\\s]+-[0-9a-fA-F]{16}$"
|
|
|
+ if let token = tokenItem.value, let _ = token.range(of: tokenPattern, options: .regularExpression) {
|
|
|
+ var baseComponents = urlComponents
|
|
|
+ baseComponents.queryItems = nil
|
|
|
+ if let baseURL = baseComponents.string {
|
|
|
+ UserDefaultsRepository.token.value = token
|
|
|
+ self.tokenRow?.value = token
|
|
|
+ self.tokenRow?.updateCell()
|
|
|
+
|
|
|
+ UserDefaultsRepository.url.value = baseURL
|
|
|
+ row.value = baseURL
|
|
|
+ row.updateCell()
|
|
|
+ useTokenUrl = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- // Set the cleaned URL
|
|
|
- UserDefaultsRepository.url.value = cleanURL
|
|
|
- row.value = cleanURL
|
|
|
+ if !useTokenUrl {
|
|
|
+ // Normalize input: remove unwanted characters and lowercase
|
|
|
+ let filtered = value.replacingOccurrences(of: "[^A-Za-z0-9:/._-]", with: "", options: .regularExpression).lowercased()
|
|
|
+
|
|
|
+ // Further clean-up: Remove trailing slashes
|
|
|
+ var cleanURL = filtered
|
|
|
+ while cleanURL.last == "/" {
|
|
|
+ cleanURL = String(cleanURL.dropLast())
|
|
|
+ }
|
|
|
+
|
|
|
+ UserDefaultsRepository.url.value = cleanURL
|
|
|
+ row.value = cleanURL
|
|
|
+ row.updateCell()
|
|
|
+ }
|
|
|
|
|
|
self.showHideNSDetails()
|
|
|
globalVariables.nsVerifiedAlert = 0
|
|
|
@@ -156,6 +180,7 @@ class SettingsViewController: FormViewController {
|
|
|
row.placeholder = "Leave blank if not using tokens"
|
|
|
row.value = UserDefaultsRepository.token.value
|
|
|
row.hidden = "$showNS == false"
|
|
|
+ self.tokenRow = row
|
|
|
}.cellSetup { (cell, row) in
|
|
|
cell.textField.autocorrectionType = .no
|
|
|
cell.textField.autocapitalizationType = .none
|