]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Properly report progress for download and upload operations in FileProviderExtension
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 7 Mar 2023 19:19:10 +0000 (20:19 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:21 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift

index ffa35979aa6a576828012d529090e425a4120c85..076d1b7c20242d22f0c7fb269bdcf4268d32bc20 100644 (file)
@@ -143,6 +143,8 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
 
         NSLog("Fetching file with name %@ at URL: %@", metadata.fileName, serverUrlFileName)
 
+        var progress = Progress()
+
         do {
             let fileNameLocalPath = try localPathForNCFile(ocId: metadata.ocId, fileNameView: metadata.fileNameView)
 
@@ -159,8 +161,8 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
             }, taskHandler: { task in
                 self.outstandingSessionTasks[serverUrlFileName] = task
                 NSFileProviderManager(for: self.domain)?.register(task, forItemWithIdentifier: itemIdentifier, completionHandler: { _ in })
-            }, progressHandler: { _ in
-
+            }, progressHandler: { downloadProgress in
+                downloadProgress.copyCurrentStateToProgress(progress)
             }) { _, etag, date, _, _, _, error in
                 self.outstandingSessionTasks.removeValue(forKey: serverUrlFileName)
 
@@ -195,7 +197,7 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
             NSLog("Could not find local path for file %@, received error: %@", metadata.fileNameView, error.localizedDescription)
         }
 
-        return Progress()
+        return progress
     }
     
     func createItem(basedOn itemTemplate: NSFileProviderItem, fields: NSFileProviderItemFields, contents url: URL?, options: NSFileProviderCreateItemOptions = [], request: NSFileProviderRequest, completionHandler: @escaping (NSFileProviderItem?, NSFileProviderItemFields, Bool, Error?) -> Void) -> Progress {
@@ -284,14 +286,16 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
             return Progress()
         }
 
+        var progress = Progress()
+
         self.ncKit.upload(serverUrlFileName: newServerUrlFileName,
                           fileNameLocalPath: fileNameLocalPath,
                           requestHandler: { _ in
         }, taskHandler: { task in
             self.outstandingSessionTasks[newServerUrlFileName] = task
             NSFileProviderManager(for: self.domain)?.register(task, forItemWithIdentifier: itemTemplate.itemIdentifier, completionHandler: { _ in })
-        }, progressHandler: { _ in
-
+        }, progressHandler: { uploadProgress in
+            uploadProgress.copyCurrentStateToProgress(progress)
         }) { account, ocId, etag, date, size, _, _, error  in
             self.outstandingSessionTasks.removeValue(forKey: newServerUrlFileName)
 
@@ -327,7 +331,7 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
             completionHandler(fpItem, [], false, nil)
         }
 
-        return Progress()
+        return progress
     }
     
     func modifyItem(_ item: NSFileProviderItem, baseVersion version: NSFileProviderItemVersion, changedFields: NSFileProviderItemFields, contents newContents: URL?, options: NSFileProviderModifyItemOptions = [], request: NSFileProviderRequest, completionHandler: @escaping (NSFileProviderItem?, NSFileProviderItemFields, Bool, Error?) -> Void) -> Progress {
@@ -447,6 +451,8 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
             return Progress()
         }
 
+        var progress = Progress()
+
         if changedFields.contains(.contents) {
             guard newContents != nil else {
                 NSLog("WARNING. Could not upload modified contents as was provided nil contents url. ocId: %@", item.itemIdentifier.rawValue)
@@ -462,8 +468,8 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
             }, taskHandler: { task in
                 self.outstandingSessionTasks[newServerUrlFileName] = task
                 NSFileProviderManager(for: self.domain)?.register(task, forItemWithIdentifier: item.itemIdentifier, completionHandler: { _ in })
-            }, progressHandler: { _ in
-
+            }, progressHandler: { uploadProgress in
+                uploadProgress.copyCurrentStateToProgress(progress)
             }) { account, ocId, etag, date, size, _, _, error  in
                 self.outstandingSessionTasks.removeValue(forKey: newServerUrlFileName)
 
@@ -500,12 +506,12 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
             guard contentUploadError == nil else {
                 NSLog("Stopping modification of item with ocId %@ due to error.", modifiedItem.itemIdentifier.rawValue)
                 completionHandler(modifiedItem, [], false, nil)
-                return Progress()
+                return progress
             }
         }
 
         completionHandler(modifiedItem, [], false, nil)
-        return Progress()
+        return progress
     }
     
     func deleteItem(identifier: NSFileProviderItemIdentifier, baseVersion version: NSFileProviderItemVersion, options: NSFileProviderDeleteItemOptions = [], request: NSFileProviderRequest, completionHandler: @escaping (Error?) -> Void) -> Progress {