BaseViewModel增加loadingLiveData
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package com.yizhuan.erban.base
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.yizhuan.xchat_android_core.utils.toast
|
||||
@@ -8,18 +10,24 @@ import kotlinx.coroutines.launch
|
||||
|
||||
open class BaseViewModel : ViewModel() {
|
||||
|
||||
private val _loadingLiveData by lazy { MutableLiveData<Boolean>() }
|
||||
val loadingLiveData: LiveData<Boolean> = _loadingLiveData
|
||||
|
||||
fun safeLaunch(
|
||||
needLoading: Boolean = false,
|
||||
onError: (e: Throwable) -> Unit = { it.message.toast() },
|
||||
onComplete: (() -> Unit)? = null,
|
||||
block: suspend CoroutineScope.() -> Unit
|
||||
) {
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
if (needLoading) _loadingLiveData.value = true
|
||||
block()
|
||||
} catch (e: Throwable) {
|
||||
e.printStackTrace()
|
||||
onError(e)
|
||||
} finally {
|
||||
if (needLoading) _loadingLiveData.value = false
|
||||
onComplete?.invoke()
|
||||
}
|
||||
|
||||
|
@@ -12,9 +12,6 @@ import org.greenrobot.eventbus.EventBus
|
||||
|
||||
class CpViewModel : BaseViewModel() {
|
||||
|
||||
private val _loadingLiveData = MutableLiveData<Boolean>()
|
||||
val loadingLiveData: LiveData<Boolean> = _loadingLiveData
|
||||
|
||||
//发起邀请组队CP弹窗数据
|
||||
private val _cpInvitePageData: MutableLiveData<CpInvitePageEntity> = MutableLiveData()
|
||||
val cpInvitePageData: LiveData<CpInvitePageEntity> = _cpInvitePageData
|
||||
@@ -41,69 +38,61 @@ class CpViewModel : BaseViewModel() {
|
||||
|
||||
//记录详情
|
||||
private val _cpInviteDetailData: MutableLiveData<CpInviteDetailEntity> = MutableLiveData()
|
||||
val cpInviteDetailData: LiveData<CpInviteDetailEntity> = _cpInviteDetailData
|
||||
val cpInviteDetailData: LiveData<CpInviteDetailEntity> = _cpInviteDetailData
|
||||
|
||||
fun getCpInvitePageData(acceptUid: Long) {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
onError = dealCpDataError,
|
||||
true,
|
||||
block = {
|
||||
CpModel.getCpInvitePageData(acceptUid)?.let {
|
||||
_cpInvitePageData.value = it
|
||||
}
|
||||
_loadingLiveData.value = false
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getCpMpApplyListData(pageNumber: Int, pageSize: Int) {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
onError = dealCpDataError,
|
||||
true,
|
||||
block = {
|
||||
CpModel.cpMpApplyList(pageNumber, pageSize)?.let {
|
||||
_cpMpApplyListData.value = it
|
||||
}
|
||||
_loadingLiveData.value = false
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getUserCpLevelMpData() {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
onError = dealCpDataError,
|
||||
true,
|
||||
block = {
|
||||
CpModel.userCpLevelMp()?.let {
|
||||
_userCpLevelMpData.value = it
|
||||
}
|
||||
_loadingLiveData.value = false
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getUserCpListData(type: Int) {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
onError = dealCpDataError,
|
||||
true,
|
||||
block = {
|
||||
CpModel.userCpList(type)?.let {
|
||||
_userCpListData.value = it
|
||||
}
|
||||
_loadingLiveData.value = false
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getCpRelation(uid: Long) {
|
||||
_loadingLiveData.value = true
|
||||
|
||||
safeLaunch(
|
||||
onError = dealCpDataError,
|
||||
true,
|
||||
block = {
|
||||
CpModel.userCpRelation(uid)?.let {
|
||||
_cpRelation.value = it
|
||||
}
|
||||
_loadingLiveData.value = false
|
||||
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -114,20 +103,19 @@ class CpViewModel : BaseViewModel() {
|
||||
propsId: Int,
|
||||
onBalanceNotEnough: (() -> Unit)? = null
|
||||
) {
|
||||
_loadingLiveData.value = true
|
||||
|
||||
safeLaunch(
|
||||
true,
|
||||
onError = {
|
||||
if (it is ServerException && it.code == BalanceNotEnoughExeption.code) {
|
||||
//余额不足
|
||||
onBalanceNotEnough?.invoke()
|
||||
_loadingLiveData.value = false
|
||||
} else {
|
||||
dealCpDataError.invoke(it)
|
||||
it.message.toast()
|
||||
}
|
||||
},
|
||||
block = {
|
||||
CpModel.makeCpInvite(acceptUid, declaration, propsId)
|
||||
_loadingLiveData.value = false
|
||||
"邀请已发送".toast()
|
||||
EventBus.getDefault().post(CpBindUnbindEvent())
|
||||
}
|
||||
@@ -136,65 +124,51 @@ class CpViewModel : BaseViewModel() {
|
||||
|
||||
|
||||
fun revertUnbindCp() {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
onError = dealCpDataError,
|
||||
true,
|
||||
block = {
|
||||
CpModel.revertUnboundCp()
|
||||
_loadingLiveData.value = false
|
||||
EventBus.getDefault().post(CpBindUnbindEvent())
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun replyInvite(id: Int, state: Int) {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
onError = dealCpDataError,
|
||||
true,
|
||||
block = {
|
||||
CpModel.replyCpInvite(id, state)
|
||||
_loadingLiveData.value = false
|
||||
EventBus.getDefault().post(CpBindUnbindEvent())
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun unBindCp() {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
onError = dealCpDataError,
|
||||
true,
|
||||
block = {
|
||||
CpModel.unboundCp()
|
||||
_loadingLiveData.value = false
|
||||
EventBus.getDefault().post(CpBindUnbindEvent())
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun cpTaskProcess(uid: Long) {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
onError = dealCpDataError,
|
||||
true,
|
||||
block = {
|
||||
_cpTaskData.value = CpModel.cpTaskProcess(uid)
|
||||
_loadingLiveData.value = false
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getCpInviteDetail(cpId:Int){
|
||||
_loadingLiveData.value = true
|
||||
fun getCpInviteDetail(cpId: Int) {
|
||||
safeLaunch(
|
||||
onError = dealCpDataError,
|
||||
true,
|
||||
block = {
|
||||
_cpInviteDetailData.value = CpModel.cpInviteDetail(cpId)
|
||||
_loadingLiveData.value = false
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
private val dealCpDataError: (e: Throwable) -> Unit = {
|
||||
_loadingLiveData.value = false
|
||||
it.message.toast()
|
||||
}
|
||||
}
|
@@ -30,9 +30,6 @@ class VipViewModel : BaseViewModel() {
|
||||
private val _pageLiveData = MutableLiveData<Int>()
|
||||
val pageLiveData: LiveData<Int> = _pageLiveData
|
||||
|
||||
private val _loadingLiveData = MutableLiveData<Boolean>()
|
||||
val loadingLiveData: LiveData<Boolean> = _loadingLiveData
|
||||
|
||||
private val _saveOriginDisguiseResult = MutableLiveData<Boolean>()
|
||||
val saveOriginDisguiseResult = _saveOriginDisguiseResult
|
||||
|
||||
@@ -46,15 +43,10 @@ class VipViewModel : BaseViewModel() {
|
||||
val enterHideLiveData: LiveData<Boolean> = _enterHideLiveData
|
||||
|
||||
fun getVipPageInfo() {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
onError = {
|
||||
it.message.toast()
|
||||
_loadingLiveData.value = false
|
||||
},
|
||||
true,
|
||||
block = {
|
||||
val vipPageInfo = VipModel.getVipPageInfo()
|
||||
_loadingLiveData.value = false
|
||||
vipPageInfo?.let {
|
||||
_authInfosLiveData.value = it.vipAuthInfos
|
||||
_vipInfosLiveData.value = it.vipInfos
|
||||
@@ -88,64 +80,56 @@ class VipViewModel : BaseViewModel() {
|
||||
}
|
||||
|
||||
fun saveOriginDisguise() {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
true,
|
||||
onError = {
|
||||
it.message.toast()
|
||||
_saveOriginDisguiseResult.value = false
|
||||
_loadingLiveData.value = false
|
||||
},
|
||||
block = {
|
||||
VipModel.saveOriginDisguise()
|
||||
_saveOriginDisguiseResult.value = true
|
||||
//换回装扮刷新缓存数据
|
||||
UserModel.get().onlyUpdateLoginUserInfoCache()
|
||||
_loadingLiveData.value = false
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getVipBroadcastInfo() {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
true,
|
||||
onError = {
|
||||
_loadingLiveData.value = false
|
||||
_vipBroadcastInfoLiveData.value = BeanResult.failed(it)
|
||||
},
|
||||
block = {
|
||||
_loadingLiveData.value = false
|
||||
_vipBroadcastInfoLiveData.value = BeanResult.success(VipModel.getVipBroadcastInfo())
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun sendVipBroadcast(content: String) {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
true,
|
||||
onError = {
|
||||
it.message.toast()
|
||||
_loadingLiveData.value = false
|
||||
_sendBroadcastLiveData.value = false
|
||||
},
|
||||
block = {
|
||||
VipModel.sendVipBroadcast(content)
|
||||
_loadingLiveData.value = false
|
||||
_sendBroadcastLiveData.value = true
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun changeInvisibleInRoom(open: Boolean) {
|
||||
_loadingLiveData.value = true
|
||||
safeLaunch(
|
||||
true,
|
||||
onError = {
|
||||
it.message.toast()
|
||||
_loadingLiveData.value = false
|
||||
_enterHideLiveData.value = !open
|
||||
},
|
||||
block = {
|
||||
VipModel.changeInvisibleInRoom(open)
|
||||
_loadingLiveData.value = false
|
||||
_enterHideLiveData.value = open
|
||||
UserModel.get().cacheLoginUserInfo?.userVipInfoVO?.enterHide = open
|
||||
"设置成功".toast()
|
||||
|
Reference in New Issue
Block a user