Marino Faggiana 6 anni fa
parent
commit
ade52ae047

+ 11 - 19
PickerFileProvider/FileProviderExtension+Actions.swift

@@ -440,35 +440,27 @@ extension FileProviderExtension {
                 metadata.directoryID = tableDirectory.directoryID
                 metadata.etag = ""
                 metadata.fileID = tableDirectory.directoryID + fileName
-                metadata.size = size
-                metadata.status = Double(k_metadataStatusHide)
                 metadata.fileName = fileName
                 metadata.fileNameView = fileName
+                metadata.path = fileNamePathDirectory
+                metadata.size = size
+                metadata.status = Double(k_metadataStatusHide)
+               
                 CCUtility.insertTypeFileIconName(fileName, metadata: metadata)
-            
+
                 if (size > 0) {
                     
-                    let metadataNet = CCMetadataNet()
-                    
-                    metadataNet.account = self.providerData.account
-                    metadataNet.assetLocalIdentifier = tableDirectory.directoryID + fileName
-                    metadataNet.fileName = fileName
-                    metadataNet.path = fileNamePathDirectory
-                    metadataNet.selector = selectorUploadFile
-                    metadataNet.selectorPost = self.providerData.selectorPostImportDocument
-                    metadataNet.serverUrl = serverUrl
-                    metadataNet.session = k_upload_session_extension
-                    metadataNet.sessionError = ""
-                    metadataNet.taskStatus = Int(k_taskStatusResume)
-                    
-                    _ = NCManageDatabase.sharedInstance.addQueueUpload(metadataNet: metadataNet)
+                    metadata.session = k_upload_session_extension
+                    metadata.sessionSelector = selectorUploadFile
+                    metadata.sessionSelectorPost = self.providerData.selectorPostImportDocument
+                    metadata.status = Double(k_metadataStatusWaitUpload)
                 }
-            
+                
                 guard let metadataDB = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
                     completionHandler(nil, NSFileProviderError(.noSuchItem))
                     return
                 }
-            
+                            
                 let item = FileProviderItem(metadata: metadataDB, parentItemIdentifier: parentItemIdentifier, providerData: self.providerData)
             
                 completionHandler(item, nil)

+ 19 - 14
PickerFileProvider/FileProviderExtension+Network.swift

@@ -183,6 +183,11 @@ extension FileProviderExtension {
         /* ONLY iOS 11*/
         guard #available(iOS 11, *) else { return }
 
+        metadata.status = Double(k_metadataStatusUploading)
+        guard let metadata = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
+            return
+        }
+        
         guard let parentItemIdentifier = providerData.getParentItemIdentifier(metadata: metadata) else {
             return
         }
