diff options
author | Iván Ávalos <avalos@disroot.org> | 2022-01-14 23:01:39 -0600 |
---|---|---|
committer | Iván Ávalos <avalos@disroot.org> | 2022-01-14 23:01:39 -0600 |
commit | e1360bc0fad1838a8c431d5142ce13cc81c10480 (patch) | |
tree | 8fe678322d0370ce4f138ad748f86c4748fcc5e8 /androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationViewModel.kt | |
parent | a22a13de9b4d1e46bb64371242fa3528bfac7675 (diff) | |
download | etbsa-trackermap-mobile-e1360bc0fad1838a8c431d5142ce13cc81c10480.tar.gz etbsa-trackermap-mobile-e1360bc0fad1838a8c431d5142ce13cc81c10480.tar.bz2 etbsa-trackermap-mobile-e1360bc0fad1838a8c431d5142ce13cc81c10480.zip |
Refactored even more session management code into SessionController
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 |