Browse Source

improvements

marinofaggiana 4 years ago
parent
commit
bab4e46e74

+ 17 - 18
File Provider Extension/FileProviderEnumerator.swift

@@ -285,26 +285,25 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
         NCCommunication.sharedInstance.iosHelper(serverUrl: serverUrl, fileNamePath: fileNamePath, offset: offset, limit: limit, account: fileProviderData.sharedInstance.account) { (account, files, errorCode, errorDescription) in
             
              if errorCode == 0 && files != nil  && files!.count >= 1 {
-                
-                // Metadata conversion
-                var metadataFolder = tableMetadata()
-                let metadatas = NCNetworking.sharedInstance.convertFilesToMetadatas(files!, metadataFolder: &metadataFolder)
-                
-                // Prepare DB
-                if offset == 0 {
-                    NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND status == %d", account, serverUrl, k_metadataStatusNormal))
-                    NCManageDatabase.sharedInstance.setDateReadDirectory(serverUrl: serverUrl, account: account)
-                    let metadatasInDownload = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d OR status == %d OR status == %d)", account, serverUrl, k_metadataStatusWaitDownload, k_metadataStatusInDownload, k_metadataStatusDownloading, k_metadataStatusDownloadError), sorted: nil, ascending: false)
-                    let metadatasInUpload = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d OR status == %d OR status == %d)", account, serverUrl, k_metadataStatusWaitUpload, k_metadataStatusInUpload, k_metadataStatusUploading, k_metadataStatusUploadError), sorted: nil, ascending: false)
-                    if metadatasInDownload != nil {
-                        NCManageDatabase.sharedInstance.addMetadatas(metadatasInDownload!)
-                    }
-                    if metadatasInUpload != nil {
-                        NCManageDatabase.sharedInstance.addMetadatas(metadatasInUpload!)
+                                
+                NCManageDatabase.sharedInstance.convertNCFilesToMetadatas(files!, useMetadataFolder: true, account: account) { (metadataFolder, metadatasFolder, metadatas) in
+                    
+                    // Prepare DB
+                    if offset == 0 {
+                        NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND status == %d", account, serverUrl, k_metadataStatusNormal))
+                        NCManageDatabase.sharedInstance.setDateReadDirectory(serverUrl: serverUrl, account: account)
+                        let metadatasInDownload = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d OR status == %d OR status == %d)", account, serverUrl, k_metadataStatusWaitDownload, k_metadataStatusInDownload, k_metadataStatusDownloading, k_metadataStatusDownloadError), sorted: nil, ascending: false)
+                        let metadatasInUpload = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d OR status == %d OR status == %d)", account, serverUrl, k_metadataStatusWaitUpload, k_metadataStatusInUpload, k_metadataStatusUploading, k_metadataStatusUploadError), sorted: nil, ascending: false)
+                        if metadatasInDownload != nil {
+                            NCManageDatabase.sharedInstance.addMetadatas(metadatasInDownload!)
+                        }
+                        if metadatasInUpload != nil {
+                            NCManageDatabase.sharedInstance.addMetadatas(metadatasInUpload!)
+                        }
                     }
+                    
+                    NCManageDatabase.sharedInstance.addMetadatas(metadatas)
                 }
-                
-                NCManageDatabase.sharedInstance.addMetadatas(metadatas)
             }
             
             let metadatas = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", fileProviderData.sharedInstance.account, serverUrl), page: page, limit: fileProviderData.sharedInstance.itemForPage, sorted: "fileName", ascending: true)

+ 2 - 2
iOSClient/Database/NCManageDatabase.swift

@@ -1944,7 +1944,7 @@ class NCManageDatabase: NSObject {
         return metadata
     }
     
