aboutsummaryrefslogtreecommitdiff
path: root/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt
diff options
context:
space:
mode:
Diffstat (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt')
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt70
1 files changed, 27 insertions, 43 deletions
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt
index 8f53b7e..2590504 100644
--- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt
@@ -1,70 +1,54 @@
package mx.trackermap.TrackerMap.android.session
-import android.util.Log
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.zhuinden.eventemitter.EventEmitter
import com.zhuinden.eventemitter.EventSource
+import kotlinx.coroutines.DelicateCoroutinesApi
+import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
-import mx.trackermap.TrackerMap.client.apis.SessionApi
+import mx.trackermap.TrackerMap.client.models.SessionBody
+import mx.trackermap.TrackerMap.controllers.SessionController
+import org.koin.core.component.KoinComponent
+import org.koin.core.component.inject
+@DelicateCoroutinesApi
class LoginViewModel(
- private val sessionApi: SessionApi,
savedStateHandle: SavedStateHandle
-) : ViewModel() {
+) : ViewModel(), KoinComponent {
- sealed class LoginState {
- object Loading: LoginState()
- object EmailMissing : LoginState()
- object PasswordMissing : LoginState()
- object Failure : LoginState()
- object Success : LoginState()
- }
+ private val sessionController: SessionController by inject()
val email: MutableLiveData<String> = savedStateHandle.getLiveData("user", "")
val password: MutableLiveData<String> = savedStateHandle.getLiveData("password", "")
- private val loginStateEmitter = EventEmitter<LoginState>()
- val loginState: EventSource<LoginState> = loginStateEmitter
+ private val loginStateEmitter = EventEmitter<SessionController.LoginState>()
+ val loginState: EventSource<SessionController.LoginState> = loginStateEmitter
- fun restoreSession() {
- loginStateEmitter.emit(LoginState.Loading);
+ init {
viewModelScope.launch {
- try {
- val user = sessionApi.sessionGet()
- Log.d("LoginViewModel", user.toString())
- loginStateEmitter.emit(LoginState.Success)
- } catch (e: Exception) {
- Log.d("LoginViewModel", "No session")
- }
+ setupLoginStateObserver()
}
}
- fun login() {
- val email = email.value!!.toString().trim()
- val password = password.value!!.toString().trim()
-
- if (email.isEmpty()) {
- loginStateEmitter.emit(LoginState.EmailMissing)
- return
+ private suspend fun setupLoginStateObserver() {
+ sessionController.loginStateFlow.collect {
+ it?.let {
+ loginStateEmitter.emit(it)
+ }
}
+ }
- if (password.isEmpty()) {
- loginStateEmitter.emit(LoginState.PasswordMissing)
- return
- }
+ fun restoreSession() {
+ sessionController.restoreSession()
+ }
- loginStateEmitter.emit(LoginState.Loading)
- viewModelScope.launch {
- try {
- val user = sessionApi.sessionPost(email, password)
- Log.d("LoginViewModel", user.toString())
- loginStateEmitter.emit(LoginState.Success)
- } catch (e: Exception) {
- loginStateEmitter.emit(LoginState.Failure)
- }
- }
+ fun login() {
+ sessionController.login(SessionBody(
+ email = email.value!!,
+ password = password.value!!
+ ))
}
} \ No newline at end of file