Marino Faggiana %!s(int64=7) %!d(string=hai) anos
pai
achega
568e8618bc
Modificáronse 2 ficheiros con 32 adicións e 9 borrados
  1. 13 0
      iOSClient/FileSystem/NCManageDatabase.swift
  2. 19 9
      iOSClient/Main/CCMain.m

+ 13 - 0
iOSClient/FileSystem/NCManageDatabase.swift

@@ -93,6 +93,19 @@ class NCManageDatabase: NSObject {
         }
     }
     
+    func getThreadConfined(_ table: Object) -> Any {
+     
+        return ThreadSafeReference(to: table)
+    }
+    
+    func putThreadConfined(_ tableRef: Any) -> Object? {
+        
+        let realm = try! Realm()
+        
+        return realm.resolve(tableRef as! ThreadSafeReference<Object>)
+    }
+
+    
     //MARK: -
     //MARK: Table Account
     

+ 19 - 9
iOSClient/Main/CCMain.m

@@ -2831,26 +2831,34 @@
 }
 
 - (void)cancelTaskButton:(tableMetadata *)metadata reloadTable:(BOOL)reloadTable
-{
+{    
     NSURLSession *session = [[CCNetworking sharedNetworking] getSessionfromSessionDescription:metadata.session];
     __block NSURLSessionTask *findTask;
-
+    
+    NSInteger sessionTaskIdentifier = metadata.sessionTaskIdentifier;
+    NSInteger sessionTaskIdentifierPlist = metadata.sessionTaskIdentifierPlist;
+    NSString *fileID = metadata.fileID;
+    
     // DOWNLOAD
     if ([metadata.session length] > 0 && [metadata.session containsString:@"download"]) {
         
         [session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
             
             for (NSURLSessionTask *task in downloadTasks)
-                if (task.taskIdentifier == metadata.sessionTaskIdentifier || task.taskIdentifier == metadata.sessionTaskIdentifierPlist) {
+                if (task.taskIdentifier == sessionTaskIdentifier || task.taskIdentifier == sessionTaskIdentifierPlist) {
                     findTask = task;
-                    [app.listChangeTask setObject:@"cancelDownload" forKey:metadata.fileID];
+                    [app.listChangeTask setObject:@"cancelDownload" forKey:fileID];
                     [task cancel];
                 }
             
             if (!findTask) {
-                [app.listChangeTask setObject:@"cancelDownload" forKey:metadata.fileID];
-                NSArray *object = [[NSArray alloc] initWithObjects:session, metadata, findTask, nil];
-                [[NSNotificationCenter defaultCenter] postNotificationName:k_networkingSessionNotification object:object];
+                
+                dispatch_async(dispatch_get_main_queue(), ^{
+                    
+                    [app.listChangeTask setObject:@"cancelDownload" forKey:metadata.fileID];
+                    NSArray *object = [[NSArray alloc] initWithObjects:session, metadata, findTask, nil];
+                    [[NSNotificationCenter defaultCenter] postNotificationName:k_networkingSessionNotification object:object];
+                });
             }
         }];
     }
@@ -2861,14 +2869,16 @@
         [session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
             
             for (NSURLSessionUploadTask *task in uploadTasks)
-                if (task.taskIdentifier == metadata.sessionTaskIdentifier ||  task.taskIdentifier == metadata.sessionTaskIdentifierPlist) {
+                if (task.taskIdentifier == sessionTaskIdentifier ||  task.taskIdentifier == sessionTaskIdentifierPlist) {
                     findTask = task;
-                    [app.listChangeTask setObject:@"cancelUpload" forKey:metadata.fileID];
+                    [app.listChangeTask setObject:@"cancelUpload" forKey:fileID];
                     [task cancel];
                 }
             
             if (!findTask) {
+                
                 dispatch_async(dispatch_get_main_queue(), ^{
+                    
                     [app.listChangeTask setObject:@"cancelUpload" forKey:metadata.fileID];
                     NSArray *object = [[NSArray alloc] initWithObjects:session, metadata, findTask, nil];
                     [[NSNotificationCenter defaultCenter] postNotificationName:k_networkingSessionNotification object:object];