-    @objc func convertNCFilesToMetadatas(_ files: [NCFile], account: String, completion: @escaping (_ metadataFolder: tableMetadata,_ metadataFolders: [tableMetadata], _ metadatas: [tableMetadata])->())  {
+    @objc func convertNCFilesToMetadatas(_ files: [NCFile], useMetadataFolder: Bool, account: String, completion: @escaping (_ metadataFolder: tableMetadata,_ metadatasFolder: [tableMetadata], _ metadatas: [tableMetadata])->())  {
     
         var counter: Int = 0
         var isEncrypted: Bool = false
@@ -1965,7 +1965,7 @@ class NCManageDatabase: NSObject {
             
             let metadata = convertNCFileToMetadata(file, isEncrypted: isEncrypted, account: account)
             
-            if counter == 0 {
+            if counter == 0 && useMetadataFolder {
                 metadataFolder = tableMetadata.init(value: metadata)
             } else {
                 metadatas.append(metadata)

+ 37 - 36
iOSClient/Favorites/CCFavorites.m

@@ -205,49 +205,50 @@
         
          if (errorCode == 0 && [account isEqualToString:appDelegate.activeAccount] && files != nil) {
              
-             NSArray *metadatas = [[NCNetworking sharedInstance] convertFilesToMetadatas:files metadataFolder:nil];
-             
-             NSString *father = @"";
-             NSMutableArray *filesOcId = [NSMutableArray new];
-             
-             for (tableMetadata *metadata in metadatas) {
+             [[NCManageDatabase sharedInstance] convertNCFilesToMetadatas:files useMetadataFolder:false account:account completion:^(tableMetadata *metadataFolder, NSArray<tableMetadata *> *metadatasFolder, NSArray<tableMetadata *> *metadatas) {
                  
-                 // insert for test NOT favorite
-                 [filesOcId addObject:metadata.ocId];
+                 NSString *father = @"";
+                 NSMutableArray *filesOcId = [NSMutableArray new];
                  
-                 NSString *serverUrl = metadata.serverUrl;
-                 NSString *serverUrlSon = [CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileName];
-                 
-                 if (![serverUrlSon containsString:father]) {
+                 for (tableMetadata *metadata in metadatas) {
                      
-                     if (metadata.directory) {
-                         
-                         if ([CCUtility getFavoriteOffline])
-                             [[CCSynchronize sharedSynchronize] readFolder:[CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileName] selector:selectorReadFolderWithDownload account:account];
-                         else
-                             [[CCSynchronize sharedSynchronize] readFolder:[CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileName] selector:selectorReadFolder account:account];
+                     // insert for test NOT favorite
+                     [filesOcId addObject:metadata.ocId];
+                     
+                     NSString *serverUrl = metadata.serverUrl;
+                     NSString *serverUrlSon = [CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileName];
+                     
+                     if (![serverUrlSon containsString:father]) {
                          
-                     } else {
+                         if (metadata.directory) {
+                             
+                             if ([CCUtility getFavoriteOffline])
+                                 [[CCSynchronize sharedSynchronize] readFolder:[CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileName] selector:selectorReadFolderWithDownload account:account];
+                             else
+                                 [[CCSynchronize sharedSynchronize] readFolder:[CCUtility stringAppendServerUrl:serverUrl addFileName:metadata.fileName] selector:selectorReadFolder account:account];
+                             
+                         } else {
+                             
+                             if ([CCUtility getFavoriteOffline])
+                                 [[CCSynchronize sharedSynchronize] readFile:metadata.ocId fileName:metadata.fileName serverUrl:serverUrl selector:selectorReadFileWithDownload account:account];
+                             else
+                                 [[CCSynchronize sharedSynchronize] readFile:metadata.ocId fileName:metadata.fileName serverUrl:serverUrl selector:selectorReadFile account:account];
+                         }
                          
-                         if ([CCUtility getFavoriteOffline])
-                             [[CCSynchronize sharedSynchronize] readFile:metadata.ocId fileName:metadata.fileName serverUrl:serverUrl selector:selectorReadFileWithDownload account:account];
-                         else
-                             [[CCSynchronize sharedSynchronize] readFile:metadata.ocId fileName:metadata.fileName serverUrl:serverUrl selector:selectorReadFile account:account];
+                         father = serverUrlSon;
                      }
-                     
-                     father = serverUrlSon;
                  }
-             }
-             
-             // Verify remove favorite
-             NSArray *allRecordFavorite = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND favorite == true", account] sorted:nil ascending:NO];
-             
-             for (tableMetadata *metadata in allRecordFavorite)
-                 if (![filesOcId containsObject:metadata.ocId])
-                     [[NCManageDatabase sharedInstance] setMetadataFavoriteWithOcId:metadata.ocId favorite:NO];
-             
-             [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_clearDateReadDataSource object:nil];
-             
+                 
+                 // Verify remove favorite
+                 NSArray *allRecordFavorite = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND favorite == true", account] sorted:nil ascending:NO];
+                 
+                 for (tableMetadata *metadata in allRecordFavorite)
+                     if (![filesOcId containsObject:metadata.ocId])
+                         [[NCManageDatabase sharedInstance] setMetadataFavoriteWithOcId:metadata.ocId favorite:NO];
+                 
+                 [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_clearDateReadDataSource object:nil];
+             }];
+        
          } else if (errorCode != 0) {
              [[NCContentPresenter shared] messageNotification:@"_error_" description:errorMessage delay:k_dismissAfterSecond type:messageTypeError errorCode:errorCode];
          } else {

+ 9 - 7
iOSClient/Main/CCMain.m

@@ -1395,14 +1395,16 @@
         
          if (errorCode == 0 && [account isEqualToString:appDelegate.activeAccount] && files != nil) {
              
-             NSArray *metadatas = [[NCNetworking sharedInstance] convertFilesToMetadatas:files metadataFolder:nil];
-             NSMutableArray *metadatasDB = (NSMutableArray *)[[NCManageDatabase sharedInstance] addMetadatas:metadatas];
-             _searchResultMetadatas = [[NSMutableArray alloc] initWithArray:metadatasDB];
-             _metadataFolder = nil;
+             [[NCManageDatabase sharedInstance] convertNCFilesToMetadatas:files useMetadataFolder:false account:account completion:^(tableMetadata *metadataFolder, NSArray<tableMetadata *> *metadatasFolder, NSArray<tableMetadata *> *metadatas) {
                  
-             [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:_serverUrl ocId:nil action:k_action_NULL];
-             [self tableViewReloadData];
-             [self setTitle];
+                 NSMutableArray *metadatasDB = (NSMutableArray *)[[NCManageDatabase sharedInstance] addMetadatas:metadatas];
+                 _searchResultMetadatas = [[NSMutableArray alloc] initWithArray:metadatasDB];
+                 _metadataFolder = nil;
+                 
+                 [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:_serverUrl ocId:nil action:k_action_NULL];
+                 [self tableViewReloadData];
+                 [self setTitle];
+             }];
                           
          } else {
              

+ 37 - 36
iOSClient/Media/NCMedia.swift

@@ -680,49 +680,50 @@ extension NCMedia {
                                     
                 var isDifferent: Bool = false
                 var newInsert: Int = 0
-                let metadatas = NCNetworking.sharedInstance.convertFilesToMetadatas(files!, metadataFolder: nil)
             
-                let totalDistance = Calendar.current.dateComponents([Calendar.Component.day], from: gteDate, to: lteDate).value(for: .day) ?? 0
-            
-                let difference = NCManageDatabase.sharedInstance.createTableMedia(metadatas, lteDate: lteDate, gteDate: gteDate, account: account)
-                isDifferent = difference.isDifferent
-                newInsert = difference.newInsert
-                
-                self.loadingSearch = false
-                
-                print("[LOG] Search: Totale Distance \(totalDistance) - It's Different \(isDifferent) - New insert \(newInsert)")
-                
-                if isDifferent {
-                    self.reloadDataSource(loadNetworkDatasource: false) { }
-                }
+                NCManageDatabase.sharedInstance.convertNCFilesToMetadatas(files!, useMetadataFolder: false, account: account) { (metadataFolder, metadatasFolder, metadatas) in
                     
-                if (isDifferent == false || newInsert+insertPrevius < 100) && addPast && setDistantPast == false {
+                    let totalDistance = Calendar.current.dateComponents([Calendar.Component.day], from: gteDate, to: lteDate).value(for: .day) ?? 0
+                    let difference = NCManageDatabase.sharedInstance.createTableMedia(metadatas, lteDate: lteDate, gteDate: gteDate, account: account)
+                    isDifferent = difference.isDifferent
+                    newInsert = difference.newInsert
                     
-                    switch totalDistance {
-                    case 0...89:
-                        if var gteDate90 = Calendar.current.date(byAdding: .day, value: -90, to: gteDate) {
-                            gteDate90 = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: gteDate90) ?? Date()
-                            self.search(lteDate: lteDate, gteDate: gteDate90, addPast: addPast, insertPrevius: newInsert+insertPrevius, setDistantPast: false, debug: "search recursive -90 gg")
-                        }
-                    case 90...179:
-                        if var gteDate180 = Calendar.current.date(byAdding: .day, value: -180, to: gteDate) {
-                            gteDate180 = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: gteDate180) ?? Date()
-                            self.search(lteDate: lteDate, gteDate: gteDate180, addPast: addPast, insertPrevius: newInsert+insertPrevius, setDistantPast: false, debug: "search recursive -180 gg")
-                        }
-                    case 180...364:
-                        if var gteDate365 = Calendar.current.date(byAdding: .day, value: -365, to: gteDate) {
-                            gteDate365 = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: gteDate365) ?? Date()
-                            self.search(lteDate: lteDate, gteDate: gteDate365, addPast: addPast, insertPrevius: newInsert+insertPrevius, setDistantPast: false, debug: "search recursive -365 gg")
+                    self.loadingSearch = false
+
+                    print("[LOG] Search: Totale Distance \(totalDistance) - It's Different \(isDifferent) - New insert \(newInsert)")
+
+                    if isDifferent {
+                        self.reloadDataSource(loadNetworkDatasource: false) { }
+                    }
+                    
+                    if (isDifferent == false || newInsert+insertPrevius < 100) && addPast && setDistantPast == false {
+                        
+                        switch totalDistance {
+                        case 0...89:
+                            if var gteDate90 = Calendar.current.date(byAdding: .day, value: -90, to: gteDate) {
+                                gteDate90 = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: gteDate90) ?? Date()
+                                self.search(lteDate: lteDate, gteDate: gteDate90, addPast: addPast, insertPrevius: newInsert+insertPrevius, setDistantPast: false, debug: "search recursive -90 gg")
+                            }
+                        case 90...179:
+                            if var gteDate180 = Calendar.current.date(byAdding: .day, value: -180, to: gteDate) {
+                                gteDate180 = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: gteDate180) ?? Date()
+                                self.search(lteDate: lteDate, gteDate: gteDate180, addPast: addPast, insertPrevius: newInsert+insertPrevius, setDistantPast: false, debug: "search recursive -180 gg")
+                            }
+                        case 180...364:
+                            if var gteDate365 = Calendar.current.date(byAdding: .day, value: -365, to: gteDate) {
+                                gteDate365 = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: gteDate365) ?? Date()
+                                self.search(lteDate: lteDate, gteDate: gteDate365, addPast: addPast, insertPrevius: newInsert+insertPrevius, setDistantPast: false, debug: "search recursive -365 gg")
+                            }
+                        default:
+                            self.search(lteDate: lteDate, gteDate: NSDate.distantPast, addPast: addPast, insertPrevius: newInsert+insertPrevius, setDistantPast: true, debug: "search recursive distant pass")
                         }
-                    default:
-                        self.search(lteDate: lteDate, gteDate: NSDate.distantPast, addPast: addPast, insertPrevius: newInsert+insertPrevius, setDistantPast: true, debug: "search recursive distant pass")
                     }
-                }
                     
-                self.reloadDataThenPerform {
-                    self.downloadThumbnail()
+                    self.reloadDataThenPerform {
+                        self.downloadThumbnail()
+                    }
                 }
-                
+             
             } else {
                 
                 self.loadingSearch = false

+ 2 - 34
iOSClient/Networking/NCNetworking.swift

@@ -153,38 +153,6 @@ import NCCommunication
         return result
     }
     
-    //MARK: - File <> Metadata
-    
-    @objc func convertFilesToMetadatas(_ files: [NCFile], metadataFolder: UnsafeMutablePointer<tableMetadata>?) -> [tableMetadata] {
-        
-        var metadatas = [tableMetadata]()
-        var counter: Int = 0
-        var isEncrypted: Bool = false
-        var listServerUrl = [String:Bool]()
-
-        for file in files {
-                        
-            if let key = listServerUrl[file.serverUrl] {
-                isEncrypted = key
-            } else {
-                isEncrypted = CCUtility.isFolderEncrypted(file.serverUrl, e2eEncrypted: file.e2eEncrypted, account: account)
-                listServerUrl[file.serverUrl] = isEncrypted
-            }
-            
-            let metadata =  NCManageDatabase.sharedInstance.convertNCFileToMetadata(file, isEncrypted: isEncrypted, account: account)
-            
-            if metadataFolder != nil && counter == 0 {
-                metadataFolder!.initialize(to: metadata)
-            } else {
-                metadatas.append(metadata)
-            }
-            
-            counter += 1
-        }
-        
-        return metadatas
-    }
-    
     //MARK: - WebDav
     
     @objc func readFolder(serverUrl: String, account: String, completion: @escaping (_ account: String, _ metadataFolder: tableMetadata?, _ metadatas: [tableMetadata]?, _ errorCode: Int, _ errorDescription: String)->()) {
@@ -193,14 +161,14 @@ import NCCommunication
             
             if errorCode == 0 && files != nil {
                               
-                NCManageDatabase.sharedInstance.convertNCFilesToMetadatas(files!, account: account) { (metadataFolder, metadataFolders, metadatas) in
+                NCManageDatabase.sharedInstance.convertNCFilesToMetadatas(files!, useMetadataFolder: true, account: account) { (metadataFolder, metadatasFolder, metadatas) in
                     
                     // Add directory
                     NCManageDatabase.sharedInstance.addDirectory(encrypted: metadataFolder.e2eEncrypted, favorite: metadataFolder.favorite, ocId: metadataFolder.ocId, fileId: metadataFolder.fileId, etag: metadataFolder.etag, permissions: metadataFolder.permissions, serverUrl: serverUrl, richWorkspace: metadataFolder.richWorkspace, account: account)
                     NCManageDatabase.sharedInstance.setDateReadDirectory(serverUrl: serverUrl, account: account)
                     
                     // Add other directories
-                    for metadata in metadataFolders {
+                    for metadata in metadatasFolder {
                        let serverUrl = metadata.serverUrl + "/" + metadata.fileName
                        NCManageDatabase.sharedInstance.addDirectory(encrypted: metadata.e2eEncrypted, favorite: metadata.favorite, ocId: metadata.ocId, fileId: metadata.fileId, etag: nil, permissions: metadata.permissions, serverUrl: serverUrl, richWorkspace: metadata.richWorkspace, account: account)
                     }

+ 8 - 8
iOSClient/Synchronize/CCSynchronize.m

@@ -384,14 +384,14 @@
     [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
     
     [[NCCommunication sharedInstance] readFileOrFolderWithServerUrlFileName:self.serverUrl depth:@"1" showHiddenFiles:[CCUtility getShowHiddenFiles] account:self.account completionHandler:^(NSString *account, NSArray *files, NSInteger errorCode, NSString *errorDescription) {
-       
-        tableMetadata *metadataFolder = [tableMetadata new];
-        NSArray *metadatas = [[NCNetworking sharedInstance] convertFilesToMetadatas:files metadataFolder:&metadataFolder];
-        
-        if ([self.delegate respondsToSelector:@selector(readFolderSuccessFailureWithAccount:serverUrl:metadataFolder:metadatas:selector:message:errorCode:)])
-            [self.delegate readFolderSuccessFailureWithAccount:self.account serverUrl:self.serverUrl metadataFolder:metadataFolder metadatas:metadatas selector:self.selector message:errorDescription errorCode:errorCode];
-        
-        [self complete];
+               
+        [[NCManageDatabase sharedInstance] convertNCFilesToMetadatas:files useMetadataFolder:true account:account completion:^(tableMetadata *metadataFolder, NSArray<tableMetadata *> *metadatasFolder, NSArray<tableMetadata *> *metadatas) {
+            
+            if ([self.delegate respondsToSelector:@selector(readFolderSuccessFailureWithAccount:serverUrl:metadataFolder:metadatas:selector:message:errorCode:)])
+                [self.delegate readFolderSuccessFailureWithAccount:self.account serverUrl:self.serverUrl metadataFolder:metadataFolder metadatas:metadatas selector:self.selector message:errorDescription errorCode:errorCode];
+            
+            [self complete];
+        }];
     }];
 }