Load catalogue with thumbnails

This commit is contained in:
inorichi
2015-10-13 20:16:15 +02:00
parent c88d8f0ded
commit ed76520ebc
7 changed files with 173 additions and 37 deletions
@@ -3,6 +3,7 @@ package eu.kanade.mangafeed.presenter;
import android.content.Intent;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
@@ -38,6 +39,7 @@ public class CatalogueListPresenter extends BasePresenter {
private Subscription mMangaFetchSubscription;
private Subscription mMangaSearchSubscription;
private Subscription mSearchViewSubscription;
private Subscription mMangaDetailFetchSubscription;
private PublishSubject<Observable<String>> mSearchViewPublishSubject;
@@ -69,7 +71,10 @@ public class CatalogueListPresenter extends BasePresenter {
.flatMap(Observable::from)
.map(this::networkToLocalManga)
.toList()
.subscribe(adapter::addItems);
.subscribe(newMangas -> {
adapter.addItems(newMangas);
getMangaDetails(newMangas);
});
subscriptions.add(mMangaFetchSubscription);
}
@@ -83,7 +88,10 @@ public class CatalogueListPresenter extends BasePresenter {
.flatMap(Observable::from)
.map(this::networkToLocalManga)
.toList()
.subscribe(adapter::addItems);
.subscribe(newMangas -> {
adapter.addItems(newMangas);
getMangaDetails(newMangas);
});
subscriptions.add(mMangaSearchSubscription);
}
@@ -97,23 +105,40 @@ public class CatalogueListPresenter extends BasePresenter {
return localManga;
}
private Observable<Manga> getMangaDetails(Manga manga) {
Observable<Manga> mangaObs = Observable.just(manga);
if (!manga.initialized) {
return mangaObs
.subscribeOn(Schedulers.io())
.flatMap(localManga -> {
Timber.e("Request " + localManga.url);
return selectedSource.pullMangaFromNetwork(localManga.url);
})
.flatMap(networkManga -> {
Manga.copyFromNetwork(manga, networkManga);
Timber.w("Net manga " + manga.thumbnail_url);
db.insertMangaBlock(manga);
return Observable.just(manga);
});
}
return mangaObs;
private void getMangaDetails(List<Manga> mangas) {
subscriptions.remove(mMangaDetailFetchSubscription);
mMangaDetailFetchSubscription = Observable.from(mangas)
.subscribeOn(Schedulers.io())
.filter(manga -> !manga.initialized)
.buffer(3)
.concatMap(localMangas -> {
List<Observable<Manga>> mangaObservables = new ArrayList<>();
for (Manga manga : localMangas) {
Observable<Manga> tempObs = selectedSource.pullMangaFromNetwork(manga.url)
.flatMap(networkManga -> {
Manga.copyFromNetwork(manga, networkManga);
db.insertMangaBlock(manga);
return Observable.just(manga);
})
.subscribeOn(Schedulers.io());
mangaObservables.add(tempObs);
}
return Observable.merge(mangaObservables);
})
.filter(manga -> manga.initialized)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(manga -> {
int i;
for (i = 0; i < adapter.getCount(); i++) {
if (manga.id == adapter.getItem(i).id) {
break;
}
}
view.updateImage(i, manga.thumbnail_url);
});
subscriptions.add(mMangaDetailFetchSubscription);
}
public void onQueryTextChange(String query) {
@@ -152,8 +177,8 @@ public class CatalogueListPresenter extends BasePresenter {
mSearchName = query;
adapter.getItems().clear();
view.resetScrollListener();
loadMoreMangas(1);
view.setScrollListener();
}
public void loadMoreMangas(int page) {