@@ -305,20 +310,19 @@ extension FileProviderExtension {
     
     func uploadFileImportDocument() {
         
-        let queueInLock = NCManageDatabase.sharedInstance.getQueueUploadInLock()
-        if queueInLock != nil && queueInLock!.count == 0 {
+        let tableMetadatas = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account = %@ AND session = %@ AND (status = %d || status = %d)", providerData.account, k_upload_session_extension, k_metadataStatusInUpload, k_metadataStatusUploading), sorted: "fileName", ascending: true)
+        
+        if (tableMetadatas == nil || (tableMetadatas!.count < Int(k_maxConcurrentOperationUpload))) {
+            
+            let metadataForUpload = tableMetadatas![0]
             
-            let metadataNetQueue = NCManageDatabase.sharedInstance.lockQueueUpload(selector: selectorUploadFile, session: k_upload_session_extension)
-            if  metadataNetQueue != nil {
+            if self.providerData.copyFile(metadataForUpload.path + "/" + metadataForUpload.fileName, toPath: providerData.directoryUser + "/" + metadataForUpload.fileName) == nil {
                 
-                if self.providerData.copyFile(metadataNetQueue!.path + "/" + metadataNetQueue!.fileName, toPath: providerData.directoryUser + "/" + metadataNetQueue!.fileName) == nil {
-                    
-                    //CCNetworking.shared().uploadFile(metadataNetQueue!.fileName, serverUrl: metadataNetQueue!.serverUrl, assetLocalIdentifier: metadataNetQueue!.assetLocalIdentifier, path:providerData.directoryUser, session: metadataNetQueue!.session, taskStatus: metadataNetQueue!.taskStatus, selector: metadataNetQueue!.selector, selectorPost: metadataNetQueue!.selectorPost, errorCode: 0, delegate: self)
-                    
-                } else {
-                    // file not present, delete record Upload Queue
-                    NCManageDatabase.sharedInstance.deleteQueueUpload(path: metadataNetQueue!.path)
-                }
+                CCNetworking.shared().uploadFile(metadataForUpload, path:  providerData.directoryUser, taskStatus: Int(k_taskStatusResume), delegate: self)
+                
+            } else {
+                
+                NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", providerData.account, metadataForUpload.fileID), clearDateReadDirectoryID: metadataForUpload.directoryID)
             }
         }
     }
@@ -333,13 +337,14 @@ extension FileProviderExtension {
         metadata.session = k_upload_session_extension
         metadata.sessionSelector = selectorUploadFile
         metadata.sessionSelectorPost = providerData.selectorPostItemChanged
-        
+        metadata.status = Double(k_metadataStatusWaitUpload)
+
         guard let metadataForUpload = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
             return
         }
         
         _ = self.providerData.copyFile(url.path, toPath: providerData.directoryUser + "/" + metadata.fileID)
         
-//        CCNetworking.shared().uploadFileMetadata(metadataForUpload, taskStatus: Int(k_taskStatusResume), delegate: self)
+        CCNetworking.shared().uploadFile(metadataForUpload, path:  providerData.directoryUser, taskStatus: Int(k_taskStatusResume), delegate: self)
     }
 }

+ 4 - 26
iOSClient/AppDelegate.m

@@ -220,10 +220,7 @@
         if (shortcutItem)
             [self handleShortCutItem:shortcutItem];
     }
-    
-    // Verify Lock
-    [self verifyLockOnLoadAutoUpload];
-    
+        
     // Start Timer
     self.timerProcessAutoDownloadUpload = [NSTimer scheduledTimerWithTimeInterval:k_timerProcessAutoDownloadUpload target:self selector:@selector(processAutoDownloadUpload) userInfo:nil repeats:YES];
     self.timerUpdateApplicationIconBadgeNumber = [NSTimer scheduledTimerWithTimeInterval:k_timerUpdateApplicationIconBadgeNumber target:self selector:@selector(updateApplicationIconBadgeNumber) userInfo:nil repeats:YES];
