From 2346a778ddcc78440c1defde13eb4b96586b604a Mon Sep 17 00:00:00 2001
From: Bruno Muniz Azevedo Filho <bruno@elixxir.io>
Date: Tue, 6 Sep 2022 22:39:14 -0300
Subject: [PATCH] Continued with migration

---
 Package.swift                                 |  1 +
 Sources/App/DependencyRegistrator.swift       |  3 +-
 Sources/Keychain/KeychainHandler.swift        |  5 ++++
 Sources/Keychain/MockKeychainHandler.swift    |  1 +
 Sources/LaunchFeature/LaunchViewModel.swift   | 13 +++++++-
 Sources/LaunchFeature/Resources/udContact.bin |  2 +-
 .../ViewModels/AccountDeleteViewModel.swift   | 30 ++++++++-----------
 .../xcshareddata/swiftpm/Package.resolved     |  6 ++--
 8 files changed, 38 insertions(+), 23 deletions(-)

diff --git a/Package.swift b/Package.swift
index f654545c..d07ef4c1 100644
--- a/Package.swift
+++ b/Package.swift
@@ -456,6 +456,7 @@ let package = Package(
                 .product(name: "DifferenceKit", package: "DifferenceKit"),
                 .product(name: "ScrollViewController", package: "ScrollViewController"),
                 .product(name: "XXClient", package: "elixxir-dapps-sdk-swift"),
+                .product(name: "XXMessengerClient", package: "elixxir-dapps-sdk-swift"),
             ]
         ),
         .testTarget(
diff --git a/Sources/App/DependencyRegistrator.swift b/Sources/App/DependencyRegistrator.swift
index 7cc24828..f1d31d5d 100644
--- a/Sources/App/DependencyRegistrator.swift
+++ b/Sources/App/DependencyRegistrator.swift
@@ -284,7 +284,8 @@ extension PasswordStorage {
         )
         return PasswordStorage(
             save: { password in keychain[data: "password"] = password},
-            load: { try keychain[data: "password"] ?? { throw MissingPasswordError() }() }
+            load: { try keychain[data: "password"] ?? { throw MissingPasswordError() }() },
+            remove: { try keychain.remove("password") }
         )
     }()
 }
diff --git a/Sources/Keychain/KeychainHandler.swift b/Sources/Keychain/KeychainHandler.swift
index 6ac0d645..26df90bd 100644
--- a/Sources/Keychain/KeychainHandler.swift
+++ b/Sources/Keychain/KeychainHandler.swift
@@ -10,6 +10,7 @@ public enum KeychainSFTP: String {
 public protocol KeychainHandling {
     func clear() throws
     func getPassword() throws -> Data?
+    func remove(_ key: String) throws
     func store(password pwd: Data) throws
 
     func get(key: KeychainSFTP) throws -> String?
@@ -24,6 +25,10 @@ public struct KeychainHandler: KeychainHandling {
         self.keychain = Keychain(service: "XXM")
     }
 
+    public func remove(_ key: String) throws {
+        try keychain.remove(key)
+    }
+
     public func clear() throws {
         try keychain.removeAll()
     }
diff --git a/Sources/Keychain/MockKeychainHandler.swift b/Sources/Keychain/MockKeychainHandler.swift
index 39d4a33d..ea2af5d6 100644
--- a/Sources/Keychain/MockKeychainHandler.swift
+++ b/Sources/Keychain/MockKeychainHandler.swift
@@ -4,6 +4,7 @@ public struct MockKeychainHandler: KeychainHandling {
     public init() {}
 
     public func clear() throws {}
+    public func remove(_ key: String) throws {}
     public func store(password pwd: Data) throws {}
     public func getPassword() throws -> Data? { Data() }
     public func get(key: KeychainSFTP) throws -> String? { nil }
diff --git a/Sources/LaunchFeature/LaunchViewModel.swift b/Sources/LaunchFeature/LaunchViewModel.swift
index 12b722f4..8bf83a2f 100644
--- a/Sources/LaunchFeature/LaunchViewModel.swift
+++ b/Sources/LaunchFeature/LaunchViewModel.swift
@@ -4,6 +4,7 @@ import Models
 import Combine
 import Defaults
 import XXModels
+import XXLogger
 import Keychain
 import Foundation
 import Permissions
@@ -106,6 +107,10 @@ final class LaunchViewModel {
 
             _ = try SetLogLevel.live(.trace)
 
+            RegisterLogWriter.live(.init(handle: {
+                XXLogger.live().debug($0)
+            }))
+
             guard let certPath = Bundle.module.path(forResource: "cmix.rip", ofType: "crt"),
                   let contactFilePath = Bundle.module.path(forResource: "udContact", ofType: "bin") else {
                 fatalError("Couldn't retrieve alternative UD credentials")
@@ -175,6 +180,11 @@ final class LaunchViewModel {
                         roundURL: "https://www.google.com.br",
                         fileTransferId: nil
                     ))
+
+                    if var contact = try? self.database.fetchContacts(.init(id: [$0.sender])).first {
+                        contact.isRecent = false
+                        try! self.database.saveContact(contact)
+                    }
                 })
             )
 
@@ -221,7 +231,8 @@ final class LaunchViewModel {
                 }
             }
         } catch {
-            print(">>> Initialization couldn't be completed: \(error.localizedDescription)")
+            let xxError = CreateUserFriendlyErrorMessage.live(error.localizedDescription)
+            hudSubject.send(.error(.init(content: xxError)))
         }
     }
 
