package edu.mit.mitmobile2.mit150;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import edu.mit.mitmobile2.MobileWebApi;
import edu.mit.mitmobile2.MobileWebApi.JSONArrayResponseListener;
import edu.mit.mitmobile2.MobileWebApi.DefaultErrorListener;
import edu.mit.mitmobile2.MobileWebApi.ServerResponseException;
import edu.mit.mitmobile2.mit150.CorridorStory.Image;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
public class CorridorModel {
// private mutable stories
private static ArrayList<CorridorStory> sStories = new ArrayList<CorridorStory>();
// public unmutable stories
public static List<CorridorStory> sCorridorStories = sStories;
public static void fetchInitialStories(Context context, Handler uiHandler) {
if(sStories.size() > 0) {
MobileWebApi.sendSuccessMessage(uiHandler);
return;
}
fetchMoreStories(context, uiHandler);
}
public static void fetchMoreStories(Context context, final Handler uiHandler) {
HashMap<String, String> params = new HashMap<String, String>();
params.put("module", "corridor");
params.put("command", "list");
params.put("offset", Integer.toString(sStories.size()));
MobileWebApi api = new MobileWebApi(false, true, "corridor", context, uiHandler);
api.requestJSONArray(params, new JSONArrayResponseListener(new DefaultErrorListener(uiHandler), null) {
@Override
public void onResponse(JSONArray array) throws ServerResponseException, JSONException {
for(int i = 0; i < array.length(); i++) {
JSONObject storyJson = array.getJSONObject(i);
Image storyImage = null;
if(storyJson.has("image")) {
JSONObject imageJson = storyJson.getJSONObject("image");
storyImage = new Image(
imageJson.getString("src"),
Integer.parseInt(imageJson.getString("width")),
Integer.parseInt(imageJson.getString("height"))
);
}
sStories.add(
new CorridorStory(
storyJson.getString("title"),
storyJson.getString("firstname"),
storyJson.getString("lastname"),
storyJson.getString("affiliation"),
new Date(storyJson.getLong("date-posted-unix") * 1000),
storyImage,
storyJson.getString("body"),
storyJson.getString("plain-text")
)
);
}
Message msg = Message.obtain();
msg.arg1 = MobileWebApi.SUCCESS;
msg.arg2 = array.length();
uiHandler.sendMessage(msg);
}
});
}
}