Browse Source

coding

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

+ 9 - 6
iOSClient/Main/Collection Common/NCCollectionViewCommon.swift

@@ -751,7 +751,6 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
         self.isSearching = true
 
         self.providers?.removeAll()
-        self.searchResults?.removeAll()
         self.metadatasSource.removeAll()
         self.dataSource.clearDataSource()
 
@@ -774,7 +773,6 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
             self.isSearching = false
             self.literalSearch = ""
             self.providers?.removeAll()
-            self.searchResults?.removeAll()
             self.dataSource.clearDataSource()
 
             self.reloadDataSource()
@@ -1085,11 +1083,15 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
 
             NCNetworking.shared.unifiedSearchFiles(urlBase: appDelegate, literal: literalSearch) { allProviders in
                 self.providers = allProviders
-            } update: { id, searchResults, metadatas in
+            } update: { id, searchResult, metadatas in
                 guard let metadatas = metadatas, metadatas.count > 0, self.isSearching else { return }
 
-                print(id)
+                print("[XXX:]" + id)
+                if id == "files" {
+                    print("files")
+                }
 
+                /*
                 self.searchResults = searchResults
                 self.metadatasSource = metadatas
                 self.dataSource = NCDataSource(metadatasSource: self.metadatasSource,
@@ -1104,9 +1106,11 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
                 DispatchQueue.main.sync {
                     self.collectionView?.reloadData()
                 }
+                */
 
-            } completion: { searchResults, metadatas, errorCode, errorDescription in
+            } completion: {searchResults, errorCode, errorDescription in
 
+                self.searchResults = searchResults
                 self.refreshControl.endRefreshing()
                 self.isReloadDataSourceNetworkInProgress = false
             }
@@ -1117,7 +1121,6 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
 
                 DispatchQueue.main.async { self.refreshControl.endRefreshing() }
                 if  self.isSearching, errorCode == 0, let metadatas = metadatas {
-                    self.searchResults = nil
                     self.metadatasSource = metadatas
                 }
                 self.isReloadDataSourceNetworkInProgress = false

+ 17 - 31
iOSClient/Networking/NCNetworking.swift

@@ -931,17 +931,15 @@ import Queuer
 
     /// Unified Search (NC>=20)
     ///
