package com.gzsll.hupu.data; import com.gzsll.hupu.Logger; import com.gzsll.hupu.data.local.ForumLocalDataSource; import com.gzsll.hupu.data.remote.ForumRemoteDataSource; import com.gzsll.hupu.db.Forum; import java.util.List; import javax.inject.Inject; import rx.Observable; import rx.functions.Action1; import rx.functions.Func1; /** * Created by sll on 2016/6/3. */ public class ForumRepository implements ForumDataSource { private final ForumLocalDataSource mForumLocalDataSource; private final ForumRemoteDataSource mForumRemoteDataSource; @Inject public ForumRepository(ForumLocalDataSource mForumLocalDataSource, ForumRemoteDataSource mForumRemoteDataSource) { this.mForumLocalDataSource = mForumLocalDataSource; this.mForumRemoteDataSource = mForumRemoteDataSource; } @Override public Observable<List<Forum>> getForumList(String forumId) { Logger.d("getForumList:" + forumId); Observable<List<Forum>> remote = mForumRemoteDataSource.getForumList(forumId); Observable<List<Forum>> local = mForumLocalDataSource.getForumList(forumId); Observable<List<Forum>> remoteWithLocalUpdate = remote.doOnNext(new Action1<List<Forum>>() { @Override public void call(List<Forum> fora) { if (fora != null) { for (Forum forum : fora) { mForumLocalDataSource.saveForum(forum); } } } }); if (forumId.equals("0")) { //我的论坛强制刷新 return remoteWithLocalUpdate; } return Observable.concat(local, remoteWithLocalUpdate).first(new Func1<List<Forum>, Boolean>() { @Override public Boolean call(List<Forum> fora) { return fora != null && !fora.isEmpty(); } }); } @Override public Observable<Boolean> removeForum(String fid) { return null; } }