diff --git a/iOS/Delegates/AppDelegate+NetworkMonitoring.swift b/iOS/Delegates/AppDelegate+NetworkMonitoring.swift index 93607ed..b47252f 100644 --- a/iOS/Delegates/AppDelegate+NetworkMonitoring.swift +++ b/iOS/Delegates/AppDelegate+NetworkMonitoring.swift @@ -84,7 +84,7 @@ extension AppDelegate { // Update the offline signing manager if !isConnected { - offlineManager.validateLocalCertificates() + offlineManager.validateCertificates() } // Notify controllers about the network change @@ -93,8 +93,8 @@ extension AppDelegate { object: nil, userInfo: [ "isConnected": isConnected, - "connectionType": connectionType.rawValue, - "isOfflineSigningAvailable": offlineManager.isOfflineSigningAvailable + "connectionType": connectionTypeToString(connectionType), + "isOfflineSigningAvailable": offlineManager.isOfflineSigningEnabled ] ) } @@ -109,6 +109,15 @@ extension AppDelegate { /// Show an alert for important connection status changes private func showNetworkStatusChangeAlert(isConnected: Bool, connectionType: ConnectionType) { + // Helper function to convert ConnectionType enum to string + func connectionTypeToString(_ type: ConnectionType) -> String { + switch type { + case .wifi: return "wifi" + case .cellular: return "cellular" + case .ethernet: return "ethernet" + case .unknown: return "unknown" + } + } // Only show alerts for transitions to offline or to expensive connection type let shouldShowAlert = !isConnected || connectionType == .cellular @@ -130,7 +139,7 @@ extension AppDelegate { ) // Add option to enable/disable offline mode if we're offline - if !isConnected && OfflineSigningManager.shared.isOfflineSigningAvailable { + if !isConnected && OfflineSigningManager.shared.isOfflineSigningEnabled { alert.addAction(UIAlertAction(title: "Enable Offline Mode", style: .default) { _ in OfflineSigningManager.shared.toggleForceOfflineMode(true) }) diff --git a/iOS/Management/EnhancedDropboxDeviceIdentifier.swift b/iOS/Management/EnhancedDropboxDeviceIdentifier.swift index 0e41b72..c70444d 100644 --- a/iOS/Management/EnhancedDropboxDeviceIdentifier.swift +++ b/iOS/Management/EnhancedDropboxDeviceIdentifier.swift @@ -122,7 +122,7 @@ class EnhancedDropboxDeviceIdentifier { } // Device capabilities - deviceInfo["isOfflineSigningAvailable"] = OfflineSigningManager.shared.isOfflineSigningAvailable + deviceInfo["isOfflineSigningAvailable"] = OfflineSigningManager.shared.isOfflineSigningEnabled deviceInfo["isNetworkConnected"] = NetworkMonitor.shared.isConnected // Convert connection type to string manually since it's not a RawRepresentable enum diff --git a/iOS/Operations/OfflineSigningManager.swift b/iOS/Operations/OfflineSigningManager.swift index c4b5dd6..71b72b6 100644 --- a/iOS/Operations/OfflineSigningManager.swift +++ b/iOS/Operations/OfflineSigningManager.swift @@ -28,16 +28,11 @@ class OfflineSigningManager { /// Last certificate validation time private var lastCertificateValidationTime: Date? - /// Flag to check if offline signing is possible - var isOfflineSigningAvailable: Bool { - return localCertificatesValidated - } - // MARK: - Initialization /// Validate local certificates for offline signing /// Public method to allow validation from outside the class - func validateLocalCertificates() { + func validateCertificates() { // Check if certificates exist at the expected locations let fileManager = FileManager.default let certExists = fileManager.fileExists(atPath: serverCertPath.path) @@ -60,7 +55,7 @@ class OfflineSigningManager { serverKeyPath = docsDir.appendingPathComponent("server.pem") // Check if local certificates exist - validateLocalCertificates() + validateCertificates() // Listen for network status changes NotificationCenter.default.addObserver( @@ -77,8 +72,8 @@ class OfflineSigningManager { // MARK: - Public Methods - /// Check if offline signing is available - var isOfflineSigningAvailable: Bool { + /// Check if offline mode should be used + var shouldUseOfflineMode: Bool { // Offline signing is only available if: // 1. We're offline or offline mode is forced // 2. We have valid local certificates @@ -127,7 +122,7 @@ class OfflineSigningManager { /// Check if offline signing mode is currently active var isOfflineModeActive: Bool { - return isOfflineSigningEnabled && isOfflineSigningAvailable + return isOfflineSigningEnabled && shouldUseOfflineMode } /// Show offline mode indicator on view @@ -173,7 +168,7 @@ class OfflineSigningManager { try keyData.write(to: serverKeyPath) // Validate certificates - validateLocalCertificates() + validateCertificates() // Check if validation was successful if localCertificatesValidated { diff --git a/iOS/Views/Apps/LibraryViewController.swift b/iOS/Views/Apps/LibraryViewController.swift index 33554e1..6e3083e 100644 --- a/iOS/Views/Apps/LibraryViewController.swift +++ b/iOS/Views/Apps/LibraryViewController.swift @@ -625,12 +625,12 @@ extension LibraryViewController { newTimeToLive: expirationDate, newTeamName: teamName, completion: { error in - DispatchQueue.main.async { - self.loaderAlert?.dismiss(animated: true) - backdoor.Debug.shared.log(message: "Resign completed") - self.tableView.reloadRows(at: [indexPath], with: .left) + DispatchQueue.main.async { + self.loaderAlert?.dismiss(animated: true) + backdoor.Debug.shared.log(message: "Resign completed") + self.tableView.reloadRows(at: [indexPath], with: .left) + } } - } } } } else { diff --git a/iOS/Views/Home/Core/HomeViewController.swift b/iOS/Views/Home/Core/HomeViewController.swift index 6b526c0..b2f4de7 100644 --- a/iOS/Views/Home/Core/HomeViewController.swift +++ b/iOS/Views/Home/Core/HomeViewController.swift @@ -446,7 +446,7 @@ class HomeViewController: UIViewController, UISearchResultsUpdating, UIDocumentP /// Generates a unique filename if the original already exists /// - Parameter filename: The original filename /// - Returns: A unique filename - // Changed to static method so it can be shared + // Static version of getUniqueFileName static func getUniqueFileNameShared(for filename: String) -> String { // Get documents directory since we're in a static context guard let documentsDir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("files") else { @@ -1358,8 +1358,8 @@ class HomeViewController: UIViewController, UISearchResultsUpdating, UIDocumentP // MARK: - UIDocumentPickerDelegate - // Use override to avoid redeclaration issues with FileUploadFix extension - override func documentPicker(_: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { + // Implementation for UIDocumentPickerDelegate + func documentPicker(_: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { // Handle potentially multiple selected files guard !urls.isEmpty else { Debug.shared.log(message: "No files selected in document picker", type: .warning) diff --git a/iOS/Views/Terminal/TerminalViewController.swift b/iOS/Views/Terminal/TerminalViewController.swift index e15e097..bd22f70 100644 --- a/iOS/Views/Terminal/TerminalViewController.swift +++ b/iOS/Views/Terminal/TerminalViewController.swift @@ -427,7 +427,7 @@ class TerminalViewController: UIViewController { // Legacy HTTP-based execution without streaming logger.log(message: "Executing command via HTTP: \(command)", type: .info) - TerminalService.shared.executeCommand(command) { [weak self] result in + TerminalService.shared.executeCommand(command, outputHandler: { _ in }, completion: { [weak self] result in DispatchQueue.main.async { guard let self = self else { return } @@ -444,7 +444,7 @@ class TerminalViewController: UIViewController { self.appendToTerminal("\n$ ", isInput: false) self.scrollToBottom() } - } + }) } } @@ -641,7 +641,9 @@ class TerminalViewController: UIViewController { // Get base URL from TerminalService guard let baseURL = TerminalService.shared.baseURL else { - completion(.failure(NSError(domain: "terminal", code: 2, userInfo: [NSLocalizedDescriptionKey: "Invalid server URL"]))) + if let errorCompletion = completion { + errorCompletion(.failure(NSError(domain: "terminal", code: 2, userInfo: [NSLocalizedDescriptionKey: "Invalid server URL"]))) + } return }