-    func unifiedSearchFiles(urlBase: NCUserBaseUrl, literal: String, providers: @escaping ([NCCSearchProvider]?) -> Void, update: @escaping (_ id: String, [NCCSearchResult]?, [tableMetadata]?) -> Void, completion: @escaping ([NCCSearchResult]?, _ metadatas: [tableMetadata]?, _ errorCode: Int, _ errorDescription: String) -> ()) {
+    func unifiedSearchFiles(urlBase: NCUserBaseUrl, literal: String, providers: @escaping ([NCCSearchProvider]?) -> Void, update: @escaping (_ id: String, NCCSearchResult?, [tableMetadata]?) -> Void, completion: @escaping ([NCCSearchResult]?, _ errorCode: Int, _ errorDescription: String) -> ()) {
 
-        var searchResults: [NCCSearchResult] = []
-        var searchFiles: [tableMetadata] = []
+        var searchResults: [NCCSearchResult]?
         var errorCode = 0
         var errorDescription = ""
-        let concurrentQueue = DispatchQueue(label: "com.nextcloud.requestUnifiedSearch.concurrentQueue", attributes: .concurrent)
         let dispatchGroup = DispatchGroup()
         dispatchGroup.enter()
         dispatchGroup.notify(queue: .main) {
-            completion(searchResults, Array(searchFiles), errorCode, errorDescription)
+            completion(searchResults, errorCode, errorDescription)
         }
 
         NCCommunication.shared.unifiedSearch(term: literal, timeout: 30, timeoutProvider: 90) { provider in
@@ -956,21 +954,17 @@ import Queuer
             providers(allProviders)
         } update: { partialResult, provider, errorCode, errorDescription in
             guard let partialResult = partialResult else { return }
-            searchResults.append(partialResult)
+            var metadatas: [tableMetadata] = []
 
             switch provider.id {
             case "files":
                 partialResult.entries.forEach({ entry in
                     if let fileId = entry.fileId,
-                       let newMetadata = NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ && fileId == %@", urlBase.userAccount, String(fileId))) {
-                        concurrentQueue.async(flags: .barrier) {
-                            searchFiles.append(newMetadata)
-                        }
+                       let metadata = NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ && fileId == %@", urlBase.userAccount, String(fileId))) {
+                        metadatas.append(metadata)
                     } else if let filePath = entry.filePath {
-                        self.loadMetadata(urlBase: urlBase, filePath: filePath, dispatchGroup: dispatchGroup) { newMetadata in
-                            concurrentQueue.async(flags: .barrier) {
-                                searchFiles.append(newMetadata)
-                            }
+                        self.loadMetadata(urlBase: urlBase, filePath: filePath, dispatchGroup: dispatchGroup) { metadata in
+                            metadatas.append(metadata)
                         }
                     } else { print(#function, "[ERROR]: File search entry has no path: \(entry)") }
                 })
@@ -981,39 +975,31 @@ import Queuer
                 partialResult.entries.forEach({ entry in
                     let url = URLComponents(string: entry.resourceURL)
                     guard let dir = url?.queryItems?["dir"]?.value, let filename = url?.queryItems?["scrollto"]?.value else { return }
-                    if let newMetadata = NCManageDatabase.shared.getMetadata(predicate: NSPredicate(
+                    if let metadata = NCManageDatabase.shared.getMetadata(predicate: NSPredicate(
                               format: "account == %@ && path == %@ && fileName == %@",
                               urlBase.userAccount,
                               "/remote.php/dav/files/" + urlBase.user + dir,
                               filename)) {
-                        concurrentQueue.async(flags: .barrier) {
-                            searchFiles.append(newMetadata)
-                        }
+                        metadatas.append(metadata)
                     } else {
-                        self.loadMetadata(urlBase: urlBase, filePath: dir + filename, dispatchGroup: dispatchGroup) { newMetadata in
-                            concurrentQueue.async(flags: .barrier) {
-                                searchFiles.append(newMetadata)
-                            }
+                        self.loadMetadata(urlBase: urlBase, filePath: dir + filename, dispatchGroup: dispatchGroup) { metadata in
+                            metadatas.append(metadata)
                         }
                     }
                 })
             default:
                 partialResult.entries.forEach({ entry in
-                    concurrentQueue.async(flags: .barrier) {
-                        let newMetadata = NCManageDatabase.shared.createMetadata(account: urlBase.account, user: urlBase.user, userId: urlBase.userId, fileName: entry.title, fileNameView: entry.title, ocId: NSUUID().uuidString, serverUrl: urlBase.urlBase, urlBase: urlBase.urlBase, url: entry.resourceURL, contentType: "", isUrl: true, name: partialResult.name.lowercased(), subline: entry.subline, iconName: entry.icon, iconUrl: entry.thumbnailURL)
-                        searchFiles.append(newMetadata)
-                    }
+                    let metadata = NCManageDatabase.shared.createMetadata(account: urlBase.account, user: urlBase.user, userId: urlBase.userId, fileName: entry.title, fileNameView: entry.title, ocId: NSUUID().uuidString, serverUrl: urlBase.urlBase, urlBase: urlBase.urlBase, url: entry.resourceURL, contentType: "", isUrl: true, name: partialResult.name.lowercased(), subline: entry.subline, iconName: entry.icon, iconUrl: entry.thumbnailURL)
+                    metadatas.append(metadata)
                 })
             }
-            update(provider.id, searchResults, searchFiles)
+            update(provider.id, partialResult, metadatas)
         } completion: { results, code, description in
             self.requestsUnifiedSearch.removeAll()
-            dispatchGroup.leave()
-            if let results = results {
-                searchResults = results
-            }
+            searchResults = results
             errorCode = code
             errorDescription = description
+            dispatchGroup.leave()
         }
     }