marinofaggiana 4 years ago
parent
commit
67dbd9f3ae

+ 1 - 1
Cartfile.resolved

@@ -19,7 +19,7 @@ github "marinofaggiana/AFNetworking" "2967678c3e0e98c9b8d7e06222ad12d1f49c26f2"
 github "marinofaggiana/KTVHTTPCache" "2.0.2"
 github "marinofaggiana/TOPasscodeViewController" "0.0.6"
 github "marinofaggiana/XLForm" "eb9381ad8129f60402bf412250fb31b95a628a08"
-github "nextcloud/ios-communication-library" "7fb4f42008650ea43e133487e833e7aa9e4e0320"
+github "nextcloud/ios-communication-library" "2388c0a14f8005072d7b3b6f3fc9c6dcb43076ed"
 github "realm/realm-cocoa" "v4.4.1"
 github "rechsteiner/Parchment" "v1.7.0"
 github "scenee/FloatingPanel" "v1.7.4"

+ 3 - 3
iOSClient/AppDelegate.h

@@ -44,7 +44,7 @@
 @interface AppDelegate : UIResponder <UIApplicationDelegate, UNUserNotificationCenterDelegate>
 
 // Timer Process
-@property (nonatomic, strong) NSTimer *timerProcessAutoDownloadUpload;
+@property (nonatomic, strong) NSTimer *timerProcessAutoUpload;
 @property (nonatomic, strong) NSTimer *timerUpdateApplicationIconBadgeNumber;
 @property (nonatomic, strong) NSTimer *timerErrorNetworking;
 
@@ -149,8 +149,8 @@
 - (void)changeTheming:(UIViewController *)viewController tableView:(UITableView *)tableView collectionView:(UICollectionView *)collectionView form:(BOOL)form;
 
 // Task Networking
-- (void)loadAutoDownloadUpload;
-- (void)startLoadAutoDownloadUpload;
+- (void)loadAutoUpload;
+- (void)startLoadAutoUpload;
 
 // Maintenance Mode
 - (void)maintenanceMode:(BOOL)mode;

+ 23 - 113
iOSClient/AppDelegate.m

@@ -123,7 +123,7 @@
     }
         
     // Start Timer
-    self.timerProcessAutoDownloadUpload = [NSTimer scheduledTimerWithTimeInterval:k_timerProcessAutoDownloadUpload target:self selector:@selector(loadAutoDownloadUpload) userInfo:nil repeats:YES];
+    self.timerProcessAutoUpload = [NSTimer scheduledTimerWithTimeInterval:k_timerProcessAutoUpload target:self selector:@selector(loadAutoUpload) userInfo:nil repeats:YES];
     self.timerUpdateApplicationIconBadgeNumber = [NSTimer scheduledTimerWithTimeInterval:k_timerUpdateApplicationIconBadgeNumber target:self selector:@selector(updateApplicationIconBadgeNumber) userInfo:nil repeats:YES];
     [self startTimerErrorNetworking];
 
@@ -233,7 +233,7 @@
         [[NCService shared] middlewarePing];
     }
 
-    // verify task (download/upload) lost
+    // verify upload task lost
     [self verifyTaskLost];
     
     // verify delete Asset Local Identifiers in auto upload
@@ -813,14 +813,11 @@
     
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
         
-        NSInteger counterDownload = [[[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"status = %d OR status == %d OR status == %d", k_metadataStatusWaitDownload, k_metadataStatusInDownload, k_metadataStatusDownloading] sorted:@"fileName" ascending:true] count];
         NSInteger counterUpload = [[[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"status == %d OR status == %d OR status == %d", k_metadataStatusWaitUpload, k_metadataStatusInUpload, k_metadataStatusUploading] sorted:@"fileName" ascending:true] count];
