Skip to content
Snippets Groups Projects
SettingsDeleteViewModel.swift 1.39 KiB
Newer Older
Bruno Muniz's avatar
Bruno Muniz committed
import Defaults
Bruno Muniz's avatar
Bruno Muniz committed
import Keychain
import Foundation
Bruno Muniz's avatar
Bruno Muniz committed
import AppResources
Bruno Muniz's avatar
Bruno Muniz committed
import XXMessengerClient
Bruno Muniz's avatar
Bruno Muniz committed

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
Bruno Muniz's avatar
Bruno Muniz committed
  @KeyObject(.username, defaultValue: nil) var username: String?

  private var isCurrentlyDeleting = false
  
  func didTapDelete() {
    guard isCurrentlyDeleting == false else { return }
    isCurrentlyDeleting = true

Bruno Muniz's avatar
Bruno Muniz committed
    
    do {
      try cleanUD()
      try messenger.destroy()
      try keychain.destroy()
      try dbManager.removeDB()
Bruno Muniz's avatar
Bruno Muniz committed

Bruno Muniz's avatar
Bruno Muniz committed
      UserDefaults.resetStandardUserDefaults()
      UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
      UserDefaults.standard.synchronize()
Bruno Muniz's avatar
Bruno Muniz committed

      hudManager.show(.init(
Bruno Muniz's avatar
Bruno Muniz committed
        title: Localized.Settings.Delete.Success.title,
        content: Localized.Settings.Delete.Success.subtitle
Bruno Muniz's avatar
Bruno Muniz committed
      ))
    } catch {
      DispatchQueue.main.async { [weak self] in
Bruno Muniz's avatar
Bruno Muniz committed
        guard let self else { return }
        self.hudManager.show(.init(error: error))
Bruno Muniz's avatar
Bruno Muniz committed
      }
Bruno Muniz's avatar
Bruno Muniz committed
    }
Bruno Muniz's avatar
Bruno Muniz committed
  }
  
  private func cleanUD() throws {
    try messenger.ud.get()!.permanentDeleteAccount(
      username: .init(type: .username, value: username!)
    )
Bruno Muniz's avatar
Bruno Muniz committed
  }
Bruno Muniz's avatar
Bruno Muniz committed
}