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 a2a5ecc6d42ec95f7431064e40c0574afee7eb2e..8d4773fb2da572c71fe2f749edd50c14f8f00699 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 86c129c86a9ac9c6d7f53780ff6b256dd7f7f5a5..df2ba6dd967552f0df3d05a5cb18f8bf53c95006 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 4ecdb7706a79e2bc5058e6d309c49dc14e71a9d6..e21995b4147b7db2ed9c854aefc55efbbd64d5e7 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) } }