@@ -1413,9 +1410,9 @@
         
     // E2EE : not in background
     if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) {
-        metadataNet = [[NCManageDatabase sharedInstance] getQueueUpload];
-        if (metadataNet) {
-            tableDirectory *directory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl = %@ AND e2eEncrypted = 1", self.activeAccount, metadataNet.serverUrl]];
+        tableMetadata *metadata = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND (status = %d || status = %d)", self.activeAccount, k_metadataStatusInUpload, k_metadataStatusUploading]];
+        if (metadata) {
+            tableDirectory *directory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND directoryID = %@ AND e2eEncrypted = 1", self.activeAccount, metadata.directoryID]];
             if (directory != nil)
                 return;
         }
@@ -1509,25 +1506,6 @@
 #pragma mark ===== Process Verify =====
 #pragma --------------------------------------------------------------------------------------------
 
-- (void)verifyLockOnLoadAutoUpload
-{
-    // Test Maintenance
-    if (self.maintenanceMode || self.activeAccount.length == 0)
-        return;
-    
-    NSInteger counterUploadInSession = [[[NCManageDatabase sharedInstance] getTableMetadataUpload] count] + [[[NCManageDatabase sharedInstance] getTableMetadataUploadWWan] count];
-    NSArray *tableMetadatasInLock = [[NCManageDatabase sharedInstance] getQueueUploadInLock];
-     
-    if (counterUploadInSession == 0 && [tableMetadatasInLock count] > 0) {
-     
-        // Unlock
-        for (tableMetadata *metadata in tableMetadatasInLock) {
-            if ([[NCManageDatabase sharedInstance] isTableInvalidated:metadata] == NO)
-                [[NCManageDatabase sharedInstance] unlockQueueUploadWithAssetLocalIdentifier:metadata.assetLocalIdentifier];
-        }
-    }
-}
-
 - (void)verifyUploadInErrorOrWait
 {
     // Test Maintenance

+ 35 - 26
iOSClient/AutoUpload/NCAutoUpload.m

@@ -337,9 +337,10 @@
          return;
     
     tableAccount *tableAccount = [[NCManageDatabase sharedInstance] getAccountActive];
-    NSMutableArray *metadataNetFull = [NSMutableArray new];
+    NSMutableArray *metadataFull = [NSMutableArray new];
     NSString *autoUploadPath = [[NCManageDatabase sharedInstance] getAccountAutoUploadPath:appDelegate.activeUrl];
-
+    NSString *serverUrl, *prevServerUrl, *directoryID;
+    
     // Check Asset : NEW or FULL
     PHFetchResult *newAssetToUpload = [self getCameraRollAssets:tableAccount selector:selector alignPhotoLibrary:NO];
     
@@ -374,7 +375,6 @@
     
     for (PHAsset *asset in newAssetToUpload) {
         
-        NSString *serverUrl;
         NSDate *assetDate = asset.creationDate;
         PHAssetMediaType assetMediaType = asset.mediaType;
         NSString *session;
@@ -395,43 +395,52 @@
         [formatter setDateFormat:@"MM"];
         NSString *monthString = [formatter stringFromDate:assetDate];
         
+        // get directoryID
         if (tableAccount.autoUploadCreateSubfolder)
             serverUrl = [NSString stringWithFormat:@"%@/%@/%@", autoUploadPath, yearString, monthString];
         else
             serverUrl = autoUploadPath;
         
-        CCMetadataNet *metadataNet = [[CCMetadataNet alloc] initWithAccount:appDelegate.activeAccount];
+        if (![serverUrl isEqualToString:prevServerUrl]) {
+            directoryID = [[NCManageDatabase sharedInstance] getDirectoryID:serverUrl];
+        }
+        
+        tableMetadata *metadataForUpload = [tableMetadata new];
+        
+        metadataForUpload.account = appDelegate.activeAccount;
+        metadataForUpload.assetLocalIdentifier = asset.localIdentifier;
         
-        metadataNet.assetLocalIdentifier = asset.localIdentifier;
         if ([selector isEqualToString:selectorUploadAutoUploadAll]) {
             // Option 
             if ([[NCBrandOptions sharedInstance] use_storeLocalAutoUploadAll] == true)
-                metadataNet.selectorPost = nil;
+                metadataForUpload.sessionSelectorPost = @"";
             else
-                metadataNet.selectorPost = selectorUploadRemovePhoto;
+                metadataForUpload.sessionSelectorPost = selectorUploadRemovePhoto;
         } else {
-            metadataNet.selectorPost = nil;
+            metadataForUpload.sessionSelectorPost = @"";
         }
         
-        metadataNet.fileName = fileName;
-        metadataNet.path = appDelegate.directoryUser;
-        metadataNet.selector = selector;
-        metadataNet.serverUrl = serverUrl;
-        metadataNet.session = session;
-        metadataNet.sessionError = @"";
-        metadataNet.taskStatus = k_taskStatusResume;
-        
-        [metadataNetFull addObject:metadataNet];
+        metadataForUpload.date = [NSDate new];
+        metadataForUpload.directoryID = directoryID;
+        metadataForUpload.fileID = directoryID;
+        metadataForUpload.fileName = fileName;
+        metadataForUpload.fileNameView = fileName;
+        metadataForUpload.path = appDelegate.directoryUser;
+        metadataForUpload.session = session;
+        metadataForUpload.sessionSelector = selector;
+        metadataForUpload.status = k_metadataStatusWaitUpload;
+
+        [metadataFull addObject:metadataForUpload];
         
         // Update database Auto Upload
         if ([selector isEqualToString:selectorUploadAutoUpload])
-            [self addQueueUploadAndPhotoLibrary:metadataNet asset:asset];
+            [self addQueueUploadAndPhotoLibrary:metadataForUpload asset:asset];
     }
     
     // Insert all assets (Full) in tableQueueUpload
-    if ([selector isEqualToString:selectorUploadAutoUploadAll] && [metadataNetFull count] > 0) {
+    if ([selector isEqualToString:selectorUploadAutoUploadAll] && [metadataFull count] > 0) {
     
-        [[NCManageDatabase sharedInstance] addQueueUploadWithMetadatasNet:metadataNetFull];
+        (void)[[NCManageDatabase sharedInstance] addMetadatas:metadataFull serverUrl:serverUrl];
         
         // Update icon badge number
         dispatch_async(dispatch_get_main_queue(), ^{
@@ -445,23 +454,23 @@
     });
 }
 
-- (void)addQueueUploadAndPhotoLibrary:(CCMetadataNet *)metadataNet asset:(PHAsset *)asset
+- (void)addQueueUploadAndPhotoLibrary:(tableMetadata *)metadata asset:(PHAsset *)asset
 {
     @synchronized(self) {
         
-        if ([[NCManageDatabase sharedInstance] addQueueUploadWithMetadataNet:metadataNet] != nil) {
+        if ([[NCManageDatabase sharedInstance] addMetadata:metadata] != nil) {
         
-            [[NCManageDatabase sharedInstance] addActivityClient:metadataNet.fileNameView fileID:metadataNet.assetLocalIdentifier action:k_activityDebugActionAutoUpload selector:metadataNet.selector note:@"Add Auto Upload, add new asset" type:k_activityTypeInfo verbose:k_activityVerboseHigh activeUrl:appDelegate.activeUrl];
+            [[NCManageDatabase sharedInstance] addActivityClient:metadata.fileNameView fileID:metadata.assetLocalIdentifier action:k_activityDebugActionAutoUpload selector:metadata.sessionSelector note:@"Add Auto Upload, add new asset" type:k_activityTypeInfo verbose:k_activityVerboseHigh activeUrl:appDelegate.activeUrl];
         
         } else {
     
-            [[NCManageDatabase sharedInstance] addActivityClient:metadataNet.fileNameView fileID:metadataNet.assetLocalIdentifier action:k_activityDebugActionAutoUpload selector:metadataNet.selector note:@"Add Auto Upload, asset already present or db in write transaction" type:k_activityTypeInfo verbose:k_activityVerboseHigh activeUrl:appDelegate.activeUrl];
+            [[NCManageDatabase sharedInstance] addActivityClient:metadata.fileNameView fileID:metadata.assetLocalIdentifier action:k_activityDebugActionAutoUpload selector:metadata.sessionSelector note:@"Add Auto Upload, asset already present or db in write transaction" type:k_activityTypeInfo verbose:k_activityVerboseHigh activeUrl:appDelegate.activeUrl];
         }
     
         // Add asset in table Photo Library
-        if ([metadataNet.selector isEqualToString:selectorUploadAutoUpload]) {
+        if ([metadata.sessionSelector isEqualToString:selectorUploadAutoUpload]) {
             if (![[NCManageDatabase sharedInstance] addPhotoLibrary:@[asset]]) {
-                [[NCManageDatabase sharedInstance] addActivityClient:metadataNet.fileNameView fileID:metadataNet.assetLocalIdentifier action:k_activityDebugActionAutoUpload selector:metadataNet.selector note:@"Add Photo Library, db in write transaction" type:k_activityTypeInfo verbose:k_activityVerboseHigh activeUrl:appDelegate.activeUrl];
+                [[NCManageDatabase sharedInstance] addActivityClient:metadata.fileNameView fileID:metadata.assetLocalIdentifier action:k_activityDebugActionAutoUpload selector:metadata.sessionSelector note:@"Add Photo Library, db in write transaction" type:k_activityTypeInfo verbose:k_activityVerboseHigh activeUrl:appDelegate.activeUrl];
             }
         }
         

+ 0 - 107
iOSClient/Database/NCManageDatabase.swift

@@ -2247,114 +2247,7 @@ class NCManageDatabase: NSObject {
     //MARK: -
     //MARK: Table Queue Upload
     
-    @objc func addQueueUpload(metadataNet: CCMetadataNet) -> tableQueueUpload? {
-        
-        guard let tableAccount = self.getAccountActive() else {
-            return nil
-        }
-        
-        var addObject :tableQueueUpload?
-        let realm = try! Realm()
-
-        if realm.isInWriteTransaction {
-            
-            print("[LOG] Could not write to database, addQueueUpload is already in write transaction")
-            return nil
-            
-        } else {
-            
-            do {
-                try realm.write {
-                    
-                    if realm.objects(tableQueueUpload.self).filter("account = %@ AND assetLocalIdentifier = %@ AND selector = %@", tableAccount.account, metadataNet.assetLocalIdentifier, metadataNet.selector).first == nil {
-                        
-                        // Add new
-                        addObject = tableQueueUpload()
-                        
-                        addObject!.account = tableAccount.account
-                        addObject!.assetLocalIdentifier = metadataNet.assetLocalIdentifier
-                        addObject!.errorCode = metadataNet.errorCode
-                        addObject!.fileName = metadataNet.fileName
-                        addObject!.fileNameView = metadataNet.fileName
-                        if let fileNameView = metadataNet.fileNameView {
-                            addObject!.fileNameView = fileNameView
-                        }
-                        addObject!.path = metadataNet.path
-                        addObject!.selector = metadataNet.selector
-                        
-                        if let selectorPost = metadataNet.selectorPost {
-                            addObject!.selectorPost = selectorPost
-                        }
-                        
-                        addObject!.serverUrl = metadataNet.serverUrl
-                        addObject!.session = metadataNet.session
-                        addObject!.sessionError = metadataNet.sessionError
-                        addObject!.sessionTaskIdentifier = metadataNet.sessionTaskIdentifier
-                        addObject!.size = metadataNet.size
-                        
-                        realm.add(addObject!)
-                    } else {}
-                }
-            } catch let error {
-                print("[LOG] Could not write to database: ", error)
-                return nil
-            }
-        }
-        
-        if addObject != nil {
-            return tableQueueUpload.init(value: addObject!)
-        } else {
-            return nil
-        }
-    }
     
-    @objc func addQueueUpload(metadatasNet: [CCMetadataNet]) {
-        
-        guard let tableAccount = self.getAccountActive() else {
-            return
-        }
-        
-        let realm = try! Realm()
-
-        do {
-            try realm.write {
-                
-                for metadataNet in metadatasNet {
-                    
-                    if realm.objects(tableQueueUpload.self).filter("account = %@ AND assetLocalIdentifier = %@ AND selector = %@", tableAccount.account, metadataNet.assetLocalIdentifier, metadataNet.selector).first == nil {
-                        
-                        // Add new
-                        let addObject = tableQueueUpload()
-                        
-                        addObject.account = tableAccount.account
-                        addObject.assetLocalIdentifier = metadataNet.assetLocalIdentifier
-                        addObject.errorCode = metadataNet.errorCode
-                        addObject.fileName = metadataNet.fileName
-                        addObject.fileNameView = metadataNet.fileName
-                        if let fileNameView = metadataNet.fileNameView {
-                            addObject.fileNameView = fileNameView
-                        }
-                        addObject.path = metadataNet.path
-                        addObject.selector = metadataNet.selector
-                        
-                        if let selectorPost = metadataNet.selectorPost {
-                            addObject.selectorPost = selectorPost
-                        }
-                        
-                        addObject.serverUrl = metadataNet.serverUrl
-                        addObject.session = metadataNet.session
-                        addObject.sessionError = metadataNet.sessionError
-                        addObject.sessionTaskIdentifier = metadataNet.sessionTaskIdentifier
-                        addObject.size = metadataNet.size
-
-                        realm.add(addObject)
-                    }
-                }
-            }
-        } catch let error {
-            print("[LOG] Could not write to database: ", error)
-        }
-    }
     
     @objc func getQueueUpload(predicate: NSPredicate) -> [tableQueueUpload]? {
         

+ 3 - 0
iOSClient/Networking/CCNetworking.m

@@ -1384,6 +1384,7 @@
 
 - (NSInteger)getNumUploadInProgressWWan:(BOOL)WWan
 {
+    /*
     NSMutableArray *recordsInUpload = [NSMutableArray new];
     
     if (WWan) {
@@ -1408,6 +1409,8 @@
     }
     
     return recordsInUpload.count;
+    */
+    return 0;
 }
 
 @end