package cgeo.geocaching.export; import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.connector.capability.PersonalNoteCapability; import cgeo.geocaching.models.Geocache; import cgeo.geocaching.utils.AsyncTaskWithProgress; import cgeo.geocaching.utils.Log; import android.app.Activity; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import java.util.List; import org.apache.commons.lang3.StringUtils; /** * Exports personal notes. */ public class PersonalNoteExport extends AbstractExport { private int persNotesCount = 0; public PersonalNoteExport() { super(R.string.export_persnotes); } @Override public void export(@NonNull final List<Geocache> cachesList, @Nullable final Activity activity) { final Geocache[] caches = cachesList.toArray(new Geocache[cachesList.size()]); new ExportTask(activity).execute(caches); } private class ExportTask extends AsyncTaskWithProgress<Geocache, Boolean> { /** * Instantiates and configures the task for exporting personal notes. */ ExportTask(@Nullable final Activity activity) { super(activity, getProgressTitle(), CgeoApplication.getInstance().getString(R.string.export_persnotes)); } @Override protected Boolean doInBackgroundInternal(final Geocache[] caches) { try { int i = 0; for (final Geocache cache : caches) { final IConnector connector = ConnectorFactory.getConnector(cache); publishProgress(++i); if (connector instanceof PersonalNoteCapability && StringUtils.isNotBlank(cache.getPersonalNote())) { ((PersonalNoteCapability) connector).uploadPersonalNote(cache); persNotesCount++; } } } catch (final Exception e) { Log.e("PersonalNoteExport.ExportTask uploading personal notes", e); return false; } return true; } @Override protected void onPostExecuteInternal(final Boolean result) { if (activity != null) { final Context nonNullActivity = activity; if (result) { ActivityMixin.showToast(activity, nonNullActivity.getResources().getQuantityString(R.plurals.export_persnotes_upload_success, persNotesCount, persNotesCount)); } else { ActivityMixin.showToast(activity, nonNullActivity.getString(R.string.export_failed)); } } } @Override protected void onProgressUpdateInternal(final Integer status) { if (activity != null) { setMessage(activity.getString(R.string.export_persnotes_uploading, persNotesCount)); } } } }