diff --git a/Sources/LaunchFeature/Resources/udContact.bin b/Sources/LaunchFeature/Resources/udContact.bin
index eddc5d47..b2611d41 100644
--- a/Sources/LaunchFeature/Resources/udContact.bin
+++ b/Sources/LaunchFeature/Resources/udContact.bin
@@ -1 +1 @@
-<xxc(2)TMJw0XHBSzVPUAo/ZsAuD5DiOF1RH8uxZxUHW2KG9PYDkAZiB9kZo+Dl3a+leHJP1aP7KQtifEOGqQAxsBnOtd2nIe3/jw//LDqs8mZcL8wsMydDoFwycEZQIHg85L17q6u3pRMXcSfvFLBuL6H2HxP+U3Sox9YTgaPNK191opr14t03jfM7gaBcdbk9PE/hwUeotu3eTavqy4lFNIa917wZCDf+n9aGz9jB2q/axf0x+h0h1uVQD6xaAJD5gqyvCmECU/iCaYCbPUh+zFfSEymujIFWscZAJL6ocPn9DCYw80mbKpm0BDQRBm+EVqo4KVMsLqbx0hJJ8Vh5a8c9f+aiBXjlwnZJ2Z8DzxbsVg7VzJc5sn5Dl0ajrkzBdZBWbgOJEgN7nIdmb3gW7poVUR1JtRIctW3wS+7/qHmLZC1SQ+x3O+eEFmb5HrulsvsUkIkFKRPQguwql9HLDA00zqg5tuDzy5yqyP//xZY4SelSTMDO/pkOMP921LaXsRzBWMGCRWa/uzaDhIgnXVs2cyxM1K5jLwQml44QWAxxTGBX/EhYpMbHLAn4+QAAAgA7Nv4tnMt8oC0Ffog/appCEA==xxc>
+<xxc(2)7mbKFLE201WzH4SGxAOpHjjehwztIV+KGifi5L/PYPcDkAZiB9kZo+Dl3Vc7dD2SdZCFMOJVgwqGzfYRDkjc8RGEllBqNxq2sRRX09iQVef0kJQUgJCHNCOcvm6Ki0JJwvjLceyFh36iwK8oLbhLgqEZY86UScdACTyBCzBIab3ob5mBthYc3mheV88yq5PGF2DQ+dEvueUm+QhOSfwzppAJA/rpW9Wq9xzYcQzaqc3ztAGYfm2BBAHS7HVmkCbvZ/K07Xrl4EBPGHJYq12tWAN/C3mcbbBYUOQXyEzbSl/mO7sL3ORr0B4FMuqCi8EdlD6RO52pVhY+Cg6roRH1t5Ng1JxPt8Mv1yyjbifPhZ5fLKwxBz8UiFORfk0/jnhwgm25LRHqtNRRUlYXLvhv0HhqyYTUt17WNtCLATSVbqLrFGdy2EGadn8mP+kQNHp93f27d/uHgBNNe7LpuYCJMdWpoG6bOqmHEftxt0/MIQA8fTtTm3jJzv+7/QjZJDvQIv0SNdp8HFogpuwde+GuS4BcY7v5xz+ArGWcRR63ct2z83MqQEn9ODr1/gAAAgA7szRpDDQIdFUQo9mkWg8xBA==xxc>
\ No newline at end of file
diff --git a/Sources/SettingsFeature/ViewModels/AccountDeleteViewModel.swift b/Sources/SettingsFeature/ViewModels/AccountDeleteViewModel.swift
index 94869e07..85157679 100644
--- a/Sources/SettingsFeature/ViewModels/AccountDeleteViewModel.swift
+++ b/Sources/SettingsFeature/ViewModels/AccountDeleteViewModel.swift
@@ -8,10 +8,12 @@ import Foundation
 import XXMessengerClient
 import DependencyInjection
 import Retry