-
-        NSInteger total = counterDownload + counterUpload;
         
         dispatch_async(dispatch_get_main_queue(), ^{
             
-            [UIApplication sharedApplication].applicationIconBadgeNumber = total;
+            [UIApplication sharedApplication].applicationIconBadgeNumber = counterUpload;
             
             UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
             if ([splitViewController isKindOfClass:[UISplitViewController class]]) {
@@ -830,8 +827,8 @@
                     if ([tabBarController isKindOfClass:[UITabBarController class]]) {
                         UITabBarItem *tabBarItem = [tabBarController.tabBar.items objectAtIndex:0];
                             
-                        if (total > 0) {
-                            [tabBarItem setBadgeValue:[NSString stringWithFormat:@"%li", (unsigned long)total]];
+                        if (counterUpload > 0) {
+                            [tabBarItem setBadgeValue:[NSString stringWithFormat:@"%li", (unsigned long)counterUpload]];
                         } else {
                             [tabBarItem setBadgeValue:nil];
                         }
@@ -1135,88 +1132,45 @@
 }
 
 #pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Process Load Download/Upload < k_timerProcess seconds > =====
+#pragma mark ===== Process Load Upload < k_timerProcess seconds > =====
 #pragma --------------------------------------------------------------------------------------------
 
-- (void)loadAutoDownloadUpload
+- (void)loadAutoUpload
 {
     if (self.activeAccount.length == 0 || self.maintenanceMode)
         return;
     
-    tableMetadata *metadataForUpload, *metadataForDownload;
-    long counterDownload = 0, counterUpload = 0;
-    NSUInteger sizeDownload = 0, sizeUpload = 0;
+    tableMetadata *metadataForUpload;
+    long counterUpload = 0;
+    NSUInteger sizeUpload = 0;
     NSMutableArray *uploaded = [NSMutableArray new];
     NSPredicate *predicate;
     
-    long maxConcurrentOperationDownloadUpload = k_maxConcurrentOperation;
+    long maxConcurrentOperationUpload = k_maxConcurrentOperation;
     
-    NSArray *metadatasDownload = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"status == %d OR status == %d", k_metadataStatusInDownload, k_metadataStatusDownloading] sorted:nil ascending:true];
     NSArray *metadatasUpload = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"status == %d OR status == %d", k_metadataStatusInUpload, k_metadataStatusUploading] sorted:nil ascending:true];
     
     // E2EE only 1
-    for(tableMetadata *metadata in metadatasDownload) {
-        if ([CCUtility isFolderEncrypted:metadata.serverUrl e2eEncrypted:metadata.e2eEncrypted account:metadata.account]) return;
-    }
     for(tableMetadata *metadata in metadatasUpload) {
         if ([CCUtility isFolderEncrypted:metadata.serverUrl e2eEncrypted:metadata.e2eEncrypted account:metadata.account]) return;
     }
     
     // Counter
-    counterDownload = [metadatasDownload count];
     counterUpload = [metadatasUpload count];
     
     // Size
-    for (tableMetadata *metadata in metadatasDownload) {
-        sizeDownload = sizeDownload + metadata.size;
-    }
     for (tableMetadata *metadata in metadatasUpload) {
         sizeUpload = sizeUpload + metadata.size;
     }
     
-    NSLog(@"%@", [NSString stringWithFormat:@"[LOG] PROCESS-AUTO-UPLOAD | Download %ld - %@ | Upload %ld - %@", counterDownload, [CCUtility transformedSize:sizeDownload], counterUpload, [CCUtility transformedSize:sizeUpload]]);
+    NSLog(@"%@", [NSString stringWithFormat:@"[LOG] PROCESS-AUTO-UPLOAD Upload %ld - %@", counterUpload, [CCUtility transformedSize:sizeUpload]]);
     
     // Stop Timer
-    [_timerProcessAutoDownloadUpload invalidate];
-    
-    // ------------------------- <selector Download> -------------------------
-    
-    while (counterDownload < maxConcurrentOperationDownloadUpload) {
+    [_timerProcessAutoUpload invalidate];
         
-        metadataForDownload = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"status == %d", k_metadataStatusWaitDownload] sorted:@"date" ascending:YES];
-        if (metadataForDownload) {
-            
-            if ([CCUtility isFolderEncrypted:metadataForDownload.serverUrl e2eEncrypted:metadataForDownload.e2eEncrypted account:metadataForDownload.account]) {
-                
-                if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) { break; }
-                maxConcurrentOperationDownloadUpload = 1;
-                
-                metadataForDownload.status = k_metadataStatusInDownload;
-                tableMetadata *metadata = [[NCManageDatabase sharedInstance] addMetadata:metadataForDownload];
-                
-                [[CCNetworking sharedNetworking] downloadFile:metadata taskStatus:k_taskStatusResume];
-                
-                break;
-                                
-            } else {
-                
-                metadataForDownload.status = k_metadataStatusInDownload;
-                tableMetadata *metadata = [[NCManageDatabase sharedInstance] addMetadata:metadataForDownload];
-                
-                [[CCNetworking sharedNetworking] downloadFile:metadata taskStatus:k_taskStatusResume];
-                
-                counterDownload++;
-                sizeDownload = sizeDownload + metadata.size;
-            }
-            
-        } else {
-            break;
-        }
-    }
-    
     // ------------------------- <selector Upload> -------------------------
     
