package com.dotcool.reader.task;
import java.util.ArrayList;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import com.dotcool.reader.LNReaderApplication;
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.PageModel;
/*
* Modified by : freedomofkeima
*/
public class LoadAlternativeTask extends AsyncTask<Void, ICallbackEventData, AsyncTaskResult<PageModel[]>> implements ICallbackNotifier {
private static final String TAG = LoadAlternativeTask.class.toString();
private boolean refreshOnly = false;
private boolean alphOrder = false;
private String language = null;
public volatile IAsyncTaskOwner owner;
public LoadAlternativeTask(IAsyncTaskOwner owner, boolean refreshOnly, boolean alphOrder, String language) {
this.refreshOnly = refreshOnly;
this.alphOrder = alphOrder;
this.owner = owner;
this.language = language;
}
public void onCallback(ICallbackEventData message) {
publishProgress(message);
}
@Override
protected void onPreExecute() {
// executed on UI thread.
owner.toggleProgressBar(true);
}
@Override
protected AsyncTaskResult<PageModel[]> doInBackground(Void... arg0) {
Context ctx = owner.getContext();
// different thread from UI
try {
ArrayList<PageModel> novels = new ArrayList<PageModel>();
if (refreshOnly) {
publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_novel_alt_task_refreshing, language)));
novels = NovelsDao.getInstance().getAlternativeFromInternet(this, language);
}
else {
publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_novel_alt_task_loading, language)));
novels = NovelsDao.getInstance().getAlternative(this, alphOrder, language);
}
return new AsyncTaskResult<PageModel[]>(novels.toArray(new PageModel[novels.size()]));
} catch (Exception e) {
Log.e(TAG, "Error when getting " + language + " list: " + e.getMessage(), e);
publishProgress(new CallbackEventData(ctx.getResources().getString(R.string.load_novel_alt_task_error, language, e.getMessage())));
return new AsyncTaskResult<PageModel[]>(e);
}
}
@Override
protected void onProgressUpdate(ICallbackEventData... values) {
owner.setMessageDialog(values[0]);
}
@Override
protected void onPostExecute(AsyncTaskResult<PageModel[]> result) {
// executed on UI thread.
owner.setMessageDialog(new CallbackEventData(LNReaderApplication.getInstance().getApplicationContext().getResources().getString(R.string.load_novel_alt_task_complete, language)));
owner.onGetResult(result, PageModel[].class);
}
}