+import XXModels
 
 final class AccountDeleteViewModel {
     @Dependency var messenger: Messenger
     @Dependency var keychain: KeychainHandling
+    @Dependency var database: Database
 
     @KeyObject(.username, defaultValue: nil) var username: String?
 
@@ -35,10 +37,20 @@ final class AccountDeleteViewModel {
             guard let self = self else { return }
 
             do {
+                print(">>> try self.cleanUD()")
                 try self.cleanUD()
-                try self.stopNetwork()
+
+                print(">>> try self.messenger.destroy()")
                 try self.messenger.destroy()
+
+                print(">>> try self.keychain.clear()")
                 try self.keychain.clear()
+
+                print(">>> try database.drop()")
+                try self.database.drop()
+
+                print(">>> try self.deleteDatabase()")
+
                 try self.deleteDatabase()
 
                 UserDefaults.resetStandardUserDefaults()
@@ -69,22 +81,6 @@ final class AccountDeleteViewModel {
         try messenger.ud.get()!.permanentDeleteAccount(username: fact)
     }
 
-    private func stopNetwork() throws {
-        let cMix = messenger.cMix.get()!
-
-        print(">>> Stopping network follower...")
-        try cMix.stopNetworkFollower()
-
-        retry(max: 10, retryStrategy: .delay(seconds: 2)) {
-            if cMix.networkFollowerStatus() != .stopped {
-                print(">>> Network still hasn't stopped. Its \(cMix.networkFollowerStatus())")
-                throw NSError.create("Gave up on stopping the network.")
-            }
-
-            print(">>> Network has stopped")
-        }
-    }
-
     private func deleteDatabase() throws {
         print(">>> Deleting database...")
 
diff --git a/client-ios.xcworkspace/xcshareddata/swiftpm/Package.resolved b/client-ios.xcworkspace/xcshareddata/swiftpm/Package.resolved
index cdfe1cbf..50525d0f 100644
--- a/client-ios.xcworkspace/xcshareddata/swiftpm/Package.resolved
+++ b/client-ios.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -105,7 +105,7 @@
       "location" : "https://git.xx.network/elixxir/elixxir-dapps-sdk-swift",
       "state" : {
         "branch" : "development",
-        "revision" : "8e3717558823ea713fd6b516cc2fcbef01d003ed"
+        "revision" : "15a7ab035a7c0b9031cf0fa977563b3a1a254647"
       }
     },
     {
@@ -319,8 +319,8 @@
       "kind" : "remoteSourceControl",
       "location" : "https://github.com/apple/swift-collections",
       "state" : {
-        "revision" : "48254824bb4248676bf7ce56014ff57b142b77eb",
-        "version" : "1.0.2"
+        "revision" : "f504716c27d2e5d4144fa4794b12129301d17729",
+        "version" : "1.0.3"
       }
     },
     {
-- 
GitLab