diff options
Diffstat (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt')
-rw-r--r-- | androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt | 62 |
1 files changed, 47 insertions, 15 deletions
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt index b2379fc..607f4e5 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt @@ -1,44 +1,76 @@ package mx.trackermap.TrackerMap.android.session import android.util.Log +import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData 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.User +import mx.trackermap.TrackerMap.controllers.SessionController +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject -class UserInformationViewModel(private val sessionApi: SessionApi) : ViewModel() { +@DelicateCoroutinesApi +class UserInformationViewModel : ViewModel(), KoinComponent { - sealed class InformationState { - object Loading: InformationState() - object Failure: InformationState() - class Success(val user: User) : InformationState() - object Signout: InformationState() + private val sessionController: SessionController by inject() + + init { + Log.d("UserInformationVM", "Initializing User Information View Model") } - var userInformation = MutableLiveData<InformationState>(InformationState.Loading) + private val _user = MutableLiveData<User>() + val user: LiveData<User> get() = _user + + private val loginStateEmitter = EventEmitter<SessionController.LoginState>() + val loginState: EventSource<SessionController.LoginState> = loginStateEmitter init { - Log.d("UserInformationVM", "Initializing User Information View Model") + viewModelScope.launch { + setupLoginStateObserver() + } + viewModelScope.launch { + setupUserObserver() + } + } + + private suspend fun setupLoginStateObserver() { + sessionController.loginStateFlow.collect { + it?.let { + loginStateEmitter.emit(it) + } + } + } + + private suspend fun setupUserObserver() { + sessionController.userFlow.collect { + it?.let { + _user.postValue(it) + } + } } fun fetchUserInfo() { viewModelScope.launch { - userInformation.postValue(InformationState.Loading) + loginStateEmitter.emit(SessionController.LoginState.Loading) try { - userInformation.postValue(InformationState.Success(sessionApi.sessionGet())) + sessionController.getSession() + loginStateEmitter.emit(SessionController.LoginState.Success) } catch (e: Exception) { - userInformation.postValue(InformationState.Failure) + loginStateEmitter.emit(SessionController.LoginState.Failure) } } } - fun signout() { + fun signOut() { viewModelScope.launch { - userInformation.postValue(InformationState.Loading) - sessionApi.sessionDelete() - userInformation.postValue(InformationState.Signout) + sessionController.logout() } } }
\ No newline at end of file |