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.kt57
1 files changed, 57 insertions, 0 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
new file mode 100644
index 0000000..9df78aa
--- /dev/null
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt
@@ -0,0 +1,57 @@
+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.launch
+import mx.trackermap.TrackerMap.client.apis.SessionApi
+
+class LoginViewModel(
+ private val sessionApi: SessionApi,
+ savedStateHandle: SavedStateHandle
+) : ViewModel() {
+
+ sealed class LoginResult {
+ object Loading: LoginResult()
+ object EmailMissing : LoginResult()
+ object PasswordMissing : LoginResult()
+ object Failure : LoginResult()
+ object Success : LoginResult()
+ }
+
+ val email: MutableLiveData<String> = savedStateHandle.getLiveData("user", "")
+ val password: MutableLiveData<String> = savedStateHandle.getLiveData("password", "")
+
+ private val loginResultEmitter = EventEmitter<LoginResult>()
+ val loginResult: EventSource<LoginResult> = loginResultEmitter
+
+ fun login() {
+ val email = email.value!!.toString().trim()
+ val password = password.value!!.toString().trim()
+
+ if (email.isEmpty()) {
+ loginResultEmitter.emit(LoginResult.EmailMissing)
+ return
+ }
+
+ if (password.isEmpty()) {
+ loginResultEmitter.emit(LoginResult.PasswordMissing)
+ return
+ }
+
+ loginResultEmitter.emit(LoginResult.Loading)
+ viewModelScope.launch {
+ try {
+ val user = sessionApi.sessionPost(email, password)
+ Log.d("LoginViewModel", user.toString())
+ loginResultEmitter.emit(LoginResult.Success)
+ } catch (e: Exception) {
+ loginResultEmitter.emit(LoginResult.Failure)
+ }
+ }
+ }
+} \ No newline at end of file