-    while (counterUpload < maxConcurrentOperationDownloadUpload) {
+    while (counterUpload < maxConcurrentOperationUpload) {
         
         if (sizeUpload > k_maxSizeOperationUpload) {
             break;
@@ -1250,7 +1204,7 @@
                 if ([CCUtility isFolderEncrypted:metadataForUpload.serverUrl e2eEncrypted:metadataForUpload.e2eEncrypted account:metadataForUpload.account]) {
                 
                     if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) { break; }
-                    maxConcurrentOperationDownloadUpload = 1;
+                    maxConcurrentOperationUpload = 1;
                     
                     metadataForUpload.status = k_metadataStatusInUpload;
                     tableMetadata *metadata = [[NCManageDatabase sharedInstance] addMetadata:metadataForUpload];
@@ -1285,7 +1239,7 @@
     
     // ------------------------- <selector Auto Upload> -------------------------
     
-    while (counterUpload < maxConcurrentOperationDownloadUpload) {
+    while (counterUpload < maxConcurrentOperationUpload) {
         
         if (sizeUpload > k_maxSizeOperationUpload) {
             break;
@@ -1303,7 +1257,7 @@
             if ([CCUtility isFolderEncrypted:metadataForUpload.serverUrl e2eEncrypted:metadataForUpload.e2eEncrypted account:metadataForUpload.account]) {
                 
                 if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) { break; }
-                maxConcurrentOperationDownloadUpload = 1;
+                maxConcurrentOperationUpload = 1;
                 
                 metadataForUpload.status = k_metadataStatusInUpload;
                 tableMetadata *metadata = [[NCManageDatabase sharedInstance] addMetadata:metadataForUpload];
@@ -1322,7 +1276,6 @@
                 counterUpload++;
                 sizeUpload = sizeUpload + metadata.size;
             }
-            
            
         } else {
             break;
@@ -1341,7 +1294,7 @@
         
     } else {
         
-        while (counterUpload < maxConcurrentOperationDownloadUpload) {
+        while (counterUpload < maxConcurrentOperationUpload) {
             
             if (sizeUpload > k_maxSizeOperationUpload) {
                 break;
@@ -1359,7 +1312,7 @@
                 if ([CCUtility isFolderEncrypted:metadataForUpload.serverUrl e2eEncrypted:metadataForUpload.e2eEncrypted account:metadataForUpload.account]) {
                 
                     if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) { break; }
-                    maxConcurrentOperationDownloadUpload = 1;
+                    maxConcurrentOperationUpload = 1;
                     
                     metadataForUpload.status = k_metadataStatusInUpload;
                     tableMetadata *metadata = [[NCManageDatabase sharedInstance] addMetadata:metadataForUpload];
@@ -1386,22 +1339,6 @@
         }
     }
     
-    // No Download/upload available ? --> remove errors for retry
-    //
-    if (counterDownload+counterUpload < maxConcurrentOperationDownloadUpload+1) {
-        
-        NSArray *metadatas = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"status == %d OR status == %d", k_metadataStatusDownloadError, k_metadataStatusUploadError] sorted:nil ascending:NO];
-        for (tableMetadata *metadata in metadatas) {
-            
-            if (metadata.status == k_metadataStatusDownloadError)
-                metadata.status = k_metadataStatusWaitDownload;
-            else if (metadata.status == k_metadataStatusUploadError)
-                metadata.status = k_metadataStatusWaitUpload;
-            
-            [[NCManageDatabase sharedInstance] addMetadata:metadata];
-        }
-    }
-    
     // Upload in pending
     //
     NSArray *metadatasInUpload = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"session != %@ AND status == %d AND sessionTaskIdentifier == 0", k_upload_session_extension, k_metadataStatusInUpload] sorted:nil ascending:true];
@@ -1418,45 +1355,18 @@
     }
     
     // Start Timer
-    _timerProcessAutoDownloadUpload = [NSTimer scheduledTimerWithTimeInterval:k_timerProcessAutoDownloadUpload target:self selector:@selector(loadAutoDownloadUpload) userInfo:nil repeats:YES];
+    _timerProcessAutoUpload = [NSTimer scheduledTimerWithTimeInterval:k_timerProcessAutoUpload target:self selector:@selector(loadAutoUpload) userInfo:nil repeats:YES];
 }
 
