Marino Faggiana 8 years ago
parent
commit
acac865fef

+ 22 - 20
iOSClient/AppDelegate.m

@@ -1417,7 +1417,7 @@
 - (void)sessionChanged:(NSNotification *)notification
 {
     NSURLSession *session;
-    tableMetadata *metadata;
+    NSString *etag;
     NSURLSessionTask *task;
     
     for (id object in notification.object) {
@@ -1425,8 +1425,8 @@
         if ([object isKindOfClass:[NSURLSession class]])
             session = object;
         
-        if ([object isKindOfClass:[tableMetadata class]])
-            metadata = object;
+        if ([object isKindOfClass:[NSString class]])
+            etag = object;
         
         if ([object isKindOfClass:[NSURLSessionTask class]])
             task = object;
@@ -1441,9 +1441,9 @@
     if ([task isKindOfClass:[NSURLSessionUploadTask class]])
         app.sessionDateLastUploadTasks = [NSDate date];
     
-    if (metadata && [_listChangeTask objectForKey:metadata.etag])
+    if (etag && [_listChangeTask objectForKey:etag])
         dispatch_async(dispatch_get_main_queue(), ^{
-            [self changeTask:metadata];
+            [self changeTask:etag];
         });
         
     /* 
@@ -1461,15 +1461,17 @@
     }
 }
 
-- (void)changeTask:(tableMetadata *)metadata
+- (void)changeTask:(NSString *)etag
 {
+    tableMetadata *metadata = [[NCManageDatabase sharedInstance] getMetadataWithPreficate:[NSPredicate predicateWithFormat:@"etag == %@", etag]];
+    if (!metadata) return;
     NSString *serverUrl = [CCCoreData getServerUrlFromDirectoryID:metadata.directoryID activeAccount:metadata.account];
     
-    if ([[_listChangeTask objectForKey:metadata.etag] isEqualToString:@"stopUpload"]) {
+    if ([[_listChangeTask objectForKey:etag] isEqualToString:@"stopUpload"]) {
         
-        [[NCManageDatabase sharedInstance] setMetadataSession:nil sessionError:@"" sessionSelector:nil sessionSelectorPost:nil sessionTaskIdentifier:k_taskIdentifierStop sessionTaskIdentifierPlist:k_taskIdentifierDone predicate:[NSPredicate predicateWithFormat:@"etag = %@", metadata.etag]];
+        [[NCManageDatabase sharedInstance] setMetadataSession:nil sessionError:@"" sessionSelector:nil sessionSelectorPost:nil sessionTaskIdentifier:k_taskIdentifierStop sessionTaskIdentifierPlist:k_taskIdentifierDone predicate:[NSPredicate predicateWithFormat:@"etag = %@", etag]];
     }
-    else if ([[_listChangeTask objectForKey:metadata.etag] isEqualToString:@"reloadUpload"]) {
+    else if ([[_listChangeTask objectForKey:etag] isEqualToString:@"reloadUpload"]) {
         
         // V 1.8 if upload_session_wwan change in upload_session
         if ([metadata.session isEqualToString:k_upload_session_wwan])
@@ -1477,7 +1479,7 @@
         
         [[CCNetworking sharedNetworking] uploadFileMetadata:metadata taskStatus:k_taskStatusResume];
     }
-    else if ([[_listChangeTask objectForKey:metadata.etag] isEqualToString:@"reloadDownload"]) {
+    else if ([[_listChangeTask objectForKey:etag] isEqualToString:@"reloadDownload"]) {
         
         BOOL downloadData = NO, downloadPlist = NO;
             
@@ -1485,37 +1487,37 @@
         if (metadata.sessionTaskIdentifierPlist != k_taskIdentifierDone) downloadPlist = YES;
         
         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.2 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
-            [[CCNetworking sharedNetworking] downloadFile:metadata.etag serverUrl:serverUrl downloadData:downloadData downloadPlist:downloadPlist selector:metadata.sessionSelector selectorPost:metadata.sessionSelectorPost session:k_download_session taskStatus:k_taskStatusResume delegate:nil];
+            [[CCNetworking sharedNetworking] downloadFile:etag serverUrl:serverUrl downloadData:downloadData downloadPlist:downloadPlist selector:metadata.sessionSelector selectorPost:metadata.sessionSelectorPost session:k_download_session taskStatus:k_taskStatusResume delegate:nil];
         });
     }
     else if ([[_listChangeTask objectForKey:metadata.etag] isEqualToString:@"cancelUpload"]) {
         
         // remove the file
         
-        [[NCManageDatabase sharedInstance] deleteMetadata:[NSPredicate predicateWithFormat:@"etag = %@", metadata.etag]];
+        [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", app.directoryUser, etag] error:nil];
+        [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@.ico", app.directoryUser, etag] error:nil];
         
-        [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", app.directoryUser, metadata.etag] error:nil];
-        [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@.ico", app.directoryUser, metadata.etag] error:nil];
+        [[NCManageDatabase sharedInstance] deleteMetadata:[NSPredicate predicateWithFormat:@"etag = %@", etag]];
     }
-    else if ([[_listChangeTask objectForKey:metadata.etag] isEqualToString:@"cancelDownload"]) {
+    else if ([[_listChangeTask objectForKey:etag] isEqualToString:@"cancelDownload"]) {
         
-        [[NCManageDatabase sharedInstance] setMetadataSession:@"" sessionError:@"" sessionSelector:@"" sessionSelectorPost:@"" sessionTaskIdentifier:k_taskIdentifierDone sessionTaskIdentifierPlist:k_taskIdentifierDone predicate:[NSPredicate predicateWithFormat:@"etag = %@", metadata.etag]];
+        [[NCManageDatabase sharedInstance] setMetadataSession:@"" sessionError:@"" sessionSelector:@"" sessionSelectorPost:@"" sessionTaskIdentifier:k_taskIdentifierDone sessionTaskIdentifierPlist:k_taskIdentifierDone predicate:[NSPredicate predicateWithFormat:@"etag = %@", etag]];
     }
     
     // remove ChangeTask (etag) from the list
-    [_listChangeTask removeObjectForKey:metadata.etag];
+    [_listChangeTask removeObjectForKey:etag];
     
     // delete progress
-    [_listProgressMetadata removeObjectForKey:metadata.etag];
+    [_listProgressMetadata removeObjectForKey:etag];
     
     // Progress Task
-    NSDictionary* userInfo = @{@"etag": (metadata.etag), @"serverUrl": (serverUrl), @"cryptated": ([NSNumber numberWithBool:NO]), @"progress": ([NSNumber numberWithFloat:0.0])};
+    NSDictionary* userInfo = @{@"etag": (etag), @"serverUrl": (serverUrl), @"cryptated": ([NSNumber numberWithBool:NO]), @"progress": ([NSNumber numberWithFloat:0.0])};
     
     [[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationProgressTask" object:nil userInfo:userInfo];
 
     // Refresh
     if (_activeMain && [_listChangeTask count] == 0) {
-        [_activeMain reloadDatasource:[CCCoreData getServerUrlFromDirectoryID:metadata.directoryID activeAccount:metadata.account] etag:nil selector:nil];
+        [_activeMain reloadDatasource:serverUrl etag:nil selector:nil];
     }
 }
 

+ 5 - 0
iOSClient/FileSystem/NCManageDatabase.swift

@@ -107,6 +107,11 @@ class NCManageDatabase: NSObject {
         return realm.resolve(tableRef as! ThreadSafeReference<Object>)
     }
     
+    func isTableInvalidated(_ table: Object) -> Bool {
+     
+        return table.isInvalidated
+    }
+    
     //MARK: -
     //MARK: Table Account
     

+ 22 - 49
iOSClient/Main/CCMain.m

@@ -1873,41 +1873,12 @@
         // verify if the record is in download/upload progress
         if (metadata.directory == NO && [recordsInSessions count] > 0) {
             
-            //tableMetadata *metadataDB = [CCCoreData getMetadataWithPreficate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@) AND (fileName == %@)", app.activeAccount, metadataNet.directoryID, metadata.fileName] context:nil];
+            tableMetadata *metadataTransfer = [[NCManageDatabase sharedInstance] getMetadataWithPreficate:[NSPredicate predicateWithFormat:@"account = %@ AND directoryID = %@ AND fileName = %@", app.activeAccount, metadataNet.directoryID, metadata.fileName]];
             
-            tableMetadata *metadataDB = [[NCManageDatabase sharedInstance] getMetadataWithPreficate:[NSPredicate predicateWithFormat:@"(account == %@) AND (directoryID == %@) AND (fileName == %@)", app.activeAccount, metadataNet.directoryID, metadata.fileName]];
-            
-            // is in Upload
-            if (metadataDB.session && [metadataDB.session containsString:@"upload"]) {
-                
-                NSString *sessionID = metadataDB.sessionID;
-                
-                // rename SessionID -> etag
-                [CCUtility moveFileAtPath:[NSString stringWithFormat:@"%@/%@", app.directoryUser, sessionID]  toPath:[NSString stringWithFormat:@"%@/%@", app.directoryUser, metadata.etag]];
-                
-                metadataDB.session = @"";
-                metadataDB.date = metadata.date;
-                metadataDB.etag = metadata.etag;
-                metadataDB.rev = metadata.etag;
-                metadataDB.sessionError = @"";
-                metadataDB.sessionID = @"";
-                metadataDB.sessionTaskIdentifier = k_taskIdentifierDone;
-                metadataDB.sessionTaskIdentifierPlist = k_taskIdentifierDone;
-                
-                //[CCCoreData updateMetadata:metadataDB predicate:[NSPredicate predicateWithFormat:@"(sessionID == %@) AND (account == %@)", sessionID, app.activeAccount] activeAccount:app.activeAccount activeUrl:app.activeUrl context:nil];
-                
-                //[[NCManageDatabase sharedInstance] updateMetadata:metadataDB activeUrl:app.activeUrl];
-                
-                [CCCoreData addLocalFile:metadataDB activeAccount:app.activeAccount];
-                
-                [CCGraphics createNewImageFrom:metadata.etag directoryUser:app.directoryUser fileNameTo:metadata.etag fileNamePrint:metadata.fileNamePrint size:@"m" imageForUpload:NO typeFile:metadata.typeFile writePreview:YES optimizedFileName:[CCUtility getOptimizedPhoto]];
-                
+            // is in Download or Upload
+            if ([metadataTransfer.session containsString:@"upload"] || [metadataTransfer.session containsString:@"download"]) {
                 continue;
             }
-            
-            // download in progress
-            if (metadataDB.session && [metadataDB.session containsString:@"download"])
-                continue;
         }
         
         // end test, insert in Database
@@ -2766,8 +2737,8 @@
                 
                 dispatch_async(dispatch_get_main_queue(), ^{
                     
-                    [app.listChangeTask setObject:@"reloadDownload" forKey:metadata.etag];
-                    NSArray *object = [[NSArray alloc] initWithObjects:session, metadata, findTask, nil];
+                    [app.listChangeTask setObject:@"reloadDownload" forKey:etag];
+                    NSArray *object = [[NSArray alloc] initWithObjects:session, etag, findTask, nil];
                     [[NSNotificationCenter defaultCenter] postNotificationName:k_networkingSessionNotification object:object];
                 });
             }
@@ -2790,8 +2761,8 @@
                 
                 dispatch_async(dispatch_get_main_queue(), ^{
                     
-                    [app.listChangeTask setObject:@"reloadUpload" forKey:metadata.etag];
-                    NSArray *object = [[NSArray alloc] initWithObjects:session, metadata, findTask, nil];
+                    [app.listChangeTask setObject:@"reloadUpload" forKey:etag];
+                    NSArray *object = [[NSArray alloc] initWithObjects:session, etag, findTask, nil];
                     [[NSNotificationCenter defaultCenter] postNotificationName:k_networkingSessionNotification object:object];
                 });
             }
@@ -2839,8 +2810,8 @@
                 
                 dispatch_async(dispatch_get_main_queue(), ^{
                     
-                    [app.listChangeTask setObject:@"cancelDownload" forKey:metadata.etag];
-                    NSArray *object = [[NSArray alloc] initWithObjects:session, metadata, findTask, nil];
+                    [app.listChangeTask setObject:@"cancelDownload" forKey:etag];
+                    NSArray *object = [[NSArray alloc] initWithObjects:session, etag, findTask, nil];
                     [[NSNotificationCenter defaultCenter] postNotificationName:k_networkingSessionNotification object:object];
                 });
             }
@@ -2863,8 +2834,8 @@
                 
                 dispatch_async(dispatch_get_main_queue(), ^{
                     
-                    [app.listChangeTask setObject:@"cancelUpload" forKey:metadata.etag];
-                    NSArray *object = [[NSArray alloc] initWithObjects:session, metadata, findTask, nil];
+                    [app.listChangeTask setObject:@"cancelUpload" forKey:etag];
+                    NSArray *object = [[NSArray alloc] initWithObjects:session, etag, findTask, nil];
                     [[NSNotificationCenter defaultCenter] postNotificationName:k_networkingSessionNotification object:object];
                 });
             }
@@ -2912,8 +2883,8 @@
                 
                 dispatch_async(dispatch_get_main_queue(), ^{
                     
-                    [app.listChangeTask setObject:@"stopUpload" forKey:metadata.etag];
-                    NSArray *object = [[NSArray alloc] initWithObjects:session, metadata, findTask, nil];
+                    [app.listChangeTask setObject:@"stopUpload" forKey:etag];
+                    NSArray *object = [[NSArray alloc] initWithObjects:session, etag, findTask, nil];
                     [[NSNotificationCenter defaultCenter] postNotificationName:k_networkingSessionNotification object:object];
                 });
             }
@@ -3158,7 +3129,6 @@
 
 - (void)settingFavoriteSuccess:(CCMetadataNet *)metadataNet
 {
-    //[CCCoreData setMetadataFavoriteEtag:metadataNet.etag favorite:[metadataNet.options boolValue] activeAccount:app.activeAccount context:nil];
     _dateReadDataSource = nil;
     
     [[NCManageDatabase sharedInstance] setMetadataFavorite:metadataNet.etag favorite:[metadataNet.options boolValue]];
@@ -3168,9 +3138,8 @@
     else
         [self reloadDatasource:metadataNet.serverUrl etag:metadataNet.etag selector:metadataNet.selector];
     
-    //tableMetadata *metadata = [CCCoreData getMetadataWithPreficate:[NSPredicate predicateWithFormat:@"(etag == %@) AND (account == %@)", metadataNet.etag, app.activeAccount] context:nil];
     
-    tableMetadata *metadata = [[NCManageDatabase sharedInstance] getMetadataWithPreficate:[NSPredicate predicateWithFormat:@"(etag == %@) AND (account == %@)", metadataNet.etag, app.activeAccount]];
+    tableMetadata *metadata = [[NCManageDatabase sharedInstance] getMetadataWithPreficate:[NSPredicate predicateWithFormat:@"etag = %@", metadataNet.etag]];
     
     if (metadata.directory && metadata.favorite) {
         
@@ -4565,6 +4534,8 @@
 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
 {
     tableMetadata *metadata = [self getMetadataFromSectionDataSource:indexPath];
+    if (!metadata || [[NCManageDatabase sharedInstance] isTableInvalidated:metadata])
+        return NO;
     
     if (metadata == nil || metadata.errorPasscode || (metadata.cryptated && [metadata.title length] == 0) || metadata.sessionTaskIdentifier  >= 0 || metadata.sessionTaskIdentifier >= 0) return NO;
     else return YES;
@@ -4778,8 +4749,9 @@
     }
     
     NSString *etag = [etags objectAtIndex:indexPath.row];
+    tableMetadata *metadata = [_sectionDataSource.allRecordsDataSource objectForKey:etag];
     
-    return [_sectionDataSource.allRecordsDataSource objectForKey:etag];
+    return metadata;
 }
 
 - (NSArray *)getMetadatasFromSectionDataSource:(NSInteger)section
@@ -4966,14 +4938,15 @@
     
     tableMetadata *metadata = [self getMetadataFromSectionDataSource:indexPath];
     
+    if (!metadata || [[NCManageDatabase sharedInstance] isTableInvalidated:metadata]) {
+        return [tableView dequeueReusableCellWithIdentifier:@"CellMainTransfer"];
+    }
+    
     NSString *serverUrl = [CCCoreData getServerUrlFromDirectoryID:metadata.directoryID activeAccount:metadata.account];
     
     if ([metadata.session isEqualToString:@""] || metadata.session == nil) typeCell = @"CellMain";
     else typeCell = @"CellMainTransfer";
     
-    if (!metadata)
-        return [tableView dequeueReusableCellWithIdentifier:typeCell];
-    
     CCCellMainTransfer *cell = (CCCellMainTransfer *)[tableView dequeueReusableCellWithIdentifier:typeCell forIndexPath:indexPath];
     
     // separator

+ 3 - 2
iOSClient/Networking/CCNetworking.m

@@ -411,6 +411,7 @@
             if (!metadata) return;
             
             NSString *rev = metadata.rev;
+            NSString *etag = metadata.etag;
             NSDictionary *fields = [httpResponse allHeaderFields];
             
             if (errorCode == 0) {
@@ -427,7 +428,7 @@
                 [[NCManageDatabase sharedInstance] addActivityClient:fileName etag:metadata.etag action:k_activityDebugActionDownload selector:metadata.sessionSelector note:[NSString stringWithFormat:@"Server: %@ Error: %@", serverUrl, [CCError manageErrorKCF:errorCode withNumberError:YES]] type:k_activityTypeFailure verbose:k_activityVerboseDefault  activeUrl:_activeUrl];
             }
         
-            NSArray *object = [[NSArray alloc] initWithObjects:session, metadata, task, nil];
+            NSArray *object = [[NSArray alloc] initWithObjects:session, etag, task, nil];
             [[NSNotificationCenter defaultCenter] postNotificationName:k_networkingSessionNotification object:object];
                 
             [self downloadFileSuccessFailure:fileName etag:metadata.etag rev:rev date:date serverUrl:serverUrl selector:metadata.sessionSelector selectorPost:metadata.sessionSelectorPost errorCode:errorCode];
@@ -463,7 +464,7 @@
                 [[NCManageDatabase sharedInstance] addActivityClient:fileName etag:metadata.etag action:k_activityDebugActionUpload selector:metadata.sessionSelector note:[NSString stringWithFormat:@"Server: %@ Error: %@", serverUrl, [CCError manageErrorKCF:errorCode withNumberError:YES]] type:k_activityTypeFailure verbose:k_activityVerboseDefault   activeUrl:_activeUrl];
             }
                     
-            NSArray *object = [[NSArray alloc] initWithObjects:session, metadata, task, nil];
+            NSArray *object = [[NSArray alloc] initWithObjects:session, etag, task, nil];
             [[NSNotificationCenter defaultCenter] postNotificationName:k_networkingSessionNotification object:object];
                 
             [self uploadFileSuccessFailure:metadata fileName:fileName etag:etag rev:rev date:date serverUrl:serverUrl errorCode:errorCode];