Update properties via ProgressObserver on FileProviderDomainSyncStatus
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 9 Jan 2024 17:07:49 +0000 (01:07 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 19 Feb 2024 14:45:20 +0000 (22:45 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/macOS/fileproviderdomainsyncstatus_mac.mm

index f81ebb01e0f1b98d349e3e45a95690b76aa550b8..373f19868a565cbbf37cb08391a4e41d1747ac0a 100644 (file)
@@ -20,6 +20,8 @@
 
 #import <FileProvider/FileProvider.h>
 
+#import "gui/macOS/progressobserver.h"
+
 namespace OCC::Mac
 {
 
@@ -39,19 +41,35 @@ public:
             return;
         }
 
-        _downloadProgress = [_manager globalProgressForKind:NSProgressFileOperationKindDownloading];
-        _uploadProgress = [_manager globalProgressForKind:NSProgressFileOperationKindUploading];
+        NSProgress *const downloadProgress = [_manager globalProgressForKind:NSProgressFileOperationKindDownloading];
+        NSProgress *const uploadProgress = [_manager globalProgressForKind:NSProgressFileOperationKindUploading];
+        _downloadProgressObserver = [[ProgressObserver alloc] initWithProgress:downloadProgress];
+        _uploadProgressObserver = [[ProgressObserver alloc] initWithProgress:uploadProgress];
+
+        _downloadProgressObserver.progressKVOChangeHandler = ^(NSProgress *const progress){
+            qCDebug(lcMacFileProviderDomainSyncStatus) << "Download progress changed" << progress.localizedDescription;
+            q->setDownloading(!progress.paused && !progress.cancelled && !progress.finished);
+            q->setDownloadFractionCompleted(progress.fractionCompleted);
+            q->setDownloadFileTotalCount(progress.fileTotalCount.intValue);
+            q->setDownloadFileCompletedCount(progress.fileCompletedCount.intValue);
+        };
+        _uploadProgressObserver.progressKVOChangeHandler = ^(NSProgress *const progress){
+            qCDebug(lcMacFileProviderDomainSyncStatus) << "Upload progress changed" << progress.localizedDescription;
+            q->setUploading(!progress.paused && !progress.cancelled && !progress.finished);
+            q->setUploadFractionCompleted(progress.fractionCompleted);
+            q->setUploadFileTotalCount(progress.fileTotalCount.intValue);
+            q->setUploadFileCompletedCount(progress.fileCompletedCount.intValue);
+        };
     }
 
     ~MacImplementation() = default;
 
 private:
-    NSFileProviderDomain *_domain;
-    NSFileProviderManager *_manager;
-    NSProgress *_downloadProgress;
-    NSProgress *_uploadProgress;
-    QTimer _timer;
-    FileProviderDomainSyncStatus *q;
+    NSFileProviderDomain *_domain = nil;
+    NSFileProviderManager *_manager = nil;
+    ProgressObserver *_downloadProgressObserver = nullptr;
+    ProgressObserver *_uploadProgressObserver = nullptr;
+    FileProviderDomainSyncStatus *q = nullptr;
 };
 
 FileProviderDomainSyncStatus::FileProviderDomainSyncStatus(const QString &domainIdentifier, QObject *parent)