package org.ebookdroid.ui.opds.adapters; import org.sufficientlysecure.viewer.R; import org.ebookdroid.opds.exceptions.AuthorizationRequiredException; import org.ebookdroid.opds.exceptions.OPDSException; import org.ebookdroid.opds.model.Feed; import android.app.ProgressDialog; import android.content.DialogInterface.OnCancelListener; import org.emdev.ui.progress.IProgressIndicator; import org.emdev.ui.tasks.BaseAsyncTask; import org.emdev.utils.LengthUtils; final class LoadFeedTask extends BaseAsyncTask<Feed, FeedTaskResult> implements OnCancelListener, IProgressIndicator { private final OPDSAdapter adapter; LoadFeedTask(OPDSAdapter adapter) { super(adapter.context, R.string.opds_connecting, true); this.adapter = adapter; } @Override protected FeedTaskResult doInBackground(final Feed... params) { final Feed f = params[0]; try { final Feed feed = adapter.client.loadFeed(f, this); adapter.executor.startLoadThumbnails(feed); return new FeedTaskResult(feed); } catch (final OPDSException ex) { return new FeedTaskResult(f, ex); } } @Override protected void onPostExecute(final FeedTaskResult result) { super.onPostExecute(result); if (result.error instanceof AuthorizationRequiredException) { adapter.showAuthDlg(result); } else if (result.error != null) { adapter.showErrorDlg(R.string.opdsrefreshfolder, R.id.opdsrefreshfolder, result, result.error); } final FeedListener l = adapter.listeners.getListener(); l.feedLoaded(result.feed); adapter.notifyDataSetChanged(); } @Override public void setProgressDialogMessage(final int resourceID, final Object... args) { publishProgress(context.getResources().getString(resourceID, args)); } @Override protected void onProgressUpdate(final String... values) { final int length = LengthUtils.length(values); if (length == 0) { return; } final String last = values[length - 1]; try { if (progressDialog == null || !progressDialog.isShowing()) { progressDialog = ProgressDialog.show(context, "", last, true); progressDialog.setCancelable(true); progressDialog.setCanceledOnTouchOutside(true); progressDialog.setOnCancelListener(this); } else { progressDialog.setMessage(last); } } catch (final Throwable th) { } } }