package com.example.basecore.base import androidx.lifecycle.ViewModel import com.example.basecore.net.CODE_EXPIRED import com.example.basecore.net.ex.ExceptionHandle import com.example.basecore.net.http.BaseListResponse import com.example.basecore.net.http.BaseResponseBean import com.example.basecore.net.http.OssBaseResponse import com.example.basecore.net.http.Result import com.example.basecore.util.LogUtils import kotlinx.coroutines.coroutineScope import java.lang.Exception /** * @Description A ViewModel is alive longer than Activity or Fragment, * it should not reference a View, or any class that might hold a context reference to an Activity. * */ open class BaseViewModel : ViewModel() { suspend fun safeCall( call: suspend () -> Result ): Result { return try { call() } catch (e: Exception) { val ex = ExceptionHandle.handleException(e) Result.Error(ex) } } suspend fun execute(response: BaseResponseBean): Result { LogUtils.d("Thread = ${Thread.currentThread()}") return coroutineScope { when { response.isOk -> { Result.Success(response.data) } response.isExpired -> { Result.Expired( CODE_EXPIRED ) } else -> { Result.Error( ExceptionHandle.ResponseThrowable( Exception(response.errorMsg), 601 ) ) } } } } suspend fun callList(response: BaseListResponse): Result> { return coroutineScope { when { response.isOk -> { Result.Success(response.data) } response.isExpired -> { Result.Expired( CODE_EXPIRED ) } else -> { Result.Error( ExceptionHandle.ResponseThrowable( Exception(response.errorMsg), 601 ) ) } } } } suspend fun callNoResult(response: BaseResponseBean): Result { return coroutineScope { when { response.isOk -> { Result.SuccessNone(response.status) } response.isExpired -> { Result.Expired( CODE_EXPIRED ) } else -> { Result.Error( ExceptionHandle.ResponseThrowable( Exception(response.errorMsg), 601 ) ) } } } } suspend fun callOSSToken(response: OssBaseResponse): Result { return coroutineScope { when { response.isOk -> { Result.Success(response) } else -> { Result.Error( ExceptionHandle.ResponseThrowable( Exception("未知错误"), 601 ) ) } } } } }