Bläddra i källkod

Merge pull request #616 from deltachat/remove_account_data

Clear blobs folder on account deletion
bjoern 5 år sedan
förälder
incheckning
3683bc395f

+ 1 - 9
deltachat-ios/Controller/AccountSetupController.swift

@@ -804,8 +804,6 @@ class AccountSetupController: UITableViewController {
             return
         }
 
-        let dbfile = DatabaseHelper().currentDatabaseLocation
-        let dburl = URL(fileURLWithPath: dbfile, isDirectory: false)
         let alert = UIAlertController(
             title: String.localized("delete_account_ask"),
             message: nil,
@@ -814,13 +812,7 @@ class AccountSetupController: UITableViewController {
         alert.addAction(UIAlertAction(title: String.localized("delete_account"), style: .destructive, handler: { _ in
             appDelegate.stop()
             appDelegate.close()
-            do {
-                //TODO: remove also blobs folder?!
-                try FileManager.default.removeItem(at: dburl)
-            } catch {
-                logger.error("failed to delete db: \(error)")
-            }
-
+            DatabaseHelper().clearAccountData()
             appDelegate.open()
             appDelegate.start()
 

+ 26 - 13
deltachat-ios/Helper/DatabaseHelper.swift

@@ -24,7 +24,7 @@ class DatabaseHelper {
         return fileContainer.appendingPathComponent("messenger.db-blobs").path
     }
 
-    var localBlobsDir: String {
+    var localDbBlobsDir: String {
         return localDocumentsDir.appendingPathComponent("messenger.db-blobs").path
     }
 
@@ -41,39 +41,52 @@ class DatabaseHelper {
         return sharedDbFile
     }
 
-    func clearSharedDbBlobsDir() {
+    var currentBlobsDirLocation: String {
+        let filemanager = FileManager.default
+        if filemanager.fileExists(atPath: localDbBlobsDir) {
+            return localDbBlobsDir
+        }
+        return sharedDbBlobsDir
+    }
+
+    func clearDbBlobsDir(at path: String) {
         let fileManager = FileManager.default
         do {
-            if fileManager.fileExists(atPath: sharedDbBlobsDir) {
-                let filePaths =  try fileManager.contentsOfDirectory(atPath: sharedDbBlobsDir)
+            if fileManager.fileExists(atPath: path) {
+                let filePaths =  try fileManager.contentsOfDirectory(atPath: path)
                 for filePath in filePaths {
-                    let completePath = URL(fileURLWithPath: sharedDbBlobsDir).appendingPathComponent(filePath)
+                    let completePath = URL(fileURLWithPath: path).appendingPathComponent(filePath)
                     try fileManager.removeItem(atPath: completePath.path)
                 }
-                try fileManager.removeItem(atPath: sharedDbBlobsDir)
+                try fileManager.removeItem(atPath: path)
             }
         } catch {
           logger.error("Could not clean shared blobs dir, it might be it didn't exist")
         }
     }
 
-    func clearSharedDb() {
+    func clearDb(at path: String) {
         let filemanager = FileManager.default
-        if filemanager.fileExists(atPath: sharedDbFile) {
+        if filemanager.fileExists(atPath: path) {
             do {
-                try filemanager.removeItem(atPath: sharedDbFile)
+                try filemanager.removeItem(atPath: path)
             } catch {
                 logger.error("Failed to delete db: \(error)")
             }
         }
     }
 
+    func clearAccountData() {
+        clearDb(at: currentDatabaseLocation)
+        clearDbBlobsDir(at: currentBlobsDirLocation)
+    }
+
     func moveBlobsFolder() {
         let filemanager = FileManager.default
-        if filemanager.fileExists(atPath: localBlobsDir) {
+        if filemanager.fileExists(atPath: localDbBlobsDir) {
             do {
-                clearSharedDbBlobsDir()
-                try filemanager.moveItem(at: URL(fileURLWithPath: localBlobsDir), to: URL(fileURLWithPath: sharedDbBlobsDir))
+                clearDbBlobsDir(at: sharedDbBlobsDir)
+                try filemanager.moveItem(at: URL(fileURLWithPath: localDbBlobsDir), to: URL(fileURLWithPath: sharedDbBlobsDir))
             } catch let error {
                 logger.error("Could not move db blobs directory to shared space: \(error.localizedDescription)")
             }
@@ -84,7 +97,7 @@ class DatabaseHelper {
       let filemanager = FileManager.default
       if filemanager.fileExists(atPath: localDbFile) {
           do {
-              clearSharedDb()
+              clearDb(at: sharedDbFile)
               try filemanager.moveItem(at: URL(fileURLWithPath: localDbFile), to: URL(fileURLWithPath: sharedDbFile))
               moveBlobsFolder()
           } catch let error {