package com.think.uiloader.data.cache; import android.content.Context; import com.think.uiloader.data.cache.serializer.JsonSerializer; import com.think.uiloader.data.entity.ImageEntity; import com.think.uiloader.data.exception.NotFoundException; import com.think.uiloader.data.executor.ThreadExecutor; import javax.inject.Inject; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; /** * Created by borney on 5/8/17. */ public class ImageCache extends AbstractCache<ImageEntity> { @Inject ImageCache(Context context, ThreadExecutor threadExecutor, JsonSerializer jsonSerializer) { super(context, threadExecutor, jsonSerializer); } @Override public Observable<ImageEntity> get(final String key) { return Observable.create(new ObservableOnSubscribe<ImageEntity>() { @Override public void subscribe(ObservableEmitter<ImageEntity> e) throws Exception { String json = cache.getSerializable(key); ImageEntity entity = jsonSerializer.deserialize(json, ImageEntity.class); if (entity != null) { e.onNext(entity); e.onComplete(); } else { e.onError(new NotFoundException("not found " + key + " cache")); } } }); } @Override public void put(String key, ImageEntity value) { String json = jsonSerializer.serialize(value, ImageEntity.class); executeAsynchronously(new CacheWriter(cache, key, json)); } @Override public boolean isExpired(String key) { return cache.isExpired(key); } @Override public void evict(String key) { cache.evict(key); } @Override public boolean isCached(String key) { return cache.isCached(key); } }