package com.think.uiloader.data.datasource;
import android.content.Context;
import com.think.uiloader.data.cache.ImageCache;
import com.think.uiloader.data.entity.ImageEntity;
import com.think.uiloader.data.net.ApiConnection;
import java.io.File;
import javax.inject.Inject;
import io.reactivex.Observable;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Predicate;
/**
* Created by borney on 5/8/17.
*/
public class ImageStore extends AbstractStore {
private ImageCache mCache;
@Inject
ImageStore(Context context, ApiConnection api, ImageCache cache) {
super(context, api);
mCache = cache;
}
public Observable<ImageEntity> images(int fromIndex, int returnNum) {
final String key = absKey(fromIndex, returnNum);
if (!isThereInternetConnection()) {
return mCache.get(key);
}
return api.images(fromIndex, returnNum)
.filter(new Predicate<ImageEntity>() {
@Override
public boolean test(ImageEntity entity) throws Exception {
return entity != null && entity.getImgs().size() > 0;
}
})
.doOnNext(new Consumer<ImageEntity>() {
@Override
public void accept(ImageEntity entity) throws Exception {
mCache.put(key, entity);
}
})
.onErrorResumeNext(this.<ImageEntity>errorResumeNext());
}
private String absKey(int index, int num) {
StringBuilder sb = new StringBuilder();
sb.append("images");
sb.append(File.separator);
sb.append(index);
sb.append(File.separator);
sb.append(num);
return sb.toString();
}
}