Marino Faggiana 7 ani în urmă
părinte
comite
3fb63a6a1e

+ 4 - 1
iOSClient/FileSystem/NCManageDatabase.swift

@@ -1232,7 +1232,7 @@ class NCManageDatabase: NSObject {
             
             if fileID != nil {
                 
-                realm.delete(metadata)
+                //realm.delete(metadata)
                 
                 //metadata.fileID = fileID!
                 //realm.add(metadata, update: true)
@@ -1242,6 +1242,9 @@ class NCManageDatabase: NSObject {
                 //let x =  realm.create(tableMetadata.self, value: metadata, update: false)
                 //x.fileID = fileID!
                 
+                metadata.fileID = fileID!
+                realm.add(metadataWithIcon!, update: true)
+                
             } else {
                 
                 realm.add(metadataWithIcon!, update: true)

+ 36 - 34
iOSClient/Networking/CCNetworking.m

@@ -1474,49 +1474,50 @@
     
     NSLog(@"[LOG] Verify download file in progress n. %lu", (unsigned long)[dataSource count]);
     
-    for (tableMetadata *metadata in dataSource) {
+    for (tableMetadata *record in dataSource) {
                 
-        NSURLSession *session = [self getSessionfromSessionDescription:metadata.session];
+        NSURLSession *session = [self getSessionfromSessionDescription:record.session];
+        
+        id tradeReference = [[NCManageDatabase sharedInstance] getThreadConfined:record];
         
         [session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
             
-            dispatch_async(dispatch_get_main_queue(), ^{
-                
-                BOOL findTask = NO;
-                BOOL findTaskPlist = NO;
+            tableMetadata *metadata = (tableMetadata *)[[NCManageDatabase sharedInstance] putThreadConfined:tradeReference];
+            
+            BOOL findTask = NO;
+            BOOL findTaskPlist = NO;
             
-                for (NSURLSessionDownloadTask *downloadTask in downloadTasks) {
+            for (NSURLSessionDownloadTask *downloadTask in downloadTasks) {
                 
-                    NSLog(@"[LOG] Find metadata Tasks [%li %li] = [%lu] state : %lu", (long)metadata.sessionTaskIdentifier, (long)metadata.sessionTaskIdentifierPlist ,(unsigned long)downloadTask.taskIdentifier, (unsigned long)[downloadTask state]);
+                NSLog(@"[LOG] Find metadata Tasks [%li %li] = [%lu] state : %lu", (long)metadata.sessionTaskIdentifier, (long)metadata.sessionTaskIdentifierPlist ,(unsigned long)downloadTask.taskIdentifier, (unsigned long)[downloadTask state]);
                 
-                    if (metadata.sessionTaskIdentifier == downloadTask.taskIdentifier) findTask = YES;
-                    if (metadata.sessionTaskIdentifierPlist == downloadTask.taskIdentifier) findTaskPlist = YES;
+                if (metadata.sessionTaskIdentifier == downloadTask.taskIdentifier) findTask = YES;
+                if (metadata.sessionTaskIdentifierPlist == downloadTask.taskIdentifier) findTaskPlist = YES;
                 
-                    if (findTask == YES || findTaskPlist == YES) break; // trovati, download ancora in corso
-                }
+                if (findTask == YES || findTaskPlist == YES) break; // trovati, download ancora in corso
+            }
             
-                // DATA
-                if (findTask == NO && metadata.sessionTaskIdentifier >= 0) {
+            // DATA
+            if (findTask == NO && metadata.sessionTaskIdentifier >= 0) {
                 
-                    NSLog(@"[LOG] NOT Find metadata Task [%li] fileID : %@ - filename : %@", (long)metadata.sessionTaskIdentifier, metadata.fileID, metadata.fileNameData);
+                NSLog(@"[LOG] NOT Find metadata Task [%li] fileID : %@ - filename : %@", (long)metadata.sessionTaskIdentifier, metadata.fileID, metadata.fileNameData);
                 
-                    [[NCManageDatabase sharedInstance] setMetadataSession:nil sessionError:[NSString stringWithFormat:@"%@", @k_CCErrorTaskDownloadNotFound] sessionSelector:nil sessionSelectorPost:nil sessionTaskIdentifier:k_taskIdentifierError sessionTaskIdentifierPlist:k_taskIdentifierNULL predicate:[NSPredicate predicateWithFormat:@"fileID = %@ ", metadata.fileID]];
+                [[NCManageDatabase sharedInstance] setMetadataSession:nil sessionError:[NSString stringWithFormat:@"%@", @k_CCErrorTaskDownloadNotFound] sessionSelector:nil sessionSelectorPost:nil sessionTaskIdentifier:k_taskIdentifierError sessionTaskIdentifierPlist:k_taskIdentifierNULL predicate:[NSPredicate predicateWithFormat:@"fileID = %@ ", metadata.fileID]];
                 
-                    if ([self.delegate respondsToSelector:@selector(reloadDatasource:fileID:selector:)])
-                        [self.delegate reloadDatasource:[CCCoreData getServerUrlFromDirectoryID:metadata.directoryID activeAccount:metadata.account] fileID:metadata.fileID selector:nil];
-                }
+                if ([self.delegate respondsToSelector:@selector(reloadDatasource:fileID:selector:)])
+                    [self.delegate reloadDatasource:[CCCoreData getServerUrlFromDirectoryID:metadata.directoryID activeAccount:metadata.account] fileID:metadata.fileID selector:nil];
+            }
             
-                // PLIST
-                if (findTaskPlist == NO && metadata.sessionTaskIdentifierPlist >= 0) {
+            // PLIST
+            if (findTaskPlist == NO && metadata.sessionTaskIdentifierPlist >= 0) {
                 
-                    NSLog(@"[LOG] NOT Find metadata TaskPlist [%li] fileID : %@ - filename : %@", (long)metadata.sessionTaskIdentifierPlist, metadata.fileID, metadata.fileName);
+                NSLog(@"[LOG] NOT Find metadata TaskPlist [%li] fileID : %@ - filename : %@", (long)metadata.sessionTaskIdentifierPlist, metadata.fileID, metadata.fileName);
                 
-                    [[NCManageDatabase sharedInstance] setMetadataSession:@"" sessionError:@"" sessionSelector:@"" sessionSelectorPost:@"" sessionTaskIdentifier:k_taskIdentifierNULL sessionTaskIdentifierPlist:k_taskIdentifierDone predicate:[NSPredicate predicateWithFormat:@"fileID = %@", metadata.fileID]];
+                [[NCManageDatabase sharedInstance] setMetadataSession:@"" sessionError:@"" sessionSelector:@"" sessionSelectorPost:@"" sessionTaskIdentifier:k_taskIdentifierNULL sessionTaskIdentifierPlist:k_taskIdentifierDone predicate:[NSPredicate predicateWithFormat:@"fileID = %@", metadata.fileID]];
                 
-                    if ([self.delegate respondsToSelector:@selector(reloadDatasource:fileID:selector:)])
-                        [self.delegate reloadDatasource:[CCCoreData getServerUrlFromDirectoryID:metadata.directoryID activeAccount:metadata.account] fileID:metadata.fileID selector:nil];
-                }
-            });
+                if ([self.delegate respondsToSelector:@selector(reloadDatasource:fileID:selector:)])
+                    [self.delegate reloadDatasource:[CCCoreData getServerUrlFromDirectoryID:metadata.directoryID activeAccount:metadata.account] fileID:metadata.fileID selector:nil];
+            }
         }];
     }
     
@@ -1572,14 +1573,17 @@
     
     NSLog(@"[LOG] Verify upload file in progress n. %lu", (unsigned long)[dataSource count]);
     
-    for (tableMetadata *metadata in dataSource) {
+    for (tableMetadata *record in dataSource) {
         
-        __block NSString *serverUrl = [CCCoreData getServerUrlFromDirectoryID:metadata.directoryID activeAccount:_activeAccount];
+        __block NSString *serverUrl = [CCCoreData getServerUrlFromDirectoryID:record.directoryID activeAccount:_activeAccount];
         
-        NSURLSession *session = [self getSessionfromSessionDescription:metadata.session];
+        NSURLSession *session = [self getSessionfromSessionDescription:record.session];
+        
+        id tradeReference = [[NCManageDatabase sharedInstance] getThreadConfined:record];
         
         [session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
             
+            tableMetadata *metadata = (tableMetadata *)[[NCManageDatabase sharedInstance] putThreadConfined:tradeReference];
             BOOL findTask = NO;
             BOOL findTaskPlist = NO;
             
@@ -1605,10 +1609,8 @@
         }];
         
         // Notification change session
-        dispatch_async(dispatch_get_main_queue(), ^{
-            NSArray *object = [[NSArray alloc] initWithObjects:session, metadata, nil];
-            [[NSNotificationCenter defaultCenter] postNotificationName:k_networkingSessionNotification object:object];
-        });
+        NSArray *object = [[NSArray alloc] initWithObjects:session, record, nil];
+        [[NSNotificationCenter defaultCenter] postNotificationName:k_networkingSessionNotification object:object];
     }
     
     [self automaticUploadInError];