package com.dotcool.reader.task;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import com.dotcool.R;
import com.dotcool.reader.callback.CallbackEventData;
import com.dotcool.reader.callback.ICallbackEventData;
import com.dotcool.reader.callback.ICallbackNotifier;
import com.dotcool.reader.dao.NovelsDao;
import com.dotcool.reader.helper.AsyncTaskResult;
import com.dotcool.reader.model.BookModel;
import com.dotcool.reader.model.NovelContentModel;
import com.dotcool.reader.model.PageModel;
public class LoadNovelContentTask extends AsyncTask<BookModel, ICallbackEventData, AsyncTaskResult<NovelContentModel>> implements ICallbackNotifier {
private static final String TAG = LoadNovelContentTask.class.toString();
public volatile IAsyncTaskOwner owner;
private final boolean refresh;
public LoadNovelContentTask(boolean isRefresh, IAsyncTaskOwner owner) {
super();
this.refresh = isRefresh;
this.owner = owner;
}
public void onCallback(ICallbackEventData message) {
publishProgress(message);
}
@Override
protected void onPreExecute() {
// executed on UI thread.
owner.toggleProgressBar(true);
}
@Override
protected AsyncTaskResult<NovelContentModel> doInBackground(BookModel... params) {
Context ctx = owner.getContext();
try {
BookModel p = params[0];
if (refresh) {
publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_novel_content_task_refreshing)));
return new AsyncTaskResult<NovelContentModel>(NovelsDao.getInstance().getNovelContentFromInternet(p, this));
}
else {
publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_novel_content_task_loading)));
return new AsyncTaskResult<NovelContentModel>(NovelsDao.getInstance().getNovelContent(p, true, this));
}
} catch (Exception e) {
Log.e(TAG, "Error when getting novel content: " + e.getMessage(), e);
publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_novel_content_task_error, e.getMessage())));
return new AsyncTaskResult<NovelContentModel>(e);
}
}
@Override
protected void onProgressUpdate(ICallbackEventData... values) {
// executed on UI thread.
owner.setMessageDialog(values[0]);
}
@Override
protected void onPostExecute(AsyncTaskResult<NovelContentModel> result) {
owner.setMessageDialog(new CallbackEventData(owner.getContext().getResources().getString(R.string.load_novel_content_task_complete)));
owner.onGetResult(result, NovelContentModel.class);
}
}