Newer
Older
final class SettingsDeleteViewModel {
@Dependency(\.keychain) var keychain: KeychainManager
@Dependency(\.app.dbManager) var dbManager: DBManager
@Dependency(\.app.messenger) var messenger: Messenger
@Dependency(\.app.hudManager) var hudManager: HUDManager
@KeyObject(.username, defaultValue: nil) var username: String?
private var isCurrentlyDeleting = false
func didTapDelete() {
guard isCurrentlyDeleting == false else { return }
isCurrentlyDeleting = true
try keychain.destroy()
try dbManager.removeDB()
try deleteDatabase()
UserDefaults.resetStandardUserDefaults()
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
UserDefaults.standard.synchronize()
hudManager.show(.init(
))
} catch {
DispatchQueue.main.async { [weak self] in
self.hudManager.show(.init(error: error))
try messenger.ud.get()!.permanentDeleteAccount(
username: .init(type: .username, value: username!)
)
}
private func deleteDatabase() throws {
let dbPath = FileManager.default
.containerURL(forSecurityApplicationGroupIdentifier: "group.elixxir.messenger")!
.appendingPathComponent("xxm_database")
.appendingPathExtension("sqlite").path
try FileManager.default.removeItem(atPath: dbPath)
}