package com.wenming.weiswift.mvp.model.imp;
import android.content.Context;
import android.text.TextUtils;
import com.sina.weibo.sdk.exception.WeiboException;
import com.sina.weibo.sdk.net.RequestListener;
import com.wenming.weiswift.api.CommentsAPI;
import com.wenming.weiswift.api.StatusesAPI;
import com.wenming.weiswift.entity.Comment;
import com.wenming.weiswift.entity.Status;
import com.wenming.weiswift.entity.list.CommentList;
import com.wenming.weiswift.entity.list.StatusList;
import com.wenming.weiswift.mvp.model.MentionModel;
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 MentionModelImp implements MentionModel {
private ArrayList<Status> mMentionList = new ArrayList<>();
private ArrayList<Comment> mCommentList = new ArrayList<>();
private boolean mRefrshAll = true;
private OnMentionFinishedListener mOnMentionFinishedListener;
private OnCommentFinishedListener mOnCommentFinishedListener;
private Context mContext;
private int mCurrentGroup;
@Override
public void mentions(int groupType, Context context, OnMentionFinishedListener onMentionFinishedListener) {
StatusesAPI statusesAPI = new StatusesAPI(context, Constants.APP_KEY, AccessTokenKeeper.readAccessToken(context));
long sinceId = checkout(groupType);
mContext = context;
mOnMentionFinishedListener = onMentionFinishedListener;
switch (groupType) {
case Constants.GROUP_RETWEET_TYPE_ALL:
statusesAPI.mentions(sinceId, 0, NewFeature.GET_MENTION_ITEM, 1, StatusesAPI.AUTHOR_FILTER_ALL, 0, 0, true, pullToRefresh_Mention_Listener);
break;
case Constants.GROUP_RETWEET_TYPE_FRIENDS:
statusesAPI.mentions(sinceId, 0, NewFeature.GET_MENTION_ITEM, 1, StatusesAPI.AUTHOR_FILTER_ATTENTIONS, 0, 0, true, pullToRefresh_Mention_Listener);
break;
case Constants.GROUP_RETWEET_TYPE_ORIGINWEIBO:
statusesAPI.mentions(sinceId, 0, NewFeature.GET_MENTION_ITEM, 1, StatusesAPI.AUTHOR_FILTER_ALL, 0, StatusesAPI.TYPE_FILTER_ORIGAL, true, pullToRefresh_Mention_Listener);
break;
}
}
@Override
public void commentMentions(int groupType, Context context, OnCommentFinishedListener onCommentFinishedListener) {
CommentsAPI commentsAPI = new CommentsAPI(context, Constants.APP_KEY, AccessTokenKeeper.readAccessToken(context));
mContext = context;
mOnCommentFinishedListener = onCommentFinishedListener;
long sinceId = checkout(groupType);
switch (groupType) {
case Constants.GROUP_RETWEET_TYPE_ALLCOMMENT:
commentsAPI.mentions(sinceId, 0, NewFeature.GET_MENTION_ITEM, 1, CommentsAPI.AUTHOR_FILTER_ALL, 0, pullToRefresh_Comment_Listener);
break;
case Constants.GROUP_RETWEET_TYPE_FRIEDNSCOMMENT:
commentsAPI.mentions(sinceId, 0, NewFeature.GET_MENTION_ITEM, 1, CommentsAPI.AUTHOR_FILTER_ATTENTIONS, 0, pullToRefresh_Comment_Listener);
break;
}
}
@Override
public void mentionsNextPage(int groupType, Context context, OnMentionFinishedListener onMentionFinishedListener) {
StatusesAPI statusesAPI = new StatusesAPI(context, Constants.APP_KEY, AccessTokenKeeper.readAccessToken(context));
String maxId = mMentionList.get(mMentionList.size() - 1).id;
mContext = context;
mOnMentionFinishedListener = onMentionFinishedListener;
switch (groupType) {
case Constants.GROUP_RETWEET_TYPE_ALL:
statusesAPI.mentions(0, Long.valueOf(maxId), NewFeature.LOADMORE_MENTION_ITEM, 1, StatusesAPI.AUTHOR_FILTER_ALL, 0, 0, true, nextPage_Mention_Listener);
break;
case Constants.GROUP_RETWEET_TYPE_FRIENDS:
statusesAPI.mentions(0, Long.valueOf(maxId), NewFeature.LOADMORE_MENTION_ITEM, 1, StatusesAPI.AUTHOR_FILTER_ATTENTIONS, 0, 0, true, nextPage_Mention_Listener);
break;
case Constants.GROUP_RETWEET_TYPE_ORIGINWEIBO:
statusesAPI.mentions(0, Long.valueOf(maxId), NewFeature.LOADMORE_MENTION_ITEM, 1, StatusesAPI.AUTHOR_FILTER_ALL, 0, StatusesAPI.TYPE_FILTER_ORIGAL, true, nextPage_Mention_Listener);
break;
}
}
@Override
public void commentMentionsNextPage(int groupType, Context context, OnCommentFinishedListener onCommentFinishedListener) {
CommentsAPI commentsAPI = new CommentsAPI(context, Constants.APP_KEY, AccessTokenKeeper.readAccessToken(context));
mContext = context;
mOnCommentFinishedListener = onCommentFinishedListener;
String maxId = mCommentList.get(mCommentList.size() - 1).id;
switch (groupType) {
case Constants.GROUP_RETWEET_TYPE_ALLCOMMENT:
commentsAPI.mentions(0, Long.valueOf(maxId), NewFeature.LOADMORE_MENTION_ITEM, 1, CommentsAPI.AUTHOR_FILTER_ALL, 0, nextPage_Comment_Listener);
break;
case Constants.GROUP_RETWEET_TYPE_FRIEDNSCOMMENT:
commentsAPI.mentions(0, Long.valueOf(maxId), NewFeature.LOADMORE_MENTION_ITEM, 1, CommentsAPI.AUTHOR_FILTER_ATTENTIONS, 0, nextPage_Comment_Listener);
break;
}
}
@Override
public void cacheSave(int groupType, Context context, String response) {
if (NewFeature.CACHE_MESSAGE_MENTION) {
switch (groupType) {
case Constants.GROUP_RETWEET_TYPE_ALL:
SDCardUtil.put(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/mention", "所有微博" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt", response);
break;
case Constants.GROUP_RETWEET_TYPE_FRIENDS:
SDCardUtil.put(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/mention", "关注人的微博" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt", response);
break;
case Constants.GROUP_RETWEET_TYPE_ORIGINWEIBO:
SDCardUtil.put(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/mention", "原创微博" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt", response);
break;
case Constants.GROUP_RETWEET_TYPE_ALLCOMMENT:
SDCardUtil.put(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/mention", "所有评论" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt", response);
break;
case Constants.GROUP_RETWEET_TYPE_FRIEDNSCOMMENT:
SDCardUtil.put(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/mention", "关注人的评论" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt", response);
break;
}
}
}
@Override
public void cacheLoad(int groupType, Context context, OnMentionFinishedListener onDataFinishedListener) {
if (NewFeature.CACHE_MESSAGE_MENTION) {
String response = null;
switch (groupType) {
case Constants.GROUP_RETWEET_TYPE_ALL:
response = SDCardUtil.get(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/mention", "所有微博" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt");
break;
case Constants.GROUP_RETWEET_TYPE_FRIENDS:
response = SDCardUtil.get(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/mention", "关注人的微博" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt");
break;
case Constants.GROUP_RETWEET_TYPE_ORIGINWEIBO:
response = SDCardUtil.get(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/mention", "原创微博" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt");
break;
}
if (response != null) {
mMentionList = (ArrayList<Status>) StatusList.parse(response).statuses;
onDataFinishedListener.onDataFinish(mMentionList);
} else {
ToastUtil.showShort(mContext, "本地没有此分组的缓存");
onDataFinishedListener.noMoreDate();
}
}
}
@Override
public void cacheLoad(int groupType, Context context, OnCommentFinishedListener onCommentFinishedListener) {
if (NewFeature.CACHE_MESSAGE_MENTION) {
String response = null;
switch (groupType) {
case Constants.GROUP_RETWEET_TYPE_ALLCOMMENT:
response = SDCardUtil.get(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/mention", "所有评论" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt");
break;
case Constants.GROUP_RETWEET_TYPE_FRIEDNSCOMMENT:
response = SDCardUtil.get(context, SDCardUtil.getSDCardPath() + "/weiSwift/message/mention", "关注人的评论" + AccessTokenKeeper.readAccessToken(context).getUid() + ".txt");
break;
}
if (response != null) {
mCommentList = CommentList.parse(response).comments;
onCommentFinishedListener.onDataFinish(mCommentList);
}
}
}
private long checkout(int groupType) {
long sinceId = 0;
if (mCurrentGroup != groupType) {
mRefrshAll = true;
}
if (groupType == Constants.GROUP_RETWEET_TYPE_ALL || groupType == Constants.GROUP_RETWEET_TYPE_FRIENDS || groupType == Constants.GROUP_RETWEET_TYPE_ORIGINWEIBO) {
if (mMentionList.size() > 0 && mCurrentGroup == groupType && mRefrshAll == false) {
sinceId = Long.valueOf(mMentionList.get(0).id);
}
} else {
if (mCommentList.size() > 0 && mCurrentGroup == groupType && mRefrshAll == false) {
sinceId = Long.valueOf(mCommentList.get(0).id);
}
}
//如果是全局刷新,把sinceId设置为0,去请求
if (mRefrshAll) {
sinceId = 0;
}
mCurrentGroup = groupType;
return sinceId;
}
public RequestListener pullToRefresh_Mention_Listener = new RequestListener() {
@Override
public void onComplete(String response) {
ArrayList<Status> temp = (ArrayList<Status>) StatusList.parse(response).statuses;
if (temp != null && temp.size() > 0) {
if (mMentionList != null) {
mMentionList.clear();
}
cacheSave(mCurrentGroup, mContext, response);
mMentionList = temp;
mOnMentionFinishedListener.onDataFinish(mMentionList);
} else {
//ToastUtil.showShort(mContext, "没有更新的内容了");
mOnMentionFinishedListener.noMoreDate();
}
mRefrshAll = false;
}
@Override
public void onWeiboException(WeiboException e) {
ToastUtil.showShort(mContext, e.getMessage());
cacheLoad(mCurrentGroup, mContext, mOnMentionFinishedListener);
}
};
private RequestListener pullToRefresh_Comment_Listener = new RequestListener() {
@Override
public void onComplete(String response) {
ArrayList<Comment> temp = CommentList.parse(response).comments;
if (temp != null && temp.size() > 0) {
if (mCommentList != null) {
mCommentList.clear();
}
cacheSave(mCurrentGroup, mContext, response);
mCommentList = temp;
mOnCommentFinishedListener.onDataFinish(mCommentList);
} else {
//ToastUtil.showShort(mContext, "没有更新的内容了");
mOnCommentFinishedListener.noMoreDate();
}
mRefrshAll = false;
}
@Override
public void onWeiboException(WeiboException e) {
ToastUtil.showShort(mContext, e.getMessage());
mOnCommentFinishedListener.onError(e.getMessage());
cacheLoad(mCurrentGroup, mContext, mOnCommentFinishedListener);
}
};
public RequestListener nextPage_Mention_Listener = new RequestListener() {
@Override
public void onComplete(String response) {
if (!TextUtils.isEmpty(response)) {
ArrayList<Status> temp = (ArrayList<Status>) StatusList.parse(response).statuses;
if (temp.size() == 0 || (temp != null && temp.size() == 1 && temp.get(0).id.equals(String.valueOf(mMentionList.get(mMentionList.size() - 1).id)))) {
mOnMentionFinishedListener.noMoreDate();
} else if (temp.size() > 1) {
temp.remove(0);
mMentionList.addAll(temp);
mOnMentionFinishedListener.onDataFinish(mMentionList);
}
} else {
ToastUtil.showShort(mContext, "内容已经加载完了");
mOnMentionFinishedListener.noMoreDate();
}
}
@Override
public void onWeiboException(WeiboException e) {
mOnMentionFinishedListener.onError(e.getMessage());
}
};
public RequestListener nextPage_Comment_Listener = new RequestListener() {
@Override
public void onComplete(String response) {
if (!TextUtils.isEmpty(response)) {
ArrayList<Comment> temp = CommentList.parse(response).comments;
if (temp.size() == 1) {
mOnCommentFinishedListener.noMoreDate();
} else if (temp.size() > 1) {
temp.remove(0);
mCommentList.addAll(temp);
mOnCommentFinishedListener.onDataFinish(mCommentList);
} else {
ToastUtil.showShort(mContext, "数据异常");
mOnCommentFinishedListener.onError("数据异常");
}
} else {
//ToastUtil.showShort(mContext, "内容已经加载完了");
mOnCommentFinishedListener.noMoreDate();
}
}
@Override
public void onWeiboException(WeiboException e) {
mOnCommentFinishedListener.onError(e.getMessage());
}
};
}