Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public Observable<Dashboard> getDashboard(String phoneNum, boolean getNewData) {
- if (getNewData) invalidateDashboardCache();//just set dashboardCacheValid = false
- Observable<Dashboard> observableToCache = Observable.fromCallable(
- () -> {
- Dashboard cached = mCache.getDashboard(phoneNum);
- if (cached != null) {
- if (!cached.cacheValid()) {
- dashboardCacheValid = false;
- }
- return cached;
- }
- dashboardCacheValid = false;
- return Dashboard.EMPTY;
- })
- .concatMap(cachedDashboard -> Observable.concat(Observable.just(cachedDashboard),
- Observable.fromCallable(() -> !dashboardCacheValid)
- .filter(Boolean::booleanValue)
- .flatMap(cacheNotValid -> mNetworkHelper.getDashboardRaw(phoneNum))
- .doOnNext(dashboard -> {
- mCache.putDashboard(pnumber, dashboard);
- dashboardCacheValid = true;
- })));
- return cacheObservable(CACHE_PREFIX_GET_DASHBOARD + phoneNum, observableToCache); //this is for multiple calls
- }
- public Observable<Dashboard> getDashboardNew(String phoneNum, boolean getNewData) {
- Dashboard fromCache = mCache.getDashboard(phoneNum, getNewData);
- dashboardCacheValid = fromCache.cacheValid();
- if (getNewData) invalidateDashboardCache();
- if (dashboardCacheValid) {
- return Observable.just(fromCache);
- } else {
- final Dashboard cached = fromCache;
- return mNetworkHelper.getDashboardRaw(phoneNum)
- .doOnNext(dashboard -> mCache.putDashboard(phoneNum, dashboard))
- .onErrorResumeNext(throwable -> {
- return Observable.concat(Observable.just(cached), Observable.error(throwable));
- });
- }
- }
Add Comment
Please, Sign In to add comment