package net.dev123.yibo.service.task;
import java.util.List;
import net.dev123.commons.Paging;
import net.dev123.commons.util.ListUtil;
import net.dev123.exception.ExceptionCode;
import net.dev123.exception.LibException;
import net.dev123.mblog.MicroBlog;
import net.dev123.mblog.entity.Comment;
import net.dev123.yibo.MicroBlogActivity;
import net.dev123.yibo.common.Constants;
import net.dev123.yibo.common.GlobalVars;
import net.dev123.yibo.common.ResourceBook;
import net.dev123.yibo.service.adapter.CommentsOfStatusListAdapter;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
public class QueryCommentsOfStatusTask extends AsyncTask<Void, Void, List<Comment>> {
private static final String TAG = "QueryCommentsOfStatusTask";
private Context context;
private CommentsOfStatusListAdapter adapter;
private MicroBlog microBlog = null;
private Paging<Comment> paging;
private net.dev123.mblog.entity.Status status;
private String resultMsg = null;
public QueryCommentsOfStatusTask(CommentsOfStatusListAdapter adapter) {
this.adapter = adapter;
this.status = adapter.getStatus();
this.context = adapter.getContext();
this.paging = adapter.getPaging();
microBlog = GlobalVars.getMicroBlog(adapter.getAccount());
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if (context instanceof MicroBlogActivity) {
((MicroBlogActivity)context).showLoadingFooter();
}
}
@Override
protected List<Comment> doInBackground(Void... params) {
List<Comment> listComment = null;
if (microBlog == null || status == null) {
return listComment;
}
Comment max = adapter.getMin();
paging.setGlobalMax(max);
if (paging.moveToNext()) {
try {
listComment = microBlog.getCommentsOfStatus(status.getId(), paging);
for(int i = 0, size = listComment.size(); i < size; i++) {
Comment comment = listComment.get(i);
if (comment.getInReplyToStatus() == null
|| comment.getInReplyToStatus().getId() == null) {
comment.setInReplyToStatus(status);
}
}
} catch (LibException e) {
if(Constants.DEBUG) Log.e(TAG, TAG, e);
if (e.getExceptionCode() != ExceptionCode.UNSUPPORTED_API) {
resultMsg = ResourceBook.getStatusCodeValue(
e.getExceptionCode(), context);
}
paging.moveToPrevious();
}
}
return listComment;
}
@Override
protected void onPostExecute(List<Comment> result) {
super.onPreExecute();
if (ListUtil.isNotEmpty(result)) {
adapter.addCacheToLast(result);
} else if (resultMsg != null){
Toast.makeText(context, resultMsg, Toast.LENGTH_SHORT).show();
}
if (paging.hasNext()) {
if (context instanceof MicroBlogActivity) {
((MicroBlogActivity)context).showMoreFooter();
}
} else {
if (context instanceof MicroBlogActivity) {
((MicroBlogActivity)context).showNoMoreFooter();
}
}
}
}