package in.srain.cube.demo.datamodel;
import in.srain.cube.demo.event.ImageListDataEvent;
import in.srain.cube.demo.data.ImageListItem;
import in.srain.cube.demo.event.EventCenter;
import in.srain.cube.demo.request.API;
import in.srain.cube.demo.request.DemoCacheRequest;
import in.srain.cube.request.*;
import in.srain.cube.views.list.ListPageInfo;
import in.srain.cube.views.list.PagedListDataModel;
import java.util.ArrayList;
public class ImageListDataModel extends PagedListDataModel<ImageListItem> {
public ImageListDataModel(int numPerPage) {
mListPageInfo = new ListPageInfo<ImageListItem>(numPerPage);
}
@Override
protected void doQueryData() {
DemoCacheRequest<ImageListDataEvent> request = new DemoCacheRequest<ImageListDataEvent>(new CacheAbleRequestDefaultHandler<ImageListDataEvent>() {
@Override
public ImageListDataEvent processOriginData(JsonData jsonData) {
JsonData data = jsonData.optJson("data");
ArrayList<JsonData> rawList = data.optJson("list").toArrayList();
ArrayList<ImageListItem> imageList = new ArrayList<ImageListItem>();
for (int i = 0; i < rawList.size(); i++) {
ImageListItem item = new ImageListItem(rawList.get(i));
imageList.add(item);
}
ImageListDataEvent event = new ImageListDataEvent();
event.imageList = imageList;
event.hasMore = data.optBoolean("has_more");
return event;
}
@Override
public void onCacheAbleRequestFinish(ImageListDataEvent data, CacheAbleRequest.ResultType type, boolean outOfDate) {
setRequestResult(data.imageList, data.hasMore);
EventCenter.getInstance().post(data);
}
@Override
public void onRequestFail(FailData failData) {
setRequestFail();
}
});
String cacheKey = "api/image-list-first-page";
boolean disableCache = mListPageInfo.getStart() != 0;
request.setCacheTime(3).setCacheKey(cacheKey).setDisableCache(disableCache);
RequestData requestData = request.getRequestData();
requestData.addQueryData("start", mListPageInfo.getStart());
requestData.addQueryData("num", mListPageInfo.getNumPerPage());
request.getRequestData().setRequestUrl(API.API_IMAGE_LIST);
request.send();
}
}