Improve sources' paging

This commit is contained in:
inorichi
2015-11-15 17:51:14 +01:00
parent f63b7c8141
commit a055cc07d8
9 changed files with 186 additions and 82 deletions
@@ -22,8 +22,8 @@ import butterknife.ButterKnife;
import butterknife.OnItemClick;
import eu.kanade.mangafeed.R;
import eu.kanade.mangafeed.data.database.models.Manga;
import eu.kanade.mangafeed.ui.manga.MangaActivity;
import eu.kanade.mangafeed.ui.base.fragment.BaseRxFragment;
import eu.kanade.mangafeed.ui.manga.MangaActivity;
import eu.kanade.mangafeed.util.PageBundle;
import eu.kanade.mangafeed.widget.EndlessScrollListener;
import nucleus.factory.RequiresPresenter;
@@ -10,9 +10,10 @@ import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import eu.kanade.mangafeed.data.database.DatabaseHelper;
import eu.kanade.mangafeed.data.source.SourceManager;
import eu.kanade.mangafeed.data.database.models.Manga;
import eu.kanade.mangafeed.data.source.SourceManager;
import eu.kanade.mangafeed.data.source.base.Source;
import eu.kanade.mangafeed.data.source.model.MangasPage;
import eu.kanade.mangafeed.ui.base.presenter.BasePresenter;
import eu.kanade.mangafeed.util.PageBundle;
import eu.kanade.mangafeed.util.RxPager;
@@ -36,6 +37,7 @@ public class CataloguePresenter extends BasePresenter<CatalogueFragment> {
private int mCurrentPage;
private RxPager pager;
private MangasPage lastMangasPage;
private Subscription mQueryDebouncerSubscription;
private Subscription mMangaDetailFetchSubscription;
@@ -91,21 +93,28 @@ public class CataloguePresenter extends BasePresenter<CatalogueFragment> {
}
public void requestNext() {
if (getView() != null)
getView().showGridProgressBar();
pager.requestNext(++mCurrentPage);
}
private Observable<List<Manga>> getMangaObs(int page) {
Observable<List<Manga>> obs;
MangasPage nextMangasPage = new MangasPage(page);
if (page != 1) {
if (lastMangasPage.nextPageUrl == null)
return Observable.empty();
nextMangasPage.url = lastMangasPage.nextPageUrl;
}
if (getView() != null)
getView().showGridProgressBar();
Observable<MangasPage> obs;
if (mSearchMode)
obs = selectedSource.searchMangasFromNetwork(mSearchName, page);
obs = selectedSource.searchMangasFromNetwork(nextMangasPage, mSearchName);
else
obs = selectedSource.pullPopularMangasFromNetwork(page);
obs = selectedSource.pullPopularMangasFromNetwork(nextMangasPage);
return obs.subscribeOn(Schedulers.io())
.flatMap(Observable::from)
.doOnNext(mangasPage -> lastMangasPage = mangasPage)
.flatMap(mangasPage -> Observable.from(mangasPage.mangas))
.map(this::networkToLocalManga)
.toList();
}