package com.erakk.lnreader.task;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import com.erakk.lnreader.LNReaderApplication;
import com.erakk.lnreader.R;
import com.erakk.lnreader.callback.CallbackEventData;
import com.erakk.lnreader.callback.ICallbackEventData;
import com.erakk.lnreader.callback.ICallbackNotifier;
import com.erakk.lnreader.callback.IExtendedCallbackNotifier;
import com.erakk.lnreader.dao.NovelsDao;
import com.erakk.lnreader.model.NovelContentModel;
import com.erakk.lnreader.model.PageModel;
public class LoadNovelContentTask extends AsyncTask<Void, ICallbackEventData, AsyncTaskResult<NovelContentModel>> implements ICallbackNotifier {
private static final String TAG = LoadNovelContentTask.class.toString();
public volatile IExtendedCallbackNotifier<AsyncTaskResult<?>> owner;
private final boolean refresh;
private final String source;
private final PageModel pageModel;
public LoadNovelContentTask(PageModel p, boolean isRefresh, IExtendedCallbackNotifier<AsyncTaskResult<?>> owner) {
super();
this.refresh = isRefresh;
this.owner = owner;
this.pageModel = p;
this.source = TAG + ":" + pageModel.getPage();
}
@Override
public void onProgressCallback(ICallbackEventData message) {
publishProgress(message);
}
@Override
protected void onPreExecute() {
// executed on UI thread.
owner.onProgressCallback(new CallbackEventData("", source));
}
@Override
protected AsyncTaskResult<NovelContentModel> doInBackground(Void... params) {
Context ctx = LNReaderApplication.getInstance().getApplicationContext();
try {
if (refresh) {
publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_novel_content_task_refreshing, pageModel.getTitle()), source));
return new AsyncTaskResult<NovelContentModel>(NovelsDao.getInstance().getNovelContentFromInternet(pageModel, this), NovelContentModel.class);
}
else {
publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_novel_content_task_loading, pageModel.getTitle()), source));
return new AsyncTaskResult<NovelContentModel>(NovelsDao.getInstance().getNovelContent(pageModel, true, this), NovelContentModel.class);
}
} 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()), source));
return new AsyncTaskResult<NovelContentModel>(null, NovelContentModel.class, e);
}
}
@Override
protected void onProgressUpdate(ICallbackEventData... values) {
// executed on UI thread.
owner.onProgressCallback(values[0]);
}
@Override
protected void onPostExecute(AsyncTaskResult<NovelContentModel> result) {
Context ctx = LNReaderApplication.getInstance().getApplicationContext();
CallbackEventData message = new CallbackEventData(ctx.getResources().getString(R.string.load_novel_content_task_complete), source);
owner.onCompleteCallback(message, result);
}
}