package com.igo.user.network import android.util.Log import cn.sinata.xldutils.activity.BaseActivity import cn.sinata.xldutils.data.ResultData import cn.sinata.xldutils.defaultScheduler import cn.sinata.xldutils.fragment.BaseFragment import cn.sinata.xldutils.rxutils.ResultDataSubscriber import cn.sinata.xldutils.utils.LanguageUtil import cn.sinata.xldutils.utils.SPUtils import com.igo.user.utils.Const import io.reactivex.Flowable /** * Created on 2018/4/12. */ inline fun > Flowable.request( activity: BaseActivity, showToast: Boolean = true, showDialog: Boolean = false, crossinline success: (msg: String?, t: O?) -> Unit, crossinline error: (code: Int, msg: String) -> Unit ) { if (showDialog) { activity.showDialog() } this.defaultScheduler().subscribe(object : ResultDataSubscriber(activity) { override fun onSuccess(msg: String?, data: O?) { activity.dismissDialog() success(msg, data) } override fun isShowToast() = showToast override fun onError(code: Int, msg: String) { activity.dismissDialog() if (code == 600) {//token无效 super.onError( code, when (LanguageUtil.getLanguage()) { Const.Language.CHINESE -> "您的身份已过期,请重新登录" Const.Language.FRENCH -> "Votre identité a expiré, veuillez vous reconnecter" else -> "Your identity has expired, please log in again" } ) SPUtils.instance().remove(Const.User.TOKEN).remove(Const.User.USER_ID) .remove(Const.User.NO_PHONE).remove(Const.User.EMAIL).apply() activity.gotoLogin() } else { super.onError(code, msg) error(code, msg) } } }) } inline fun > Flowable.request( activity: BaseActivity, crossinline showToast: (code: Int, msg: String) -> Boolean, showDialog: Boolean = false, crossinline success: (msg: String?, t: O?) -> Unit, crossinline error: (code: Int, msg: String) -> Unit ) { if (showDialog) { activity.showDialog() } this.defaultScheduler().subscribe(object : ResultDataSubscriber(activity) { override fun onSuccess(msg: String?, data: O?) { activity.dismissDialog() success(msg, data) } override fun onError(code: Int, msg: String) { activity.dismissDialog() if (code == 600) {//token无效 super.onError( code, when (LanguageUtil.getLanguage()) { Const.Language.CHINESE -> "您的身份已过期,请重新登录" Const.Language.FRENCH -> "Votre identité a expiré, veuillez vous reconnecter" else -> "Your identity has expired, please log in again" } ) SPUtils.instance().remove(Const.User.TOKEN).remove(Const.User.USER_ID) .remove(Const.User.NO_PHONE).remove(Const.User.EMAIL).apply() activity.gotoLogin() } else { if (showToast.invoke(code, msg)) { super.onError(code, msg) } error(code, msg) } } }) } inline fun > Flowable.request( activity: BaseActivity, showToast: Boolean = true, crossinline success: (msg: String?, t: O?) -> Unit, crossinline error: (code: Int, msg: String) -> Unit ) { request(activity, showToast, false, success, error) } inline fun > Flowable.request( activity: BaseActivity, showToast: Boolean = true, showDialog: Boolean = false, crossinline success: (msg: String?, t: O?) -> Unit ) { request(activity, showToast, showDialog, success) { code: Int, msg: String -> Log.e("xxxx", "code:${code},msg:${msg}") } } inline fun > Flowable.requestByF( fragment: BaseFragment, showToast: Boolean = true, showDialog: Boolean = false, crossinline success: (msg: String?, t: O?) -> Unit, crossinline error: (code: Int, msg: String) -> Unit ) { if (showDialog) { fragment.showDialog() } this.defaultScheduler().subscribe(object : ResultDataSubscriber(fragment) { override fun onSuccess(msg: String?, data: O?) { fragment.dismissDialog() success(msg, data) } override fun isShowToast() = showToast override fun onError(code: Int, msg: String) { fragment.dismissDialog() if (code == 600) {//token无效 // super.onError(code, "您的身份已过期,请重新登录") SPUtils.instance().remove(Const.User.TOKEN).remove(Const.User.USER_ID) .remove(Const.User.NO_PHONE).remove(Const.User.EMAIL).apply() fragment.gotoLogin() } else { super.onError(code, msg) error(code, msg) } } }) } inline fun > Flowable.requestByF( fragment: BaseFragment, showToast: Boolean = true, crossinline success: (msg: String?, t: O?) -> Unit, crossinline error: (code: Int, msg: String) -> Unit ) { requestByF(fragment, showToast, false, success, error) } inline fun > Flowable.requestByF( fragment: BaseFragment, showToast: Boolean = true, crossinline success: (msg: String?, t: O?) -> Unit ) { requestByF(fragment, showToast, success) { _, _ -> } }