/**
*
*/
package com.gmail.charleszq.picorner.task.flickr;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.util.Log;
import com.gmail.charleszq.picorner.model.ExifData;
import com.gmail.charleszq.picorner.task.AbstractContextAwareTask;
import com.gmail.charleszq.picorner.utils.FlickrHelper;
import com.gmail.charleszq.picorner.utils.ModelUtils;
import com.googlecode.flickrjandroid.Flickr;
import com.googlecode.flickrjandroid.photos.Exif;
import com.googlecode.flickrjandroid.photos.PhotosInterface;
/**
* @author charles(charleszq@gmail.com)
*
*/
public class FetchFlickrPhotoExifTask extends
AbstractContextAwareTask<String, Integer, List<ExifData>> {
public FetchFlickrPhotoExifTask(Context ctx) {
super(ctx);
}
@Override
protected List<ExifData> doInBackground(String... params) {
String photoId = params[0];
String photoSecret = null;
if (params.length > 1) {
photoSecret = params[1];
}
Flickr f = FlickrHelper.getInstance().getFlickrAuthed(mContext);
PhotosInterface pi = f.getPhotosInterface();
try {
Collection<Exif> exifs = pi.getExif(photoId, photoSecret);
List<ExifData> data = ModelUtils.convertFlickrExifs(exifs);
return postProcess(data);
} catch (Exception e) {
Log.w(TAG, "Error to get exif information of a photo: " //$NON-NLS-1$
+ e.getMessage());
}
return null;
}
/**
*
* @param data
* @return
*/
private List<ExifData> postProcess(List<ExifData> data) {
if (data.isEmpty()) {
return null;
}
Map<String, ExifData> map = ExifData.getPredefinedExifList();
for (ExifData exif : data) {
if (exif.label == null) {
continue;
}
map.put(exif.label, exif);
}
return new ArrayList<ExifData>(map.values());
}
}