/** * */ package com.gmail.charleszq.picorner.task.flickr; import java.util.Set; import android.app.ProgressDialog; import android.content.Context; import android.util.Log; import android.widget.Toast; import com.gmail.charleszq.picorner.R; import com.gmail.charleszq.picorner.task.AbstractContextAwareTask; import com.gmail.charleszq.picorner.utils.FlickrHelper; import com.googlecode.flickrjandroid.Flickr; import com.googlecode.flickrjandroid.groups.pools.PoolsInterface; import com.googlecode.flickrjandroid.photos.PhotoPlace; import com.googlecode.flickrjandroid.photosets.PhotosetsInterface; /** * Represents the task to organize my own flickr photos, that is, put a photo * into sets/groups. * * <p/> * the parameter is the photo id; the return value is the fail numbers. * * @author charleszq * */ public class FlickrOrganizePhotoTask extends AbstractContextAwareTask<String, Integer, Integer> { private Set<String> mPoolsToAddTo; private Set<String> mPoolsToRemoveFrom; private ProgressDialog mProgressDialog; public FlickrOrganizePhotoTask(Context ctx, Set<String> addPool, Set<String> removePool) { super(ctx); this.mPoolsToAddTo = addPool; this.mPoolsToRemoveFrom = removePool; } /* * (non-Javadoc) * * @see android.os.AsyncTask#onPreExecute() */ @Override protected void onPreExecute() { super.onPreExecute(); mProgressDialog = new ProgressDialog( mContext) ; mProgressDialog.setTitle(R.string.msg_org_my_f_photo_progress); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressDialog .setMax(mPoolsToAddTo.size() + mPoolsToRemoveFrom.size()); mProgressDialog.show(); } @Override protected Integer doInBackground(String... params) { // photo id String photoId = params[0]; // get the flickr api interfaces. Flickr f = FlickrHelper.getInstance().getFlickrAuthed(mContext); PhotosetsInterface pi = f.getPhotosetsInterface(); PoolsInterface pooli = f.getPoolsInterface(); // fail number int failNumber = 0; // add to pools int progress = 1; for (String s : mPoolsToAddTo) { // 's' is in the format of '<photo place kind>+<pool id>' publishProgress(progress++); String kind = s.substring(0, 1); String poolId = s.substring(1); Log.d(TAG, s + " kind: " + kind + ", pool id: " + poolId); //$NON-NLS-1$//$NON-NLS-2$ int intKind = Integer.parseInt(kind); switch (intKind) { case PhotoPlace.SET: try { pi.addPhoto(poolId, photoId); } catch (Exception e) { failNumber++; Log.e(TAG, String.format( "Fail to add to set '%s', reason: %s", poolId, e.getMessage())); //$NON-NLS-1$ } break; case PhotoPlace.POOL: try { pooli.add(photoId, poolId); } catch (Exception e) { failNumber++; Log.e(TAG, String.format( "Fail to add to group '%s', reason: %s", poolId, e.getMessage())); //$NON-NLS-1$ } break; } } for (String s : mPoolsToRemoveFrom) { publishProgress(progress++); String kind = s.substring(0, 1); String poolId = s.substring(1); Log.d(TAG, s + " kind: " + kind + ", pool id: " + poolId); //$NON-NLS-1$//$NON-NLS-2$ int intKind = Integer.parseInt(kind); switch (intKind) { case PhotoPlace.SET: try { pi.removePhoto(poolId, photoId); } catch (Exception e) { failNumber++; Log.e(TAG, String.format( "Fail to remove from set '%s', reason: %s", poolId, e.getMessage())); //$NON-NLS-1$ } break; case PhotoPlace.POOL: try { pooli.remove(photoId, poolId); } catch (Exception e) { failNumber++; Log.e(TAG, String.format( "Fail to remove from group '%s', reason: %s", poolId, e.getMessage())); //$NON-NLS-1$ } break; } } return failNumber; } /* * (non-Javadoc) * * @see * com.gmail.charleszq.picorner.task.AbstractGeneralTask#onPostExecute(java * .lang.Object) */ @Override protected void onPostExecute(Integer result) { super.onPostExecute(result); if (mProgressDialog != null) { mProgressDialog.cancel(); } if (result == 0) { Toast.makeText(mContext, mContext.getString(R.string.msg_org_my_f_photo_done), Toast.LENGTH_SHORT).show(); } else if (result == mPoolsToAddTo.size() + mPoolsToRemoveFrom.size()) { Toast.makeText(mContext, mContext.getString(R.string.msg_org_my_f_photo_fail), Toast.LENGTH_SHORT).show(); } else { Toast.makeText( mContext, mContext.getString(R.string.msg_org_my_f_photo_partail_success), Toast.LENGTH_SHORT).show(); } } /* * (non-Javadoc) * * @see android.os.AsyncTask#onProgressUpdate(Progress[]) */ @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); if (mProgressDialog != null) { mProgressDialog.setProgress(values[0]); } } }