-- (void)startLoadAutoDownloadUpload
+- (void)startLoadAutoUpload
 {
-    if (self.timerProcessAutoDownloadUpload.isValid) {
-        [self performSelectorOnMainThread:@selector(loadAutoDownloadUpload) withObject:nil waitUntilDone:YES];
+    if (self.timerProcessAutoUpload.isValid) {
+        [self performSelectorOnMainThread:@selector(loadAutoUpload) withObject:nil waitUntilDone:YES];
     }
 }
 
 - (void)verifyTaskLost
 {
-    // DOWNLOAD
-    //
-    NSArray *matadatasInDownloading = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"status == %d", k_metadataStatusDownloading] sorted:nil ascending:true];
-    for (tableMetadata *metadata in matadatasInDownloading) {
-        
-        NSURLSession *session = [[CCNetworking sharedNetworking] getSessionfromSessionDescription:metadata.session];
-        
-        [session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
-            
-            NSURLSessionTask *findTask;
-            
-            for (NSURLSessionTask *task in downloadTasks) {
-                if (task.taskIdentifier == metadata.sessionTaskIdentifier) {
-                    findTask = task;
-                }
-            }
-            
-            if (!findTask) {
-                
-                metadata.sessionTaskIdentifier = k_taskIdentifierDone;
-                metadata.status = k_metadataStatusWaitDownload;
-                
-                (void)[[NCManageDatabase sharedInstance] addMetadata:metadata];
-            }
-        }];
-    }
-
     // UPLOAD
     //
     NSArray *metadatasUploading = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"session != %@ AND status == %d", k_upload_session_extension, k_metadataStatusUploading] sorted:nil ascending:true];

+ 1 - 1
iOSClient/CCGlobal.h

@@ -168,7 +168,7 @@
 #define k_metadataStatusUploadForcedStart               10
 
 // Timer
-#define k_timerProcessAutoDownloadUpload                5
+#define k_timerProcessAutoUpload                        5
 #define k_timerUpdateApplicationIconBadgeNumber         3
 #define k_timerErrorNetworking                          3
 

+ 1 - 10
iOSClient/Favorites/CCFavorites.m

@@ -647,16 +647,7 @@
                         [self shouldPerformSegue:self.metadata selector:selectorLoadFileView];
                     }
                     
-                    self.metadata.session = k_download_session;
-                    self.metadata.sessionError = @"";
-                    self.metadata.sessionSelector = selectorLoadFileViewFavorite;
-                    self.metadata.status = k_metadataStatusWaitDownload;
-                        
-                    // Add Metadata for Download
-                    [[NCManageDatabase sharedInstance] addMetadata:self.metadata];
-                    [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.metadata.serverUrl ocId:self.metadata.ocId action:k_action_MOD];
-                    
-                    [appDelegate startLoadAutoDownloadUpload];
+                    [[NCNetworking shared] downloadWithMetadata:self.metadata selector:selectorLoadFileViewFavorite setFavorite:false];
                 }
             }
         }

+ 9 - 54
iOSClient/Main/CCMain.m

@@ -534,18 +534,8 @@
         }
                    
         if (!metadata.directory && favorite && [CCUtility getFavoriteOffline]) {
-                       
-            metadata.favorite = favorite;
-            metadata.session = k_download_session;
-            metadata.sessionError = @"";
-            metadata.sessionSelector = selectorDownloadSynchronize;
-            metadata.status = k_metadataStatusWaitDownload;
-                           
-            // Add Metadata for Download
-            [[NCManageDatabase sharedInstance] addMetadata:metadata];
-            [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:metadata.ocId action:k_action_MOD];
-                    
-            [appDelegate startLoadAutoDownloadUpload];
+                   
+            [[NCNetworking shared] downloadWithMetadata:metadata selector:selectorDownloadSynchronize setFavorite:true];
         }
     } else {
         [[NCContentPresenter shared] messageNotification:@"_error_" description:errorDescription delay:k_dismissAfterSecond type:messageTypeError errorCode:errorCode];
@@ -814,7 +804,7 @@
                         [[NCManageDatabase sharedInstance] addMetadata:metadataForUpload];
                         [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:nil action:k_action_NULL];
                             
-                        [appDelegate startLoadAutoDownloadUpload];
+                        [appDelegate startLoadAutoUpload];
                     }
 
                 } else {
@@ -934,15 +924,7 @@
             
             if (metadata.directory == NO && ([metadata.typeFile isEqualToString: k_metadataTypeFile_image] || [metadata.typeFile isEqualToString: k_metadataTypeFile_video])) {
                 
-                metadata.session = k_download_session;
-                metadata.sessionError = @"";
-                metadata.sessionSelector = selectorSave;
-                metadata.status = k_metadataStatusWaitDownload;
-                    
-                // Add Metadata for Download
-                [[NCManageDatabase sharedInstance] addMetadata:metadata];
-                
-                [appDelegate startLoadAutoDownloadUpload];
+                [[NCNetworking shared] downloadWithMetadata:metadata selector:selectorSave setFavorite:false];
             }
         }
         
