From 9296b8e758f28623b713fe8f58523535e29c263a Mon Sep 17 00:00:00 2001
From: Taras <tarassmakula@gmail.com>
Date: Wed, 11 May 2022 13:38:48 +0300
Subject: [PATCH] Fix login error handle

---
 .../java/com/futo/circles/feature/log_in/LogInViewModel.kt | 7 +++++--
 .../circles/feature/log_in/data_source/LoginDataSource.kt  | 4 +++-
 .../com/futo/circles/provider/MatrixSessionProvider.kt     | 5 ++++-
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/app/src/main/java/com/futo/circles/feature/log_in/LogInViewModel.kt b/app/src/main/java/com/futo/circles/feature/log_in/LogInViewModel.kt
index a2a5ecc6d..8d4773fb2 100644
--- a/app/src/main/java/com/futo/circles/feature/log_in/LogInViewModel.kt
+++ b/app/src/main/java/com/futo/circles/feature/log_in/LogInViewModel.kt
@@ -19,8 +19,11 @@ class LogInViewModel(
 
     fun logIn(name: String, password: String) {
         launchBg {
-            loginResultLiveData.postValue(loginDataSource.logIn(name, password))
-            restoreKeysLiveData.postValue(loginDataSource.restoreKeys(password))
+            val loginResult = loginDataSource.logIn(name, password)
+            loginResultLiveData.postValue(loginResult)
+            (loginResult as? Response.Success)?.let {
+                restoreKeysLiveData.postValue(loginDataSource.restoreKeys(password))
+            }
         }
     }
 
diff --git a/app/src/main/java/com/futo/circles/feature/log_in/data_source/LoginDataSource.kt b/app/src/main/java/com/futo/circles/feature/log_in/data_source/LoginDataSource.kt
index 86c129c86..df2ba6dd9 100644
--- a/app/src/main/java/com/futo/circles/feature/log_in/data_source/LoginDataSource.kt
+++ b/app/src/main/java/com/futo/circles/feature/log_in/data_source/LoginDataSource.kt
@@ -5,10 +5,12 @@ import android.net.Uri
 import com.futo.circles.BuildConfig
 import com.futo.circles.R
 import com.futo.circles.core.matrix.pass_phrase.restore.RestorePassPhraseDataSource
+import com.futo.circles.extensions.Response
 import com.futo.circles.extensions.createResult
 import com.futo.circles.provider.MatrixInstanceProvider
 import com.futo.circles.provider.MatrixSessionProvider
 import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig
+import org.matrix.android.sdk.api.session.Session
 
 class LoginDataSource(
     private val context: Context,
@@ -28,7 +30,7 @@ class LoginDataSource(
 
     val passPhraseLoadingLiveData = restorePassPhraseDataSource.loadingLiveData
 
-    suspend fun logIn(name: String, password: String) = createResult {
+    suspend fun logIn(name: String, password: String): Response<Session> = createResult {
         val session = authService.directAuthentication(
             homeServerConnectionConfig = homeServerConnectionConfig,
             matrixId = name,
diff --git a/app/src/main/java/com/futo/circles/provider/MatrixSessionProvider.kt b/app/src/main/java/com/futo/circles/provider/MatrixSessionProvider.kt
index 4ecdb7706..e21995b41 100644
--- a/app/src/main/java/com/futo/circles/provider/MatrixSessionProvider.kt
+++ b/app/src/main/java/com/futo/circles/provider/MatrixSessionProvider.kt
@@ -18,8 +18,11 @@ object MatrixSessionProvider {
             )
         ).also { MatrixInstanceProvider.saveMatrixInstance(it) }
 
-        val lastSession =
+        val lastSession = try {
             MatrixInstanceProvider.matrix.authenticationService().getLastAuthenticatedSession()
+        } catch (e: Exception) {
+            null
+        }
 
         lastSession?.let { startSession(it) }
     }
-- 
GitLab