-
-
Notifications
You must be signed in to change notification settings - Fork 705
/
Copy pathUserInformationDialogViewModel.kt
40 lines (35 loc) · 1.55 KB
/
UserInformationDialogViewModel.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package org.wikipedia.usercontrib
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import org.wikipedia.WikipediaApp
import org.wikipedia.dataclient.ServiceFactory
import org.wikipedia.dataclient.WikiSite
import org.wikipedia.util.Resource
import java.time.LocalDate
class UserInformationDialogViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
var userName = savedStateHandle.get<String>(UserInformationDialog.USERNAME_ARG)!!
private val _uiState = MutableStateFlow(Resource<Pair<String, LocalDate>>())
val uiState = _uiState.asStateFlow()
init {
fetchUserInformation()
}
private fun fetchUserInformation() {
viewModelScope.launch(CoroutineExceptionHandler { _, throwable ->
_uiState.value = Resource.Error(throwable)
}) {
_uiState.value = Resource.Loading()
val userInfo = ServiceFactory.get(WikiSite.forLanguageCode(WikipediaApp.instance.appOrSystemLanguageCode)).globalUserInfo(userName)
userInfo.query?.globalUserInfo?.let {
val editCount = String.format("%,d", it.editCount)
_uiState.value = Resource.Success(editCount to it.registrationDate)
} ?: run {
_uiState.value = Resource.Error(Throwable("Cannot fetch user information."))
}
}
}
}