@@ -1133,7 +1115,7 @@
         [[NCManageDatabase sharedInstance] addMetadatas:metadatasNOConflict];
         [[NCManageDatabase sharedInstance] addMetadatas:metadatasMOV];
         
-        [appDelegate startLoadAutoDownloadUpload];
+        [appDelegate startLoadAutoUpload];
         [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:nil action:k_action_NULL];
     }
 }
@@ -1938,16 +1920,7 @@
         
     } else {
         
-        self.metadata.session = k_download_session;
-        self.metadata.sessionError = @"";
-        self.metadata.sessionSelector = selectorLoadCopy;
-        self.metadata.status = k_metadataStatusWaitDownload;
-            
-        // Add Metadata for Download
-        [[NCManageDatabase sharedInstance] addMetadata:self.metadata];
-        [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:self.metadata.ocId action:k_action_MOD];
-        
-        [appDelegate startLoadAutoDownloadUpload];
+        [[NCNetworking shared] downloadWithMetadata:self.metadata selector:selectorLoadCopy setFavorite:false];
     }
 }
 
@@ -1967,16 +1940,7 @@
             
         } else {
 
-            metadata.session = k_download_session;
-            metadata.sessionError = @"";
-            metadata.sessionSelector = selectorLoadCopy;
-            metadata.status = k_metadataStatusWaitDownload;
-                
-            // Add Metadata for Download
-            [[NCManageDatabase sharedInstance] addMetadata:metadata];
-            [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:metadata.ocId action:k_action_MOD];
-            
-            [appDelegate startLoadAutoDownloadUpload];
+            [[NCNetworking shared] downloadWithMetadata:metadata selector:selectorLoadCopy setFavorite:false];
         }
     }
     
@@ -2062,7 +2026,7 @@
     
     [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:nil action:k_action_NULL];
     
-    [appDelegate startLoadAutoDownloadUpload];
+    [appDelegate startLoadAutoUpload];
 }
 
 #pragma mark -
@@ -2753,16 +2717,7 @@
                         [self shouldPerformSegue:self.metadata selector:selectorLoadFileView];
                     }
                    
-                    self.metadata.session = k_download_session;
-                    self.metadata.sessionError = @"";
-                    self.metadata.sessionSelector = selectorLoadFileView;
-                    self.metadata.status = k_metadataStatusWaitDownload;
-                    
-                    // Add Metadata for Download
-                    [[NCManageDatabase sharedInstance] addMetadata:self.metadata];
-                    [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:self.metadata.ocId action:k_action_MOD];
-                    
-                    [appDelegate startLoadAutoDownloadUpload];
+                    [[NCNetworking shared] downloadWithMetadata:self.metadata selector:selectorLoadFileView setFavorite:false];
                 }
             }
         }

+ 1 - 1
iOSClient/Main/Create cloud/NCCreateFormUploadConflict.swift

@@ -228,7 +228,7 @@ extension NCCreateFormUploadConflictDelegate {
         } else {
             
             NCManageDatabase.sharedInstance.addMetadatas(metadatasNOConflict)
-            appDelegate.startLoadAutoDownloadUpload()
+            appDelegate.startLoadAutoUpload()
             NCMainCommon.sharedInstance.reloadDatasource(ServerUrl: serverUrl, ocId: nil, action: Int32(k_action_NULL))
         }
                 

+ 1 - 1
iOSClient/Main/Create cloud/NCCreateFormUploadScanDocument.swift

@@ -565,7 +565,7 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC
         NCManageDatabase.sharedInstance.addMetadata(metadata)
         NCMainCommon.sharedInstance.reloadDatasource(ServerUrl: serverUrl, ocId: nil, action: Int32(k_action_NULL))
 
-        self.appDelegate.startLoadAutoDownloadUpload()
+        self.appDelegate.startLoadAutoUpload()
                         
         // Request delete all image scanned
         let alertController = UIAlertController(title: "", message: NSLocalizedString("_delete_all_scanned_images_", comment: ""), preferredStyle: .alert)

+ 1 - 1
iOSClient/Main/Create cloud/NCCreateFormUploadVoiceNote.swift

@@ -267,7 +267,7 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud
         NCManageDatabase.sharedInstance.addMetadata(metadata)
         NCMainCommon.sharedInstance.reloadDatasource(ServerUrl: self.serverUrl, ocId: nil, action: Int32(k_action_NULL))
 
