package com.gzsll.hupu.data.local; import com.gzsll.hupu.data.ContentDataSource; import com.gzsll.hupu.db.ThreadInfo; import com.gzsll.hupu.db.ThreadInfoDao; import com.gzsll.hupu.db.ThreadReply; import com.gzsll.hupu.db.ThreadReplyDao; import com.gzsll.hupu.util.HtmlUtil; import java.util.List; import javax.inject.Inject; import rx.Observable; import rx.Subscriber; import rx.schedulers.Schedulers; /** * Created by sll on 2016/6/3. */ public class ContentLocalDataSource implements ContentDataSource { private final ThreadInfoDao mThreadInfoDao; private final ThreadReplyDao mThreadReplyDao; @Inject public ContentLocalDataSource(ThreadInfoDao mThreadInfoDao, ThreadReplyDao mThreadReplyDao) { this.mThreadInfoDao = mThreadInfoDao; this.mThreadReplyDao = mThreadReplyDao; } @Override public Observable<ThreadInfo> getThreadInfo(String fid, final String tid) { return Observable.create(new Observable.OnSubscribe<ThreadInfo>() { @Override public void call(Subscriber<? super ThreadInfo> subscriber) { List<ThreadInfo> threadInfos = mThreadInfoDao.queryBuilder().where(ThreadInfoDao.Properties.Tid.eq(tid)).list(); if (!threadInfos.isEmpty()) { ThreadInfo threadInfo = threadInfos.get(0); String content = threadInfo.getContent(); threadInfo.setContent(HtmlUtil.transImgToLocal(content)); subscriber.onNext(threadInfo); } else { subscriber.onNext(null); } subscriber.onCompleted(); } }).subscribeOn(Schedulers.io()); } public void saveThreadInfo(ThreadInfo mThreadInfo) { mThreadInfoDao.queryBuilder() .where(ThreadInfoDao.Properties.Tid.eq(mThreadInfo.getTid())) .buildDelete() .executeDeleteWithoutDetachingEntities(); mThreadInfoDao.insert(mThreadInfo); } @Override public Observable<List<ThreadReply>> getReplies(String fid, final String tid, final int page) { return Observable.create(new Observable.OnSubscribe<List<ThreadReply>>() { @Override public void call(Subscriber<? super List<ThreadReply>> subscriber) { List<ThreadReply> replies = mThreadReplyDao.queryBuilder() .where(ThreadReplyDao.Properties.Tid.eq(tid), ThreadReplyDao.Properties.IsLight.eq(false), ThreadReplyDao.Properties.PageIndex.eq(page)) .orderAsc(ThreadReplyDao.Properties.Floor) .list(); if (replies.isEmpty() && page > 1) { subscriber.onNext(null); } else { subscriber.onNext(replies); } subscriber.onCompleted(); } }).subscribeOn(Schedulers.io()); } @Override public Observable<List<ThreadReply>> getLightReplies(String fid, final String tid) { return Observable.create(new Observable.OnSubscribe<List<ThreadReply>>() { @Override public void call(Subscriber<? super List<ThreadReply>> subscriber) { List<ThreadReply> replies = mThreadReplyDao.queryBuilder() .where(ThreadReplyDao.Properties.Tid.eq(tid), ThreadReplyDao.Properties.IsLight.eq(true)) .orderDesc(ThreadReplyDao.Properties.Light_count) .list(); subscriber.onNext(replies); subscriber.onCompleted(); } }).subscribeOn(Schedulers.io()); } public void saveThreadReply(ThreadReply reply) { mThreadReplyDao.queryBuilder() .where(ThreadReplyDao.Properties.Pid.eq(reply.getPid()), ThreadReplyDao.Properties.IsLight.eq(reply.getIsLight())) .buildDelete() .executeDeleteWithoutDetachingEntities(); mThreadReplyDao.insert(reply); } }