Forráskód Böngészése

Improved directory, cache, remove account

marinofaggiana 5 éve
szülő
commit
1210035d8e

+ 2 - 59
iOSClient/AppDelegate.m

@@ -51,79 +51,22 @@ PKPushRegistry *pushRegistry;
 
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
-    NSString *path;
-    NSURL *dirGroup = [CCUtility getDirectoryGroup];
-    
-    NSLog(@"[LOG] Start program group -----------------");
-    NSLog(@"%@", [dirGroup path]);    
-    NSLog(@"[LOG] Start program application -----------");
-    NSLog(@"%@", [[CCUtility getDirectoryDocuments] stringByDeletingLastPathComponent]);
-    NSLog(@"[LOG] -------------------------------------");
-
-    // create Directory Documents
-    path = [CCUtility getDirectoryDocuments];
-    if (![[NSFileManager defaultManager] fileExistsAtPath: path])
-        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
-    
-    // create Directory audio => Library, Application Support, audio
-    path = [CCUtility getDirectoryAudio];
-    if (![[NSFileManager defaultManager] fileExistsAtPath: path])
-        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
-
-    // create Directory database Nextcloud
-    path = [[dirGroup URLByAppendingPathComponent:k_appDatabaseNextcloud] path];
-    if (![[NSFileManager defaultManager] fileExistsAtPath:path])
-        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
-    [[NSFileManager defaultManager] setAttributes:@{NSFileProtectionKey:NSFileProtectionNone} ofItemAtPath:path error:nil];
-
-    // create Directory User Data
-    path = [[dirGroup URLByAppendingPathComponent:k_appUserData] path];
-    if (![[NSFileManager defaultManager] fileExistsAtPath:path])
-        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
-    
-    // create Directory Provider Storage
-    path = [CCUtility getDirectoryProviderStorage];
-    if (![[NSFileManager defaultManager] fileExistsAtPath: path])
-        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
-    
-    // create Directory Scan
-    path = [[dirGroup URLByAppendingPathComponent:k_appScan] path];
-    if (![[NSFileManager defaultManager] fileExistsAtPath:path])
-        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
-    
-    // Directory Excluded From Backup
-    [CCUtility addSkipBackupAttributeToItemAtURL:[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]];
-    [CCUtility addSkipBackupAttributeToItemAtURL:[[CCUtility getDirectoryGroup] URLByAppendingPathComponent:k_DirectoryProviderStorage]];
-    [CCUtility addSkipBackupAttributeToItemAtURL:[[CCUtility getDirectoryGroup] URLByAppendingPathComponent:k_appUserData]];
+    [CCUtility createDirectoryStandard];
     
     // Verify upgrade
     if ([self upgrade]) {
-    
         // Set account, if no exists clear all
         tableAccount *tableAccount = [[NCManageDatabase sharedInstance] getAccountActive];
-    
         if (tableAccount == nil) {
-        
             // remove all the keys Chain
             [CCUtility deleteAllChainStore];
-    
             // remove all the App group key
             [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
-
         } else {
-        
             [self settingActiveAccount:tableAccount.account activeUrl:tableAccount.url activeUser:tableAccount.user activeUserID:tableAccount.userID activePassword:[CCUtility getPassword:tableAccount.account]];
         }
     }
     
-#ifdef DEBUG
-    NSLog(@"[LOG] Copy DB on Documents directory");
-    NSString *atPathDB = [NSString stringWithFormat:@"%@/nextcloud.realm", [[dirGroup URLByAppendingPathComponent:k_appDatabaseNextcloud] path]];
-    NSString *toPathDB = [NSString stringWithFormat:@"%@/nextcloud.realm", [CCUtility getDirectoryDocuments]];
-    [[NSFileManager defaultManager] removeItemAtPath:toPathDB error:nil];
-    [[NSFileManager defaultManager] copyItemAtPath:atPathDB toPath:toPathDB error:nil];
-#endif
-    
     // UserDefaults
     self.ncUserDefaults = [[NSUserDefaults alloc] initWithSuiteName:[NCBrandOptions sharedInstance].capabilitiesGroups];
     
@@ -453,7 +396,7 @@ PKPushRegistry *pushRegistry;
     [self unsubscribingNextcloudServerPushNotification:account url:self.activeUrl withSubscribing:false];
     [self settingActiveAccount:nil activeUrl:nil activeUser:nil activeUserID:nil activePassword:nil];
     
-    [[NCUtility sharedInstance] removeAccountOnDBKeychain:account];
+    [[NCUtility sharedInstance] removeAccountOnDBKeychain:account onlyLocalFile:false];
     
     if (withChangeUser) {
         NSArray *listAccount = [[NCManageDatabase sharedInstance] getAccounts];

+ 4 - 0
iOSClient/Login/CCLogin.m

@@ -372,6 +372,10 @@
                     // STOP Intro
                     [CCUtility setIntro:YES];
                     
+                    // NO account found, clear
+                    if ([NCManageDatabase.sharedInstance getAccounts] == nil) {
+                    }
+                    
                     [[NCManageDatabase sharedInstance] deleteAccount:account];
                     [[NCManageDatabase sharedInstance] addAccount:account url:url user:user password:password loginFlow:false];
                     

+ 5 - 1
iOSClient/Login/CCLoginWeb.swift

@@ -122,7 +122,11 @@ extension CCLoginWeb: SwiftModalWebVCDelegate {
                         
                         // STOP Intro
                         CCUtility.setIntro(true)
-                                                
+                        
+                        // NO account found, clear
+                        if NCManageDatabase.sharedInstance.getAccounts() == nil {
+                        }
+                        
                         // Add new account
                         NCManageDatabase.sharedInstance.deleteAccount(account)
                         NCManageDatabase.sharedInstance.addAccount(account, url: serverUrl, user: username, password: password, loginFlow: true)

+ 4 - 67
iOSClient/Settings/CCAdvanced.m

@@ -210,17 +210,15 @@
         [[NSFileManager defaultManager] removeItemAtPath:[CCUtility getDirectoryUserData] error:nil];
         [[NSFileManager defaultManager] removeItemAtPath:[CCUtility getDirectoryScan] error:nil];
         
-        [self emptyDocumentsDirectory];
+        [CCUtility emptyDocumentsDirectory];
         NSArray* tmpDirectory = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSTemporaryDirectory() error:NULL];
         for (NSString *file in tmpDirectory)
             [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@%@", NSTemporaryDirectory(), file] error:NULL];
         
         [KTVHTTPCache cacheDeleteAllCaches];
-        
-        //[self recalculateSize];
-        
+                
         // Clear Database
-        
+
         [[NCManageDatabase sharedInstance] clearTable:[tableLocalFile class] account:appDelegate.activeAccount];
 
         if (withDB) {
@@ -299,27 +297,9 @@
         [self.hud visibleIndeterminateHud];
         
         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) {
-                        
-            [[NSURLCache sharedURLCache] setMemoryCapacity:0];
-            [[NSURLCache sharedURLCache] setDiskCapacity:0];
             
-            [[CCNetworking sharedNetworking] invalidateAndCancelAllSession];
-                        
             [[NCManageDatabase sharedInstance] removeDB];
-            
-            [CCUtility deleteAllChainStore];
-            
-            [[NSFileManager defaultManager] removeItemAtPath:[CCUtility getDirectoryProviderStorage] error:nil];
-            
-            [self emptyDocumentsDirectory];
-            
-            [self emptyLibraryDirectory];
-            
-            [self emptyGroupApplicationSupport];
-            
-            NSArray* tmpDirectory = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSTemporaryDirectory() error:NULL];
-            for (NSString *file in tmpDirectory)
-                [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@%@", NSTemporaryDirectory(), file] error:NULL];
+            [NCUtility.sharedInstance removeAllSettings];
             
             [self.hud hideHud];
             
@@ -338,47 +318,4 @@
     [self presentViewController:alertController animated:YES completion:nil];
 }
 
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark == Utility ==
-#pragma --------------------------------------------------------------------------------------------
-
-- (void)emptyGroupApplicationSupport
-{
-    NSString *file;
-    NSURL *dirGroup = [CCUtility getDirectoryGroup];
-    NSString *dirIniziale = [[dirGroup URLByAppendingPathComponent:k_appApplicationSupport] path];
-    
-    NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:dirIniziale];
-    
-    while (file = [enumerator nextObject])
-        [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", dirIniziale, file] error:nil];
-}
-
-- (void)emptyLibraryDirectory
-{
-    NSString *file;
-    NSString *dirIniziale;
-    
-    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
-    dirIniziale = [paths objectAtIndex:0];
-    
-    NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:dirIniziale];
-    
-    while (file = [enumerator nextObject])
-        [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", dirIniziale, file] error:nil];
-}
-
-- (void)emptyDocumentsDirectory
-{
-    NSString *file;
-    NSString *dirIniziale;
-    
-    dirIniziale = [CCUtility getDirectoryDocuments];
-    
-    NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:dirIniziale];
-    
-    while (file = [enumerator nextObject])
-        [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", dirIniziale, file] error:nil];
-}
-
 @end

+ 8 - 0
iOSClient/Utility/CCUtility.h

@@ -184,6 +184,8 @@
 + (NSString *)createFileNameDate:(NSString *)fileName extension:(NSString *)extension;
 + (NSString *)createFileName:(NSString *)fileName fileDate:(NSDate *)fileDate fileType:(PHAssetMediaType)fileType keyFileName:(NSString *)keyFileName keyFileNameType:(NSString *)keyFileNameType keyFileNameOriginal:(NSString *)keyFileNameOriginal;
 
++ (void)createDirectoryStandard;
+
 + (NSURL *)getDirectoryGroup;
 + (NSString *)getHomeServerUrlActiveUrl:(NSString *)activeUrl;
 + (NSString *)getStringUser:(NSString *)activeUser activeUrl:(NSString *)activeUrl;
@@ -200,6 +202,12 @@
 + (BOOL)fileProviderStorageExists:(NSString *)fileID fileNameView:(NSString *)fileNameView;
 + (BOOL)fileProviderStorageIconExists:(NSString *)fileID fileNameView:(NSString *)fileNameView;
 
++ (void)emptyGroupApplicationSupport;
++ (void)emptyLibraryDirectory;
++ (void)emptyDocumentsDirectory;
++ (void)emptyTemporaryDirectory;
++ (void)emptyDirectoryProviderStorage;
+
 + (NSString *)getTitleSectionDate:(NSDate *)date;
 
 + (void)moveFileAtPath:(NSString *)atPath toPath:(NSString *)toPath;

+ 111 - 0
iOSClient/Utility/CCUtility.m

@@ -887,6 +887,66 @@
     return fileName;
 }
 
++ (void)createDirectoryStandard
+{
+    NSString *path;
+    NSURL *dirGroup = [CCUtility getDirectoryGroup];
+    
+    NSLog(@"[LOG] Dir Group");
+    NSLog(@"%@", [dirGroup path]);
+    NSLog(@"[LOG] Program application ");
+    NSLog(@"%@", [[CCUtility getDirectoryDocuments] stringByDeletingLastPathComponent]);
+    
+    // create Directory Documents
+    path = [CCUtility getDirectoryDocuments];
+    if (![[NSFileManager defaultManager] fileExistsAtPath: path])
+        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
+    
+    // create Directory audio => Library, Application Support, audio
+    path = [CCUtility getDirectoryAudio];
+    if (![[NSFileManager defaultManager] fileExistsAtPath: path])
+        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
+    
+    // create Directory database Nextcloud
+    path = [[dirGroup URLByAppendingPathComponent:k_appDatabaseNextcloud] path];
+    if (![[NSFileManager defaultManager] fileExistsAtPath:path])
+        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
+    [[NSFileManager defaultManager] setAttributes:@{NSFileProtectionKey:NSFileProtectionNone} ofItemAtPath:path error:nil];
+    
+    // create Directory User Data
+    path = [[dirGroup URLByAppendingPathComponent:k_appUserData] path];
+    if (![[NSFileManager defaultManager] fileExistsAtPath:path])
+        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
+    
+    // create Directory Provider Storage
+    path = [CCUtility getDirectoryProviderStorage];
+    if (![[NSFileManager defaultManager] fileExistsAtPath: path])
+        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
+    
+    // create Directory Scan
+    path = [[dirGroup URLByAppendingPathComponent:k_appScan] path];
+    if (![[NSFileManager defaultManager] fileExistsAtPath:path])
+        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
+    
+    // create Directory Temp
+    path = NSTemporaryDirectory();
+    if (![[NSFileManager defaultManager] fileExistsAtPath:path])
+        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
+    
+    // Directory Excluded From Backup
+    [CCUtility addSkipBackupAttributeToItemAtURL:[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]];
+    [CCUtility addSkipBackupAttributeToItemAtURL:[[CCUtility getDirectoryGroup] URLByAppendingPathComponent:k_DirectoryProviderStorage]];
+    [CCUtility addSkipBackupAttributeToItemAtURL:[[CCUtility getDirectoryGroup] URLByAppendingPathComponent:k_appUserData]];
+    
+#ifdef DEBUG
+    NSLog(@"[LOG] Copy DB on Documents directory");
+    NSString *atPathDB = [NSString stringWithFormat:@"%@/nextcloud.realm", [[dirGroup URLByAppendingPathComponent:k_appDatabaseNextcloud] path]];
+    NSString *toPathDB = [NSString stringWithFormat:@"%@/nextcloud.realm", [CCUtility getDirectoryDocuments]];
+    [[NSFileManager defaultManager] removeItemAtPath:toPathDB error:nil];
+    [[NSFileManager defaultManager] copyItemAtPath:atPathDB toPath:toPathDB error:nil];
+#endif
+}
+
 + (NSURL *)getDirectoryGroup
 {
     NSURL *path = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:[NCBrandOptions sharedInstance].capabilitiesGroups];
@@ -1047,6 +1107,57 @@
     else return false;
 }
 
++ (void)emptyGroupApplicationSupport
+{
+    NSString *file;
+    NSURL *dirGroup = [CCUtility getDirectoryGroup];
+    NSString *dirIniziale = [[dirGroup URLByAppendingPathComponent:k_appApplicationSupport] path];
+    
+    NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:dirIniziale];
+    
+    while (file = [enumerator nextObject])
+        [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", dirIniziale, file] error:nil];
+}
+
++ (void)emptyLibraryDirectory
+{
+    NSString *file;
+    NSString *dirIniziale;
+    
+    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
+    dirIniziale = [paths objectAtIndex:0];
+    
+    NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:dirIniziale];
+    
+    while (file = [enumerator nextObject])
+        [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", dirIniziale, file] error:nil];
+}
+
++ (void)emptyDocumentsDirectory
+{
+    NSString *file;
+    NSString *dirIniziale;
+    
+    dirIniziale = [CCUtility getDirectoryDocuments];
+    
+    NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:dirIniziale];
+    
+    while (file = [enumerator nextObject])
+        [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", dirIniziale, file] error:nil];
+}
+
++ (void)emptyTemporaryDirectory
+{
+    NSArray* tmpDirectory = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSTemporaryDirectory() error:NULL];
+    for (NSString *file in tmpDirectory)
+        [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@%@", NSTemporaryDirectory(), file] error:NULL];
+}
+
++ (void)emptyDirectoryProviderStorage
+{
+    [[NSFileManager defaultManager] removeItemAtPath:[CCUtility getDirectoryProviderStorage] error:nil];
+}
+
 + (NSString *)getTitleSectionDate:(NSDate *)date
 {
     NSString * title;

+ 44 - 19
iOSClient/Utility/NCUtility.swift

@@ -23,6 +23,7 @@
 
 import Foundation
 import SVGKit
+import KTVHTTPCache
 
 class NCUtility: NSObject {
 
@@ -374,25 +375,49 @@ class NCUtility: NSObject {
         return false
     }
     
-    @objc func removeAccountOnDBKeychain(_ account: String) {
-        
-        NCManageDatabase.sharedInstance.clearTable(tableAccount.self, account: account)
-        NCManageDatabase.sharedInstance.clearTable(tableActivity.self, account: account)
-        NCManageDatabase.sharedInstance.clearTable(tableActivitySubjectRich.self, account: account)
-        NCManageDatabase.sharedInstance.clearTable(tableCapabilities.self, account: account)
-        NCManageDatabase.sharedInstance.clearTable(tableDirectory.self, account: account)
-        NCManageDatabase.sharedInstance.clearTable(tableE2eEncryption.self, account: account)
-        NCManageDatabase.sharedInstance.clearTable(tableExternalSites.self, account: account)
-        NCManageDatabase.sharedInstance.clearTable(tableLocalFile.self, account: account)
-        NCManageDatabase.sharedInstance.clearTable(tableMetadata.self, account: account)
-        NCManageDatabase.sharedInstance.clearTable(tableMedia.self, account: account)
-        NCManageDatabase.sharedInstance.clearTable(tablePhotoLibrary.self, account: account)
-        NCManageDatabase.sharedInstance.clearTable(tableShare.self, account: account)
-
-        CCUtility.clearAllKeysEnd(toEnd: account)
-        CCUtility.clearAllKeysPushNotification(account)
-        CCUtility.setCertificateError(account, error: false)
-        CCUtility.setPassword(account, password: nil)
+    @objc func removeAccountOnDBKeychain(_ account: String?, onlyLocalFile: Bool) {
+        
+        if onlyLocalFile {
+            NCManageDatabase.sharedInstance.clearTable(tableLocalFile.self, account: account)
+        } else {
+            NCManageDatabase.sharedInstance.clearTable(tableAccount.self, account: account)
+            NCManageDatabase.sharedInstance.clearTable(tableActivity.self, account: account)
+            NCManageDatabase.sharedInstance.clearTable(tableActivitySubjectRich.self, account: account)
+            NCManageDatabase.sharedInstance.clearTable(tableCapabilities.self, account: account)
+            NCManageDatabase.sharedInstance.clearTable(tableDirectory.self, account: account)
+            NCManageDatabase.sharedInstance.clearTable(tableE2eEncryption.self, account: account)
+            NCManageDatabase.sharedInstance.clearTable(tableExternalSites.self, account: account)
+            NCManageDatabase.sharedInstance.clearTable(tableLocalFile.self, account: account)
+            NCManageDatabase.sharedInstance.clearTable(tableMetadata.self, account: account)
+            NCManageDatabase.sharedInstance.clearTable(tableMedia.self, account: account)
+            NCManageDatabase.sharedInstance.clearTable(tablePhotoLibrary.self, account: account)
+            NCManageDatabase.sharedInstance.clearTable(tableShare.self, account: account)
+        }
+        
+        if (account != nil ) {
+            CCUtility.clearAllKeysEnd(toEnd: account)
+            CCUtility.clearAllKeysPushNotification(account)
+            CCUtility.setCertificateError(account, error: false)
+            CCUtility.setPassword(account, password: nil)
+        }
+    }
+    
+    @objc func removeAllSettings() {
+        
+        URLCache.shared.memoryCapacity = 0
+        URLCache.shared.diskCapacity = 0
+        CCNetworking.shared()?.invalidateAndCancelAllSession()
+        KTVHTTPCache.cacheDeleteAllCaches()
+        
+        CCUtility.emptyDirectoryProviderStorage()
+        CCUtility.emptyDocumentsDirectory()
+        CCUtility.emptyLibraryDirectory()
+        CCUtility.emptyGroupApplicationSupport()
+        CCUtility.emptyTemporaryDirectory()
+        
+        CCUtility.createDirectoryStandard()
+        
+        CCUtility.deleteAllChainStore()
     }
 }