/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.picasa.sync;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.net.Uri;
import android.util.Log;
import com.android.gallery3d.common.Utils;
import com.galaxy.meetup.client.util.FIFEUtil;
import com.galaxy.meetup.client.util.ImageProxyUtil;
import com.galaxy.picasa.store.MetricsUtils;
/**
*
* @author sihai
*
*/
public class PicasaApi {
private final String mBaseUrl;
private final GDataClient mClient = new GDataClient();
private final GDataClient.Operation mOperation = new GDataClient.Operation();
public PicasaApi(ContentResolver contentresolver) {
String s = android.provider.Settings.Secure.getString(contentresolver, "picasa_gdata_base_url");
if(s == null)
s = "https://picasaweb.google.com/data/feed/api/";
mBaseUrl = s;
}
public static String convertImageUrl(String s, int i, boolean flag) {
String s1;
if (FIFEUtil.isFifeHostedUrl(s)) {
boolean flag1 = FIFEUtil.getImageUrlOptions(s).contains("I");
StringBuilder stringbuilder = new StringBuilder();
stringbuilder.append('s').append(i);
if (flag)
stringbuilder.append("-c");
if (flag1)
stringbuilder.append("-I");
s1 = FIFEUtil.setImageUrlOptions(stringbuilder.toString(), s)
.toString();
} else {
if (flag)
Log.w("gp.PicasaAPI", "not a FIFE url, ignore the crop option");
s1 = ImageProxyUtil.setImageUrlSize(i, s);
}
return s1;
}
private static String encodeUsername(String s) {
String s1 = s.toLowerCase();
if (s1.contains("@gmail.") || s1.contains("@googlemail."))
s1 = s1.substring(0, s1.indexOf('@'));
return Uri.encode(s1);
}
private int getAlbumPhotos(AlbumEntry albumentry, String s, String s1, PhotoCollectorJson photocollectorjson) {
int i = MetricsUtils.begin((new StringBuilder("PicasaApi.")).append(s1).toString());
if(Log.isLoggable("gp.PicasaAPI", 2)) {
String s2 = (new StringBuilder()).append(s1).append(" for %s / %s, etag: %s").toString();
Object aobj[] = new Object[3];
aobj[0] = Utils.maskDebugInfo(albumentry.user);
aobj[1] = Utils.maskDebugInfo(Long.valueOf(albumentry.id));
aobj[2] = albumentry.photosEtag;
Log.v("gp.PicasaAPI", String.format(s2, aobj));
}
int value = 0;
GDataClient.Operation operation;
operation = mOperation;
operation.inOutEtag = albumentry.photosEtag;
try {
mClient.get(s, operation);
switch(operation.outStatus) {
case 200:
albumentry.photosEtag = operation.inOutEtag;
photocollectorjson.parse(operation.outBody);
value = 0;
break;
case 304:
value = 1;
break;
case 401:
case 403:
value = 2;
break;
default:
Log.e("gp.PicasaAPI", (new StringBuilder()).append(s1).append(" fail: ").append(operation.outStatus).toString());
value = 3;
break;
}
} catch (Exception e) {
Utils.handleInterrruptedException(e);
Log.e("gp.PicasaAPI", (new StringBuilder()).append(s1).append(" fail").toString(), e);
//throw e;
} finally {
Utils.closeSilently(operation.outBody);
MetricsUtils.end(i);
}
return value;
}
public final int getAlbumPhotos(AlbumEntry albumentry,
EntryHandler entryhandler) {
return getAlbumPhotos(
albumentry,
(new StringBuilder(mBaseUrl))
.append("user/")
.append(encodeUsername(albumentry.user))
.append("/albumid/")
.append(albumentry.id)
.append("?max-results=1000&imgmax=d&thumbsize=640u&visibility=visible&v=4&alt=json&fd=shapes")
.append("&kind=photo").toString(), "getAlbumPhotos",
new PhotoCollectorJson(entryhandler));
}
public final int getAlbums(UserEntry userentry, EntryHandler entryhandler) {
int i;
StringBuilder stringbuilder;
i = MetricsUtils.begin("PicasaApi.getAlbums");
stringbuilder = (new StringBuilder(mBaseUrl)).append("user/").append(encodeUsername(userentry.account)).append("?max-results=1000&imgmax=d&thumbsize=640u&visibility=visible&v=4&alt=json&fd=shapes").append("&kind=album");
GDataClient.Operation operation;
operation = mOperation;
operation.inOutEtag = userentry.albumsEtag;
if(Log.isLoggable("gp.PicasaAPI", 2)) {
Object aobj2[] = new Object[2];
aobj2[0] = Utils.maskDebugInfo(userentry.account);
aobj2[1] = userentry.albumsEtag;
Log.v("gp.PicasaAPI", String.format("getAlbums for %s, etag = %s", aobj2));
}
int value = 0;
try {
mClient.get(stringbuilder.toString(), operation);
switch(operation.outStatus) {
case 200:
userentry.albumsEtag = operation.inOutEtag;
(new AlbumCollectorJson(entryhandler)).parse(operation.outBody);
value = 0;
break;
case 304:
value = 1;
break;
case 401:
case 403:
Object aobj[] = new Object[2];
aobj[0] = Utils.maskDebugInfo(stringbuilder.toString());
aobj[1] = Integer.valueOf(operation.outStatus);
Log.e("gp.PicasaAPI", String.format(" getAlbums fail - uri: %s, status code: %s", aobj));
value = 2;
break;
default:
Object aobj1[] = new Object[2];
aobj1[0] = Utils.maskDebugInfo(stringbuilder.toString());
aobj1[1] = Integer.valueOf(operation.outStatus);
Log.e("gp.PicasaAPI", String.format(" getAlbums fail - uri: %s, status code: %s", aobj1));
value = 3;
break;
}
} catch (Exception e) {
Utils.handleInterrruptedException(e);
Log.e("gp.PicasaAPI", "getAlbums fail", e);
//throw e;
} finally {
Utils.closeSilently(operation.outBody);
MetricsUtils.end(i);
}
return value;
}
public final void setAuthToken(String s) {
mClient.setAuthToken(s);
}
public static interface EntryHandler {
void handleEntry(ContentValues contentvalues);
}
}