-        self.appDelegate.startLoadAutoDownloadUpload()
+        self.appDelegate.startLoadAutoUpload()
         
         self.dismiss(animated: true, completion: nil)
     }

+ 2 - 12
iOSClient/Main/Menu/CCMain+Menu.swift

@@ -486,22 +486,12 @@ extension CCMain {
                         action: { menuAction in
                             if (localFile == nil || !CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView)) {
                                 
-                                metadata.session = k_download_session
-                                metadata.sessionError = ""
-                                metadata.sessionSelector = selectorLoadOffline
-                                metadata.status = Int(k_metadataStatusWaitDownload)
-                                NCManageDatabase.sharedInstance.addMetadata(metadata)
+                                NCNetworking.shared.download(metadata: metadata, selector: selectorLoadOffline)
                                 
                                 if let metadataLivePhoto = NCUtility.sharedInstance.isLivePhoto(metadata: metadata) {
-                                    metadataLivePhoto.session = k_download_session
-                                    metadataLivePhoto.sessionError = ""
-                                    metadataLivePhoto.sessionSelector = selectorLoadOffline
-                                    metadataLivePhoto.status = Int(k_metadataStatusWaitDownload)
-                                    NCManageDatabase.sharedInstance.addMetadata(metadataLivePhoto)
+                                    NCNetworking.shared.download(metadata: metadataLivePhoto, selector: selectorLoadOffline)
                                 }
                                 
-                                NCMainCommon.sharedInstance.reloadDatasource(ServerUrl: self.serverUrl, ocId: metadata.ocId, action: k_action_MOD)
-                                appDelegate.startLoadAutoDownloadUpload()
                             } else {
                                 NCManageDatabase.sharedInstance.setLocalFile(ocId: metadata.ocId, offline: !localFile!.offline)
                                 DispatchQueue.main.async {

+ 1 - 7
iOSClient/Main/Menu/NCDetailNavigationController+Menu.swift

@@ -144,13 +144,7 @@ extension NCDetailNavigationController {
                     action: { menuAction in
                         if ((localFile == nil || !CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView)) && metadata.session == "") {
                             
-                            metadata.session = k_download_session
-                            metadata.sessionError = ""
-                            metadata.sessionSelector = selectorLoadOffline
-                            metadata.status = Int(k_metadataStatusWaitDownload)
-
-                            NCManageDatabase.sharedInstance.addMetadata(metadata)
-                            self.appDelegate.startLoadAutoDownloadUpload()
+                            NCNetworking.shared.download(metadata: metadata, selector: selectorLoadOffline)
                             
                         } else {
                             NCManageDatabase.sharedInstance.setLocalFile(ocId: metadata.ocId, offline: !localFile!.offline)

+ 6 - 20
iOSClient/Main/NCDetailViewController.swift

@@ -368,18 +368,12 @@ class NCDetailViewController: UIViewController {
         
         if let userInfo = notification.userInfo as NSDictionary? {
             if let metadata = userInfo["metadata"] as? tableMetadata {
-                metadata.session = k_download_session
-                metadata.sessionError = ""
-                metadata.sessionSelector = ""
-                metadata.status = Int(k_metadataStatusWaitDownload)
-                
-                self.metadata = NCManageDatabase.sharedInstance.addMetadata(metadata)
-                
+
+                NCNetworking.shared.download(metadata: metadata, selector: "")
+
                 if let index = metadatas.firstIndex(where: { $0.ocId == metadata.ocId }) {
                     metadatas[index] = self.metadata!
-                }
-                
-                appDelegate.startLoadAutoDownloadUpload()
+                }                
             }
         }
     }
@@ -685,15 +679,7 @@ extension NCDetailViewController: NCViewerImageViewControllerDelegate, NCViewerI
             
             if NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "ocId == %@ AND session != ''", metadata.ocId)) == nil {
                 
-                let metadata = NCManageDatabase.sharedInstance.initNewMetadata(metadata)
-                                          
-                metadata.session = k_download_session
-                metadata.sessionError = ""
-                metadata.sessionSelector = ""
-                metadata.status = Int(k_metadataStatusWaitDownload)
-                                          
-                NCManageDatabase.sharedInstance.addMetadata(metadata)
-                appDelegate.startLoadAutoDownloadUpload()
+                NCNetworking.shared.download(metadata: metadata, selector: "")
             }
             
             completion(index, NCViewerImageCommon.shared.getImageOffOutline(frame: self.view.frame, type: metadata.typeFile), metadata, ZoomScale.default, nil)
@@ -716,7 +702,7 @@ extension NCDetailViewController: NCViewerImageViewControllerDelegate, NCViewerI
                 
                 if errorCode == 0 && account == metadata.account {
                     
-                    _ = NCManageDatabase.sharedInstance.addLocalFile(metadata: metadata)
+                    NCManageDatabase.sharedInstance.addLocalFile(metadata: metadata)
                     
                     if let image = NCViewerImageCommon.shared.getImage(metadata: metadata) {
                         completion(index, image, metadata, ZoomScale.default, nil)

+ 1 - 7
iOSClient/Main/NCMainCommon.swift

@@ -873,13 +873,7 @@ class NCMainCommon: NSObject, NCAudioRecorderViewControllerDelegate, UIDocumentI
                                     
         } else {
             
-            metadata.session = k_download_session
-            metadata.sessionError = ""
-            metadata.sessionSelector = selector //selectorOpenIn
-            metadata.status = Int(k_metadataStatusWaitDownload)
-            
-            NCManageDatabase.sharedInstance.addMetadata(metadata)
-            reloadDatasource(ServerUrl: metadata.serverUrl, ocId: metadata.ocId, action: k_action_MOD)
+            NCNetworking.shared.download(metadata: metadata, selector: selector)
         }
     }
 

+ 2 - 3
iOSClient/Networking/CCNetworking.h

@@ -42,9 +42,8 @@
 - (NSURLSession *)getSessionfromSessionDescription:(NSString *)sessionDescription;
 - (void)invalidateAndCancelAllSession;
 
-#pragma mark ===== Download =====
-
-- (void)downloadFile:(tableMetadata *)metadata taskStatus:(NSInteger)taskStatus;
+//#pragma mark ===== Download =====
+//- (void)downloadFile:(tableMetadata *)metadata taskStatus:(NSInteger)taskStatus;
 
 #pragma mark ===== Upload =====
 

+ 55 - 0
iOSClient/Networking/NCNetworking.swift

@@ -167,6 +167,61 @@ import NCCommunication
         return result
     }
     
+    //MARK: - Download
+    @objc func download(metadata: tableMetadata, selector: String, setFavorite: Bool = false) {
+        
+        var metadata = metadata
+        let serverUrlFileName = metadata.serverUrl + "/" + metadata.fileName
+        let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileName)!
+        
+        if metadata.status == Int(k_metadataStatusInDownload) || metadata.status == Int(k_metadataStatusDownloading) {
+            return
+        }
+        
+        metadata.status = Int(k_metadataStatusInDownload)
+        if let result = NCManageDatabase.sharedInstance.addMetadata(metadata) { metadata = result }
+        
+        NCCommunication.shared.download(serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameLocalPath, taskHandler: { (task) in
+            
+            metadata.status = Int(k_metadataStatusDownloading)
+            metadata.sessionTaskIdentifier = task.taskIdentifier
+            if let result = NCManageDatabase.sharedInstance.addMetadata(metadata) { metadata = result }
+            
+            NotificationCenter.default.post(name: Notification.Name.init(rawValue: k_notificationCenter_downloadFileStart), object: nil, userInfo: ["ocId":metadata.ocId, "task":task, "serverUrl":metadata.serverUrl, "account":metadata.account])
+            
+        }, progressHandler: { (progress) in
+            
+            NotificationCenter.default.post(name: Notification.Name.init(rawValue: k_notificationCenter_progressTask), object: nil, userInfo: ["account":metadata.account, "ocId":metadata.ocId, "serverUrl":metadata.serverUrl, "status":NSNumber(value: k_metadataStatusInDownload), "progress":NSNumber(value: progress.fractionCompleted), "totalBytes":NSNumber(value: progress.totalUnitCount), "totalBytesExpected":NSNumber(value: progress.completedUnitCount)])
+            
+        }) { (account, etag, date, length, errorCode, errorDescription) in
+            
+            var errorCode = errorCode
+            var errorDescription = errorDescription ?? ""
+            
+            if errorCode  == 0 || errorCode == Int(CFNetworkErrors.cfurlErrorCancelled.rawValue){
+               
+                errorCode = 0
+                errorDescription = ""
+
+                metadata.date = date ?? NSDate()
+                metadata.etag = etag ?? ""
+                if setFavorite { metadata.favorite = true }
+                metadata.status = Int(k_metadataStatusNormal)
+                
+                NCManageDatabase.sharedInstance.addLocalFile(metadata: metadata)
+                
+            } else {
+                
+                metadata.status = Int(k_metadataStatusDownloadError)
+                metadata.sessionError = errorDescription
+            }
+            
+            if let result = NCManageDatabase.sharedInstance.addMetadata(metadata) { metadata = result }
+
+            NotificationCenter.default.post(name: Notification.Name.init(rawValue: k_notificationCenter_downloadedFile), object: nil, userInfo: ["metadata":metadata, "selector":selector, "errorCode":errorCode, "errorDescription":errorDescription])
+        }
+    }
+    
     //MARK: - WebDav Read file, folder
     
     @objc func readFolder(serverUrl: String, account: String, completion: @escaping (_ account: String, _ metadataFolder: tableMetadata?, _ metadatas: [tableMetadata]?, _ errorCode: Int, _ errorDescription: String)->()) {

+ 3 - 10
iOSClient/Networking/NCNetworkingNotificationCenter.swift

@@ -66,7 +66,6 @@ import Foundation
                     // Synchronized
                     if selector == selectorDownloadSynchronize {
                         appDelegate.updateApplicationIconBadgeNumber()
-                        appDelegate.startLoadAutoDownloadUpload()
                         return
                     }
                     
@@ -137,13 +136,11 @@ import Foundation
                     
                     // Save to Photo Album
                     if selector == selectorSave {
-                        
                         appDelegate.activeMain.save(toPhotoAlbum: metadata)
                     }
                     
                     // Copy File
                     if selector == selectorLoadCopy {
-                        
                         appDelegate.activeMain.copyFile(toPasteboard: metadata)
                     }
                     
@@ -152,9 +149,7 @@ import Foundation
                         
                         NCManageDatabase.sharedInstance.setLocalFile(ocId: metadata.ocId, offline: true)
                     }
