فهرست منبع

Add support for pasting URL with token to populate both fields for easier testing

Jonas Björkert 2 سال پیش
والد
کامیت
8a9ec53eba
1فایلهای تغییر یافته به همراه37 افزوده شده و 12 حذف شده
  1. 37 12
      LoopFollow/ViewControllers/SettingsViewController.swift

+ 37 - 12
LoopFollow/ViewControllers/SettingsViewController.swift

@@ -12,8 +12,8 @@ import EventKit
 import EventKitUI
 import EventKitUI
 
 
 class SettingsViewController: FormViewController {
 class SettingsViewController: FormViewController {
-
-   var appStateController: AppStateController?
+    var tokenRow: TextRow?
+    var appStateController: AppStateController?
     var statusLabelRow: LabelRow!
     var statusLabelRow: LabelRow!
 
 
     func showHideNSDetails() {
     func showHideNSDetails() {
@@ -38,7 +38,6 @@ class SettingsViewController: FormViewController {
         
         
         guard let nightscoutTab = self.tabBarController?.tabBar.items![3] else { return }
         guard let nightscoutTab = self.tabBarController?.tabBar.items![3] else { return }
         nightscoutTab.isEnabled = isEnabled
         nightscoutTab.isEnabled = isEnabled
-        
     }
     }
    
    
     // Determine if the build is from TestFlight
     // Determine if the build is from TestFlight
@@ -131,18 +130,43 @@ class SettingsViewController: FormViewController {
                return
                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()
            self.showHideNSDetails()
            globalVariables.nsVerifiedAlert = 0
            globalVariables.nsVerifiedAlert = 0
@@ -156,6 +180,7 @@ class SettingsViewController: FormViewController {
            row.placeholder = "Leave blank if not using tokens"
            row.placeholder = "Leave blank if not using tokens"
            row.value = UserDefaultsRepository.token.value
            row.value = UserDefaultsRepository.token.value
            row.hidden = "$showNS == false"
            row.hidden = "$showNS == false"
+           self.tokenRow = row
        }.cellSetup { (cell, row) in
        }.cellSetup { (cell, row) in
            cell.textField.autocorrectionType = .no
            cell.textField.autocorrectionType = .no
            cell.textField.autocapitalizationType = .none
            cell.textField.autocapitalizationType = .none