package com.mathiasluo.designer.presenter; import android.graphics.Bitmap; import android.widget.ImageView; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.SimpleTarget; import com.mathiasluo.designer.app.APP; import com.mathiasluo.designer.bean.Shot; import com.mathiasluo.designer.bean.User; import com.mathiasluo.designer.model.IModel.ShotModel; import com.mathiasluo.designer.model.IModel.UserModel; import com.mathiasluo.designer.model.ImageModelImpl; import com.mathiasluo.designer.model.ShotModelImpl; import com.mathiasluo.designer.model.UserModelImpl; import com.mathiasluo.designer.utils.LogUtils; import com.mathiasluo.designer.utils.SPUtil; import com.mathiasluo.designer.utils.ToastUtil; import com.mathiasluo.designer.utils.UserUtil; import com.mathiasluo.designer.view.fragment.ShotsFragment; import com.mathiasluo.designer.view.widget.CircleImageView; import java.util.List; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action0; import rx.functions.Action1; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * Created by MathiasLuo on 2016/3/3. */ public class ShotsPresenter extends BasePresenter<ShotsFragment> { private ShotModel shotModel; private UserModel userModel; private static User mCurrentUser = null; public static int page = 2; int per_page = 10; Shot mShot; boolean realm_is_null = false; public void loadDataFromReaml() { userModel = UserModelImpl.getInstance(); shotModel = ShotModelImpl.getInstance(); loadShotsFromRealm(); requestNewDate(); } public void loadShotsFromServer(int page, int per_page, boolean isShow) { shotModel.getShotsFromServer(page, per_page) .subscribeOn(Schedulers.newThread()) .doOnSubscribe(new Action0() { @Override public void call() { getView().getHandler().post(new Runnable() { @Override public void run() { if (isShow) showProgress(); } }); } }) .subscribeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<List<Shot>>() { @Override public void call(List<Shot> shots) { closeProgress(); /* LogUtils.d("这里一共有" + shots.size() + "个数据\n" + "这里的page是:" + page + "\n这里的realm_is_null" + realm_is_null + "\n这里的isShow" + isShow + "\nmShot---->>>" + mShot.getId().toString() + "\nshot----->>>>>" + shots.get(0).getId().toString());*/ if (mShot != null && (mShot.getId().equals(shots.get(0).getId()) && isShow)) { ToastUtil.Toast("已经是最新的数据了"); } else if (mShot != null && (!(mShot.getId().equals(shots.get(0).getId())) && isShow)) { shotModel.clearShotsToRealm(); shotModel.saveShotsToRealm(shots); getView().showShots(shots, page); mShot = shots.get(0); LogUtils.d("首页有更新重新保存数据"); } else if (realm_is_null) { shotModel.saveShotsToRealm(shots); getView().showShots(shots, page); realm_is_null = false; mShot = shots.get(0); LogUtils.d("第一次成功请求后保存数据"); } else { LogUtils.e("按道理来说不可能到这里来呀------_--"); getView().showShots(shots, page); } } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { closeProgress(); ToastUtil.Toast("网络刷新出现了错误"); LogUtils.e("从server中加载数据出错----->>>>" + throwable.toString()); } }); } public void loadShotsFromRealm() { shotModel.loadShots() .subscribe(new Action1<List<Shot>>() { @Override public void call(List<Shot> shots) { LogUtils.d("load form realm shosts.size()------>>>>>" + shots.size()); if (shots.size() == 0) realm_is_null = true; else mShot = shots.get(0); getView().showShots(shots, 1); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { LogUtils.e("从Realm中加载数据出错----->>>>" + throwable.toString()); } }); } @Override public void OnViewResume() { super.OnViewResume(); } @Override public void onViewDestroy() { super.onViewDestroy(); shotModel.closeSomeThing(); } public void updataUserInfo() { userModel.getUseWithAccessToken(SPUtil.getAccessToken(APP.getInstance())) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .map(new Func1<User, User>() { @Override public User call(User user) { if (!UserUtil.enqual(user, mCurrentUser)) { user.setAccessToken(mCurrentUser.getAccessToken()); LogUtils.d("更新USER数据成功"); userModel.saveUserToReaml(user); return user; } return null; } }) .subscribe(new Action1<User>() { @Override public void call(User user) { if (user != null) { mCurrentUser = user; getView().uploadUserInfo(mCurrentUser); } return; } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { LogUtils.e("为什么从网络上更新用户消息失败呀------>>>>" + throwable.toString()); } }); } public void requestDate() { LogUtils.e("上拉加载数据中..."); loadShotsFromServer(page, per_page, false); page++; } public void requestNewDate() { loadShotsFromServer(ShotModelImpl.PAGE, ShotModelImpl.PER_PAGE, true); } public void showUserInfo() { userModel.getCurrentUser() .observeOn(AndroidSchedulers.mainThread()) .subscribe(user -> { if (user != null) { mCurrentUser = user; getView().uploadUserInfo(mCurrentUser); //从网络更新用户消息 updataUserInfo(); } else ToastUtil.Toast("你还没登录哟\n登陆后会更加精彩哟"); } , throwable -> { LogUtils.e("为什么又在这里出现问题了" + throwable.toString()); ToastUtil.Toast("出现了不可预计的错误..."); }); } public void loadImageWithurl(String url, CircleImageView imageView) { ImageModelImpl.getInstance().loadImageWithTargetView(url, new SimpleTarget<Bitmap>() { @Override public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { imageView.setImageBitmap(resource); } }); } private void showProgress() { getView().showProgress(); } private void closeProgress() { getView().closeProgress(); } public User getCurrentUser() { return mCurrentUser; } public void loadImageWithurl(String url, ImageView imageView) { ImageModelImpl.getInstance().loadImage(url, imageView); } }