-                                
-                    appDelegate.startLoadAutoDownloadUpload()
-                    
+                                         
                 } else {
                     
                     // File do not exists on server, remove in local
@@ -172,9 +167,7 @@ import Foundation
                     } else {
                         NCContentPresenter.shared.messageNotification("_download_file_", description: errorDescription, delay: TimeInterval(k_dismissAfterSecond), type: NCContentPresenter.messageType.error, errorCode: errorCode)
                     }
-                }
-            
-                appDelegate.startLoadAutoDownloadUpload()
+                }            
             }
         }
     }
@@ -201,7 +194,7 @@ import Foundation
                 
                 if metadata.account == appDelegate.activeAccount {
                     if errorCode == 0 {
-                        appDelegate.startLoadAutoDownloadUpload()
+                        appDelegate.startLoadAutoUpload()
                     } else {
                         if errorCode != -999 && errorCode != kOCErrorServerUnauthorized && errorDescription != "" {
                             NCContentPresenter.shared.messageNotification("_upload_file_", description: errorDescription, delay: TimeInterval(k_dismissAfterSecond), type: NCContentPresenter.messageType.error, errorCode: errorCode)

+ 2 - 11
iOSClient/Synchronize/CCSynchronize.m

@@ -290,10 +290,8 @@
 - (void)SynchronizeMetadatas:(NSArray *)metadatas withDownload:(BOOL)withDownload
 {
     NSString *oldServerUrl;
-    NSMutableArray *metadataToAdd = [NSMutableArray new];
     NSMutableArray *serverUrlToReload = [NSMutableArray new];
 
-
     for (tableMetadata *metadata in metadatas) {
         
         // Clear date for dorce refresh view
@@ -303,16 +301,9 @@
             [[NCManageDatabase sharedInstance] clearDateReadWithServerUrl:metadata.serverUrl account:metadata.account];
         }
         
-        metadata.session = k_download_session;
-        metadata.sessionError = @"";
-        metadata.sessionSelector = selectorDownloadSynchronize;
-        metadata.status = k_metadataStatusWaitDownload;
-        
-        [metadataToAdd addObject:metadata];
+        [[NCNetworking shared] downloadWithMetadata:metadata selector:selectorDownloadSynchronize setFavorite:false];
     }
-    
-    [[NCManageDatabase sharedInstance] addMetadatas:metadataToAdd];
-    
+        
     for (NSString *serverUrl in serverUrlToReload) {
         [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:serverUrl ocId:nil action:k_action_NULL];
     }

+ 1 - 1
iOSClient/UploadFromOtherUpp/CCUploadFromOtherUpp.m

@@ -183,7 +183,7 @@
     [[NCManageDatabase sharedInstance] addMetadata:metadataForUpload];
     [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:serverUrlLocal ocId:metadataForUpload.ocId action:k_action_NULL];
 
-    [appDelegate startLoadAutoDownloadUpload];
+    [appDelegate startLoadAutoUpload];
     
     [self dismissViewControllerAnimated:YES completion:nil];
 }