package com.abewy.android.apps.klyph.facebook.request; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONObject; import com.abewy.android.apps.klyph.KlyphApplication; import com.abewy.android.apps.klyph.R; import com.abewy.android.apps.klyph.core.fql.Album; import com.abewy.android.apps.klyph.core.fql.Photo; import com.abewy.android.apps.klyph.core.fql.Photo.Image; import com.abewy.android.apps.klyph.core.fql.Profile; import com.abewy.android.apps.klyph.core.fql.User; import com.abewy.android.apps.klyph.core.fql.serializer.AlbumDeserializer; import com.abewy.android.apps.klyph.core.fql.serializer.PhotoDeserializer; import com.abewy.android.apps.klyph.core.fql.serializer.ProfileDeserializer; import com.abewy.android.apps.klyph.core.fql.serializer.UserDeserializer; import com.abewy.android.apps.klyph.core.graph.GraphObject; public class ElementAlbumRequest extends KlyphQuery { private String id; @Override public boolean isMultiQuery() { return true; } @Override public String getQuery(String id, String offset) { this.id = id; String query1 = "SELECT aid, backdated_time, can_backdate, can_upload, comment_info, cover_object_id, cover_pid, created, description, edit_link, like_info, link, location, modified, modified_major, name, object_id, owner, owner_cursor, photo_count, place_id, type, video_count, visible"; query1 += " FROM album WHERE (photo_count > 0 OR video_count > 0) AND owner = " + id; if (isOffsetDefined(offset)) { query1 += " AND owner_cursor > \"" + offset + "\""; } query1 += " LIMIT 25"; String query2 = "SELECT pid, images from photo where pid in (select cover_pid from #query1 WHERE�strlen(cover_pid) > 0)"; if (isOffsetDefined(offset)) { return multiQuery(query1, query2); } String query3 = "select pid, object_id, images from photo where object_id in (select object_id from photo_tag where subject = " + id + ") LIMIT 1000"; String query4 = "SELECT�uid, first_name, name FROM�user where uid = \"" + id + "\""; String query5 = "SELECT�id, name FROM�profile where id = " + id; String query6 = "SELECT vid, thumbnail_link, owner FROM video WHERE owner = " + id; return multiQuery(query1, query2, query3, query4, query5, query6); } @Override public ArrayList<GraphObject> handleResult(JSONArray[] result) { JSONArray data = result[0]; JSONArray photos = result[1]; assocData(data, photos, "cover_pid", "pid", "cover_images", "images"); int n = 25; Album taggedAlbum = null; Album videoAlbum = null; if (result.length == 6) { JSONArray tagged = result[2]; JSONArray user = result[3]; JSONArray profile = result[4]; PhotoDeserializer pd = new PhotoDeserializer(); List<GraphObject> taggedPhotos = pd.deserializeArray(tagged); int nt = taggedPhotos.size(); if (nt > 0) { taggedAlbum = new Album(); taggedAlbum.setOwner(id); taggedAlbum.setPhoto_count(nt); taggedAlbum.setVideo_count(0); taggedAlbum.setIsTaggedAlbum(true); taggedAlbum.setIs_video_album(false); String eName = ""; if (user.length() > 0) { UserDeserializer ud = new UserDeserializer(); User u = (User) ud.deserializeArray(user).get(0); eName = u.getFirst_name().length() > 0 ? u.getFirst_name() : u.getName(); } else if (profile.length() > 0) { ProfileDeserializer prd = new ProfileDeserializer(); Profile p = (Profile) prd.deserializeArray(profile).get(0); eName = p.getName(); } taggedAlbum.setName(KlyphApplication.getInstance().getString(R.string.tagged_photos_of, eName)); Photo photo = (Photo) taggedPhotos.get(0); taggedAlbum.setCover_pid(photo.getPid()); taggedAlbum.setCover_images(photo.getImages()); } JSONArray videos = result[5]; if (videos.length() > 0) { videoAlbum = new Album(); videoAlbum.setOwner(id); videoAlbum.setPhoto_count(nt); videoAlbum.setVideo_count(0); videoAlbum.setIsTaggedAlbum(false); videoAlbum.setIs_video_album(true); for (int i = 0; i < videos.length(); i++) { JSONObject v = videos.optJSONObject(i); if (v != null && v.optString("thumbnail_link") != null) { Image cover = new Photo.Image(); cover.setSource(v.optString("thumbnail_link")); List<Image> images = new ArrayList<Photo.Image>(); images.add(cover); videoAlbum.setOwner(v.optString("owner")); videoAlbum.setCover_images(images); break; } } } } AlbumDeserializer deserializer = new AlbumDeserializer(); ArrayList<GraphObject> albums = (ArrayList<GraphObject>) deserializer.deserializeArray(data); if (videoAlbum != null) albums.add(0, videoAlbum); if (taggedAlbum != null) albums.add(0, taggedAlbum); setHasMoreData(albums.size() >= n); return albums; } }