package ar.rulosoft.mimanganu.utils; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.util.Log; import android.view.View; import ar.rulosoft.mimanganu.R; import ar.rulosoft.mimanganu.componentes.Database; import ar.rulosoft.mimanganu.componentes.Manga; import ar.rulosoft.mimanganu.servers.ServerBase; /** * Created by Raul on 17/07/2016. */ public class AsyncAddManga extends AsyncTask<Void, Integer, Void> { private Activity mActivity; private String error = null; private boolean allOk = true; private boolean backOnFinish; private Manga manga; private int total = 0; private int mNotifyID = (int) System.currentTimeMillis(); private boolean loadMangaInformation; private boolean showProgressDialog; private ProgressDialog addingProgressDialog; private View view; public AsyncAddManga(Manga manga, Activity mActivity, View view, boolean backOnFinish, boolean loadMangaInformation, boolean showProgressDialog) { this.mActivity = mActivity; this.view = view; this.backOnFinish = backOnFinish; this.manga = manga; this.loadMangaInformation = loadMangaInformation; this.showProgressDialog = showProgressDialog; this.addingProgressDialog = new ProgressDialog(mActivity); } @Override protected void onPreExecute() { if (showProgressDialog && addingProgressDialog != null) { addingProgressDialog.setMessage(mActivity.getResources().getString(R.string.adding_to_db)); addingProgressDialog.show(); } Util.getInstance().showFastSnackBar(mActivity.getString(R.string.adding_to_db) + " " + manga.getTitle(), view, mActivity); Util.getInstance().createNotificationWithProgressbar(mActivity, mNotifyID, mActivity.getResources().getString(R.string.adding_to_db), ""); super.onPreExecute(); } @Override protected Void doInBackground(Void... params) { ServerBase serverBase = ServerBase.getServer(manga.getServerId(), mActivity); try { if(loadMangaInformation) serverBase.loadMangaInformation(manga, false); serverBase.loadChapters(manga, false); total = manga.getChapters().size(); int mid = Database.addManga(mActivity, manga); if (mid > -1) { long initTime = System.currentTimeMillis(); for (int i = 0; i < manga.getChapters().size(); i++) { if (System.currentTimeMillis() - initTime > 500) { publishProgress(i); initTime = System.currentTimeMillis(); } Database.addChapter(mActivity, manga.getChapter(i), mid); } publishProgress(total); } else { allOk = false; } } catch (Exception e) { allOk = false; error = Log.getStackTraceString(e); } return null; } @Override protected void onProgressUpdate(final Integer... values) { super.onProgressUpdate(values); if (showProgressDialog) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { if (addingProgressDialog != null && addingProgressDialog.isShowing()) { addingProgressDialog.setMessage(mActivity.getResources().getString(R.string.adding_to_db) + " " + values[0] + "/" + total); } } }); } Util.getInstance().changeNotificationWithProgressbar(total, values[0], mNotifyID, mActivity.getResources().getString(R.string.adding_to_db), manga.getTitle() + " " + values[0] + "/" + total, true); } @Override protected void onPostExecute(Void aVoid) { try { if (showProgressDialog && addingProgressDialog != null && addingProgressDialog.isShowing()) addingProgressDialog.dismiss(); } catch (Exception e) { Log.e("AsyncAddManga", "Exception", e); } if (mActivity != null) { if (backOnFinish) mActivity.onBackPressed(); if (!allOk && error != null) { Util.getInstance().showFastSnackBar(error, view, mActivity); } else if (allOk) { Util.getInstance().showFastSnackBar(mActivity.getString(R.string.agregado) + " " + manga.getTitle(), view, mActivity); } } Util.getInstance().cancelNotification(mNotifyID); super.onPostExecute(aVoid); } }