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.mblog.tencent.Tencent;
import net.dev123.yibo.R;
import net.dev123.yibo.YiBoApplication;
import net.dev123.yibo.common.Constants;
import net.dev123.yibo.common.GlobalVars;
import net.dev123.yibo.common.NetType;
import net.dev123.yibo.common.ResourceBook;
import net.dev123.yibo.db.LocalAccount;
import net.dev123.yibo.db.LocalComment;
import net.dev123.yibo.service.adapter.CommentUtil;
import net.dev123.yibo.service.adapter.CommentsListAdapter;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
public class CommentsPageDownTask extends AsyncTask<Comment, Void, Boolean> {
private static final String TAG = "CommentsPageDownTask";
private Context context;
private MicroBlog microBlog;
private LocalAccount account;
private CommentsListAdapter adapter;
private LocalComment divider;
List<Comment> commentList = null;
private String resultMsg = null;
public CommentsPageDownTask(CommentsListAdapter adapter, LocalComment divider) {
this.adapter = adapter;
this.context = adapter.getContext();
this.account = adapter.getAccount();
this.divider = divider;
YiBoApplication yibo = (YiBoApplication)((Activity)context).getApplication();
microBlog = GlobalVars.getMicroBlog(yibo.getCurrentAccount());
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if (divider != null) {
divider.setLoading(true);
}
if (GlobalVars.NET_TYPE == NetType.NONE) {
cancel(true);
resultMsg = ResourceBook.getStatusCodeValue(ExceptionCode.NET_UNCONNECTED, context);
Toast.makeText(context, resultMsg, Toast.LENGTH_LONG).show();
if (divider != null) {
divider.setLoading(false);
}
adapter.notifyDataSetChanged();
}
}
@Override
protected Boolean doInBackground(Comment... params) {
boolean isSuccess = false;
if (microBlog == null ||
params == null ||
params.length != 2
) {
return isSuccess;
}
Comment max = params[0];
Comment since = params[1];
Paging<Comment> paging = new Paging<Comment>();
paging.setGlobalMax(max);
paging.setGlobalSince(since);
if (paging.moveToNext()) {
try {
commentList = microBlog.getCommentsToMe(paging);
} catch (LibException e) {
if(Constants.DEBUG) Log.e(TAG, "Task", e);
resultMsg = ResourceBook.getStatusCodeValue(e.getExceptionCode(), context);
paging.moveToPrevious();
}
}
isSuccess = ListUtil.isNotEmpty(commentList);
if (isSuccess && paging.hasNext()) {
LocalComment localComment = CommentUtil.createDividerComment(commentList, account);
commentList.add(localComment);
}
return isSuccess;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPreExecute();
if (divider != null) {
divider.setLoading(false);
}
if (result) {
adapter.addCacheToDivider(divider, commentList);
} else {
boolean isTencent = microBlog instanceof Tencent;
if (resultMsg != null) {
if (!isTencent) {
Toast.makeText(adapter.getContext(), resultMsg, Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(adapter.getContext(), R.string.msg_no_divider_data, Toast.LENGTH_LONG).show();
adapter.remove(divider);
}
// 如果没有的话,修改状态
adapter.notifyDataSetChanged();
}
}
}