package com.abewy.android.apps.klyph.facebook.request;
import java.util.ArrayList;
import java.util.Collections;
import org.json.JSONArray;
import com.abewy.android.apps.klyph.Klyph;
import com.abewy.android.apps.klyph.core.fql.serializer.UnifiedMessageDeserializer;
import com.abewy.android.apps.klyph.core.graph.GraphObject;
public class UserMessagesRequest extends KlyphQuery
{
@Override
public boolean isMultiQuery()
{
return true;
}
@Override
public String getQuery(String id, String offset)
{
String query1 = "SELECT action_id, attachment_map, attachments, body, containing_message_id, coordinates, "
+ "forwarded_message_id, forwarded_messages, html_body, is_forwarded, is_user_generated, log_message, "
+ "message_id, object_sender, offline_threading_id, recipients, sender, share_map, shares, subject, tags,"
+ " thread_id, timestamp, unread"
+ " FROM unified_message"
+ " WHERE thread_id IN (SELECT thread_id FROM unified_thread "
+ "WHERE single_recipient = " + id
+ " AND folder = \"inbox\")";
if (offset != null && offset.length() > 0)
query1 += " AND timestamp < " + offset;
query1 += " ORDER BY timestamp DESC LIMIT 20";
String query2 = "SELECT id, name, type FROM profile WHERE id IN (SELECT recipients FROM #query1)";
String query3 = "SELECT id, url from square_profile_pic WHERE id IN (SELECT id FROM #query2) AND size = "
+ Klyph.getStandardImageSizeForRequest() * 2;
return multiQuery(query1, query2, query3);
}
@Override
public ArrayList<GraphObject> handleResult(JSONArray[] result)
{
JSONArray data = result[0];
JSONArray recipients = result[1];
JSONArray user_pics = result[2];
assocData(recipients, user_pics, "id", "id", "pic", "url");
assocData3(data, recipients, "recipients", "id", "recipients_friends");
UnifiedMessageDeserializer deserializer = new UnifiedMessageDeserializer();
ArrayList<GraphObject> mts = (ArrayList<GraphObject>) deserializer.deserializeArray(data);
Collections.reverse(mts);
setHasMoreData(mts.size() >= 15);
return mts;
}
}