package com.wenming.weiswift.mvp.model.imp; import android.content.Context; import android.text.TextUtils; import com.google.gson.Gson; import com.sina.weibo.sdk.exception.WeiboException; import com.sina.weibo.sdk.net.RequestListener; import com.wenming.weiswift.api.CommentsAPI; import com.wenming.weiswift.entity.Comment; import com.wenming.weiswift.entity.list.CommentList; import com.wenming.weiswift.mvp.model.CommentModel; import com.wenming.weiswift.ui.common.NewFeature; import com.wenming.weiswift.ui.common.login.AccessTokenKeeper; import com.wenming.weiswift.ui.common.login.Constants; import com.wenming.weiswift.utils.SDCardUtil; import com.wenming.weiswift.utils.ToastUtil; import java.util.ArrayList; /** * Created by wenmingvs on 16/5/15. */ public class CommentModelImp implements CommentModel { private ArrayList<Comment> mCommentList = new ArrayList<>(); private boolean mRefrshCommentList = true; //统一接口 private Context mContext; private OnDataFinishedListener mOnDataFinishedListener; /** * 用于标识当前分组 */ private int mCurrentGroup = Constants.GROUP_COMMENT_TYPE_ALL; @Override public void toMe(int groupType, Context context, OnDataFinishedListener onDataFinishedListener) { CommentsAPI commentsAPI = new CommentsAPI(context, Constants.APP_KEY, AccessTokenKeeper.readAccessToken(context)); mContext = context; mOnDataFinishedListener = onDataFinishedListener; long sinceId = 0; if (groupType == CommentsAPI.AUTHOR_FILTER_ALL) { sinceId = checkout(Constants.GROUP_COMMENT_TYPE_ALL); } else { sinceId = checkout(Constants.GROUP_COMMENT_TYPE_FRIENDS); } commentsAPI.toME(sinceId, 0, NewFeature.GET_COMMENT_ITEM, 1, groupType, 0, pullToRefreshListener); } @Override public void byMe(Context context, OnDataFinishedListener onDataFinishedListener) { CommentsAPI commentsAPI = new CommentsAPI(context, Constants.APP_KEY, AccessTokenKeeper.readAccessToken(context)); mContext = context; mOnDataFinishedListener = onDataFinishedListener; long sinceId = checkout(Constants.GROUP_COMMENT_TYPE_BYME); commentsAPI.byME(sinceId, 0, NewFeature.GET_COMMENT_ITEM, 1, 0, pullToRefreshListener); } @Override public void toMeNextPage(int groupType, Context context, OnDataFinishedListener onDataFinishedListener) { CommentsAPI commentsAPI = new CommentsAPI(context, Constants.APP_KEY, AccessTokenKeeper.readAccessToken(context)); mContext = context; String maxId = mCommentList.get(mCommentList.size() - 1).id; mOnDataFinishedListener = onDataFinishedListener; commentsAPI.toME(0, Long.valueOf(maxId), NewFeature.LOADMORE_COMMENT_ITEM, 1, groupType, 0, nextPageListener); } @Override public void byMeNextPage(Context context, OnDataFinishedListener onDataFinishedListener) { CommentsAPI commentsAPI = new CommentsAPI(context, Constants.APP_KEY, AccessTokenKeeper.readAccessToken(context)); mContext = context; mOnDataFinishedListener = onDataFinishedListener; String maxId = mCommentList.get(mCommentList.size() - 1).id; commentsAPI.byME(0, Long.valueOf(maxId), NewFeature.LOADMORE_MENTION_ITEM, 1, 0, nextPageListener); } @Override public void cacheSave(int groupType, Context context, CommentList commentList) { String response = new Gson().toJson(commentList); if (NewFeature.CACHE_MESSAGE_MENTION) { switch (groupType) { case Constants.GROUP_COMMENT_TYPE_ALL: SDCardUtil.put(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/comment", "所有评论" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt", response); break; case Constants.GROUP_COMMENT_TYPE_FRIENDS: SDCardUtil.put(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/comment", "关注的人" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt", response); break; case Constants.GROUP_COMMENT_TYPE_BYME: SDCardUtil.put(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/comment", "我发出的" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt", response); break; } } } @Override public void cacheLoad(int groupType, Context context, OnDataFinishedListener onDataFinishedListener) { String response = null; mCurrentGroup = groupType; switch (groupType) { case Constants.GROUP_COMMENT_TYPE_ALL: response = SDCardUtil.get(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/comment", "所有评论" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt"); break; case Constants.GROUP_COMMENT_TYPE_FRIENDS: response = SDCardUtil.get(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/comment", "关注的人" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt"); break; case Constants.GROUP_COMMENT_TYPE_BYME: response = SDCardUtil.get(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/comment", "我发出的" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt"); break; } if (response != null) { mCommentList = CommentList.parse(response).comments; onDataFinishedListener.onDataFinish(mCommentList); } } private long checkout(int authorType) { long sinceId = 0; if (mCurrentGroup != authorType) { mRefrshCommentList = true; } //如果是局部刷新,更新一下sinceId的值为第一条微博的id if (mCommentList.size() > 0 && mCurrentGroup == authorType && mRefrshCommentList == false) { sinceId = Long.valueOf(mCommentList.get(0).id); } //如果是全局刷新,把sinceId设置为0,去请求 if (mRefrshCommentList) { sinceId = 0; } mCurrentGroup = authorType; return sinceId; } private RequestListener pullToRefreshListener = new RequestListener() { @Override public void onComplete(String response) { CommentList commentList = CommentList.parse(response); ArrayList<Comment> temp = commentList.comments; if (temp != null && temp.size() > 0) { if (mCommentList != null) { mCommentList.clear(); } cacheSave(mCurrentGroup, mContext, commentList); mCommentList = temp; mOnDataFinishedListener.onDataFinish(mCommentList); } else { //ToastUtil.showShort(mContext, "没有更新的内容了"); mOnDataFinishedListener.noMoreDate(); } mRefrshCommentList = false; } @Override public void onWeiboException(WeiboException e) { ToastUtil.showShort(mContext, e.getMessage()); mOnDataFinishedListener.onError(e.getMessage()); cacheLoad(mCurrentGroup, mContext, mOnDataFinishedListener); } }; public RequestListener nextPageListener = new RequestListener() { @Override public void onComplete(String response) { if (!TextUtils.isEmpty(response)) { ArrayList<Comment> temp = CommentList.parse(response).comments; if (temp.size() == 1) { mOnDataFinishedListener.noMoreDate(); } else if (temp.size() > 1) { temp.remove(0); mCommentList.addAll(temp); mOnDataFinishedListener.onDataFinish(mCommentList); } else { ToastUtil.showShort(mContext, "数据异常"); mOnDataFinishedListener.onError("数据异常"); } } else { ToastUtil.showShort(mContext, "内容已经加载完了"); mOnDataFinishedListener.noMoreDate(); } } @Override public void onWeiboException(WeiboException e) { mOnDataFinishedListener.onError(e.getMessage()); } }; }