package com.casic.smarttube.vm import androidx.lifecycle.MutableLiveData import com.casic.smarttube.base.BaseApplication import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage import com.casic.smarttube.model.UserDetailModel import com.casic.smarttube.retrofit.RetrofitServiceManager import com.casic.smarttube.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.SaveKeyValues class UserViewModel : BaseViewModel() { private val gson = Gson() val userDetailModel = MutableLiveData<UserDetailModel>() fun obtainUserDetail() = launch({ val response = RetrofitServiceManager.obtainUserDetail() val responseCode = response.separateResponseCode() if (responseCode == 200) { val userDetail = gson.fromJson<UserDetailModel>( response, object : TypeToken<UserDetailModel>() {}.type ) userDetailModel.value = userDetail SaveKeyValues.putValue(LocaleConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data)) } else { val errorModel = UserDetailModel() errorModel.code = responseCode userDetailModel.value = errorModel //如果此次获取不到用户信息,那么就清空之前的用户缓存,然后让用户重新登录 SaveKeyValues.removeKey(LocaleConstant.USER_DETAIL_MODEL) } }, { it.printStackTrace() }) fun changePassword(oldPwd: String, newPwd: String) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.changePassword(oldPwd, newPwd) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success } else { loadState.value = LoadState.Fail response.toErrorMessage().show(BaseApplication.obtainInstance()) } }, { loadState.value = LoadState.Fail it.printStackTrace() }) }