From ba81fd2067d1c6a948825be8662a0d3caabb90a0 Mon Sep 17 00:00:00 2001
From: Bruno Muniz Azevedo Filho <bruno@elixxir.io>
Date: Thu, 1 Dec 2022 15:46:29 -0300
Subject: [PATCH] improved destination code on launch

---
 Sources/LaunchFeature/LaunchController.swift |  4 +-
 Sources/LaunchFeature/LaunchViewModel.swift  | 45 +++++++++++---------
 2 files changed, 26 insertions(+), 23 deletions(-)

diff --git a/Sources/LaunchFeature/LaunchController.swift b/Sources/LaunchFeature/LaunchController.swift
index 2684c669..8a9b1071 100644
--- a/Sources/LaunchFeature/LaunchController.swift
+++ b/Sources/LaunchFeature/LaunchController.swift
@@ -27,7 +27,7 @@ public final class LaunchController: UIViewController {
       .statePublisher
       .receive(on: DispatchQueue.main)
       .sink { [unowned self] in
-        guard $0.shouldPushChats == false else {
+        guard $0.shouldPushEndDestination != .some(.chats) else {
           guard $0.shouldShowTerms == false else {
             navigator.perform(PresentTermsAndConditions(replacing: true, on: navigationController!))
             return
@@ -39,7 +39,7 @@ public final class LaunchController: UIViewController {
           navigator.perform(PresentChatList(on: navigationController!))
           return
         }
-        guard $0.shouldPushOnboarding == false else {
+        guard $0.shouldPushEndDestination != .some(.onboarding) else {
           navigator.perform(PresentOnboardingStart(on: navigationController!))
           return
         }
diff --git a/Sources/LaunchFeature/LaunchViewModel.swift b/Sources/LaunchFeature/LaunchViewModel.swift
index 30ac8e24..732d2e2d 100644
--- a/Sources/LaunchFeature/LaunchViewModel.swift
+++ b/Sources/LaunchFeature/LaunchViewModel.swift
@@ -29,6 +29,10 @@ import class XXClient.Cancellable
 import PulseLogHandler
 
 final class LaunchViewModel {
+  enum Destination {
+    case chats, onboarding
+  }
+
   struct UpdateModel {
     let content: String
     let urlString: String
@@ -39,9 +43,8 @@ final class LaunchViewModel {
 
   struct ViewState {
     var shouldShowTerms = false
-    var shouldPushChats = false
     var shouldOfferUpdate: UpdateModel?
-    var shouldPushOnboarding = false
+    var shouldPushEndDestination: Destination?
   }
 
   @Dependency(\.app.log) var log
@@ -202,41 +205,41 @@ extension LaunchViewModel {
 
     try dummyTrafficManager.setStatus(dummyTrafficOn)
 
-    var shouldPushChats = false
-    var shouldPushOnboarding = false
+    let endDestination: Destination
+
+    if messenger.isLoggedIn() == false {
+      if try messenger.isRegistered() {
+        try messenger.logIn()
+        endDestination = .chats
+      } else {
+        try? sftpManager.unlink()
+        try? dropboxManager.unlink()
+        endDestination = .onboarding
+      }
+    } else {
+      endDestination = .chats
+    }
 
     defer {
       hudManager.hide()
-      if shouldPushChats {
+      if endDestination == .chats {
         if isBiometricsOn, permissions.biometrics.status() {
           permissions.biometrics.request { [weak self] granted in
             guard let self else { return }
             if granted {
-              self.stateSubject.value.shouldPushChats = true
+              self.stateSubject.value.shouldPushEndDestination = .chats
             } else {
-              // DO WHAT?
+              // TODO: A fallback state for failing biometrics
             }
           }
         } else {
-          stateSubject.value.shouldPushChats = true
+          stateSubject.value.shouldPushEndDestination = .chats
         }
       } else {
-        stateSubject.value.shouldPushOnboarding = shouldPushOnboarding
+        stateSubject.value.shouldPushEndDestination = .onboarding
       }
     }
 
-    if messenger.isLoggedIn() == false {
-      if try messenger.isRegistered() {
-        try messenger.logIn()
-        shouldPushChats = true
-      } else {
-        try? sftpManager.unlink()
-        try? dropboxManager.unlink()
-        shouldPushOnboarding = true
-      }
-    } else {
-      shouldPushChats = true
-    }
     if !messenger.isBackupRunning() {
       try? messenger.resumeBackup()
     }
-- 
GitLab