Newer
Older
CasicSmartTube / app / src / main / java / com / casic / smarttube / vm / UserViewModel.kt
package com.casic.smarttube.vm

import android.content.Context
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()

    fun getUserDetail() = launch({
        loadState.value = LoadState.Loading
        val response = RetrofitServiceManager.getUserDetail()
        val responseCode = response.separateResponseCode()
        if (responseCode == 200) {
            val userDetail = gson.fromJson<UserDetailModel>(
                response, object : TypeToken<UserDetailModel>() {}.type
            )
            SaveKeyValues.putValue(LocaleConstant.USER_DETAIL_KEY, gson.toJson(userDetail.data))
            loadState.value = LoadState.Success
        } else {
            loadState.value = LoadState.Fail
        }
    }, {
        loadState.value = LoadState.Fail
        it.printStackTrace()
    })

    fun changePassword(context: Context, 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(context)
        }
    }, {
        loadState.value = LoadState.Fail
        it.printStackTrace()
    })
}