Browse Source

Fix open-in download count

Use for-in instead of forEach to avoid concurrency probem

Signed-off-by: Henrik Storch <henrik.storch@nextcloud.com>
Henrik Storch 3 years ago
parent
commit
161516736b
1 changed files with 10 additions and 9 deletions
  1. 10 9
      iOSClient/Main/NCFunctionCenter.swift

+ 10 - 9
iOSClient/Main/NCFunctionCenter.swift

@@ -219,20 +219,21 @@ import JGProgressHUD
     }
 
     func openActivityViewController(selectedMetadata: [tableMetadata]) {
-        let processor = ParallelWorker(n: 5, titleKey: "_downloading_", totalTasks: selectedMetadata.count, hudView: self.appDelegate.window?.rootViewController?.view)
+        let metadatas = selectedMetadata.filter({ !$0.directory })
         var items: [URL] = []
+        var downloadMetadata: [(tableMetadata, URL)] = []
 
-        for metadata in selectedMetadata where !metadata.directory {
+        for metadata in metadatas {
             let fileURL = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView))
-            guard !CCUtility.fileProviderStorageExists(metadata) else {
-                items.append(fileURL)
-                continue
-            }
+            if CCUtility.fileProviderStorageExists(metadata) { items.append(fileURL) }
+            else { downloadMetadata.append((metadata, fileURL)) }
+        }
+
+        let processor = ParallelWorker(n: 5, titleKey: "_downloading_", totalTasks: downloadMetadata.count, hudView: self.appDelegate.window?.rootViewController?.view)
+        for (metadata, url) in downloadMetadata {
             processor.execute { completion in
                 NCNetworking.shared.download(metadata: metadata, selector: "", completion: { _ in
-                    if CCUtility.fileProviderStorageExists(metadata) {
-                        items.append(fileURL)
-                    }
+                    if CCUtility.fileProviderStorageExists(metadata) { items.append(url) }
                     completion()
                 })
             }