Browse Source

coding

Signed-off-by: marinofaggiana <ios@nextcloud.com>
marinofaggiana 2 years ago
parent
commit
d59dc32eb6

+ 4 - 0
iOSClient/Main/Collection Common/NCCollectionViewCommon.swift

@@ -218,6 +218,9 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
         NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: NCGlobal.shared.notificationCenterProgressTask), object: nil)
 
         pushed = false
+
+        // REQUEST
+        NCNetworking.shared.cancelUnifiedSearchFiles()
     }
 
     func presentationControllerDidDismiss( _ presentationController: UIPresentationController) {
@@ -764,6 +767,7 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
 
     func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
 
+        NCNetworking.shared.cancelUnifiedSearchFiles()
         isSearching = false
         literalSearch = ""
         reloadDataSource()

+ 20 - 2
iOSClient/Networking/NCNetworking.swift

@@ -89,6 +89,11 @@ import Queuer
     }()
     #endif
 
+    // REQUESTS
+
+    var requestsUnifiedSearch: [DataRequest] = []
+
+
     // MARK: - init
 
     override init() {
@@ -925,7 +930,8 @@ import Queuer
     }
 
     /// Unified Search (NC>=20)
-    @objc func unifiedSearchFiles(urlBase: NCUserBaseUrl, literal: String, update: @escaping ([tableMetadata]?) -> Void, completion: @escaping (_ metadatas: [tableMetadata]?, _ errorCode: Int, _ errorDescription: String) -> ()) {
+    ///
+    func unifiedSearchFiles(urlBase: NCUserBaseUrl, literal: String, update: @escaping ([tableMetadata]?) -> Void, completion: @escaping (_ metadatas: [tableMetadata]?, _ errorCode: Int, _ errorDescription: String) -> ()) {
 
         var searchFiles: [tableMetadata] = []
         var errCode = 0
@@ -937,10 +943,14 @@ import Queuer
             completion(Array(searchFiles), errCode, errDescr)
         }
 
-        NCCommunication.shared.unifiedSearch(term: literal) { provider in
+        NCCommunication.shared.unifiedSearch(term: literal, timeout: 60) { provider in
             // example filter
             // ["calendar", "files", "fulltextsearch"].contains(provider.id)
             return true
+        } request: { request in
+            if let request = request {
+                self.requestsUnifiedSearch.append(request)
+            }
         } update: { partialResult, provider, errorCode, errorDescription in
             guard let partialResult = partialResult else { return }
             
@@ -993,12 +1003,20 @@ import Queuer
             }
             update(searchFiles)
         } completion: { results, errorCode, errorDescription in
+            self.requestsUnifiedSearch.removeAll()
             dispatchGroup.leave()
             errCode = errorCode
             errDescr = errorDescription
         }
     }
 
+    func cancelUnifiedSearchFiles() {
+        for request in requestsUnifiedSearch {
+            request.cancel()
+        }
+        requestsUnifiedSearch.removeAll()
+    }
+
     func loadMetadata(urlBase: NCUserBaseUrl, filePath: String, dispatchGroup: DispatchGroup, completion: @escaping (tableMetadata) -> Void) {
         let urlPath = urlBase.urlBase + "/remote.php/dav/files/" + urlBase.user + filePath
         dispatchGroup.enter()