123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package eu.kanade.mangafeed.presenter;
- import android.os.Bundle;
- import java.util.List;
- import javax.inject.Inject;
- import de.greenrobot.event.EventBus;
- import eu.kanade.mangafeed.data.helpers.DatabaseHelper;
- import eu.kanade.mangafeed.data.helpers.SourceManager;
- import eu.kanade.mangafeed.data.models.Chapter;
- import eu.kanade.mangafeed.data.models.Manga;
- import eu.kanade.mangafeed.events.ChapterCountEvent;
- import eu.kanade.mangafeed.events.SourceChapterEvent;
- import eu.kanade.mangafeed.sources.base.Source;
- import eu.kanade.mangafeed.ui.fragment.MangaChaptersFragment;
- import eu.kanade.mangafeed.util.EventBusHook;
- import eu.kanade.mangafeed.util.PostResult;
- import rx.Observable;
- import rx.Subscription;
- import rx.android.schedulers.AndroidSchedulers;
- import rx.schedulers.Schedulers;
- public class MangaChaptersPresenter extends BasePresenter<MangaChaptersFragment> {
- @Inject DatabaseHelper db;
- @Inject SourceManager sourceManager;
- private Manga manga;
- private Source source;
- private static final int DB_CHAPTERS = 1;
- private static final int ONLINE_CHAPTERS = 2;
- private Subscription menuOperationSubscription;
- @Override
- protected void onCreate(Bundle savedState) {
- super.onCreate(savedState);
- restartableLatestCache(DB_CHAPTERS,
- this::getDbChaptersObs,
- (view, chapters) -> {
- view.onNextChapters(chapters);
- EventBus.getDefault().postSticky( new ChapterCountEvent(chapters.size()) );
- }
- );
- restartableLatestCache(ONLINE_CHAPTERS,
- this::getOnlineChaptersObs,
- (view, result) -> view.onNextOnlineChapters()
- );
- }
- @Override
- protected void onTakeView(MangaChaptersFragment view) {
- super.onTakeView(view);
- registerForStickyEvents();
- }
- @Override
- protected void onDropView() {
- unregisterForEvents();
- super.onDropView();
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- EventBus.getDefault().removeStickyEvent(ChapterCountEvent.class);
- }
- @EventBusHook
- public void onEventMainThread(Manga manga) {
- if (this.manga == null) {
- this.manga = manga;
- source = sourceManager.get(manga.source);
- start(DB_CHAPTERS);
- // Get chapters if it's an online source
- if (getView() != null && getView().isOnlineManga()) {
- refreshChapters();
- }
- }
- }
- public void refreshChapters() {
- if (getView() != null)
- getView().setSwipeRefreshing();
- start(ONLINE_CHAPTERS);
- }
- private Observable<List<Chapter>> getDbChaptersObs() {
- return db.getChapters(manga.id)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread());
- }
- private Observable<PostResult> getOnlineChaptersObs() {
- return source
- .pullChaptersFromNetwork(manga.url)
- .subscribeOn(Schedulers.io())
- .flatMap(chapters -> db.insertOrRemoveChapters(manga, chapters))
- .observeOn(AndroidSchedulers.mainThread());
- }
- public void onChapterClicked(Chapter chapter) {
- EventBus.getDefault().postSticky(new SourceChapterEvent(source, chapter));
- }
- public void markChaptersRead(Observable<Chapter> selectedChapters, boolean read) {
- if (menuOperationSubscription != null)
- remove(menuOperationSubscription);
- add(menuOperationSubscription = selectedChapters
- .subscribeOn(Schedulers.io())
- .map(chapter -> {
- chapter.read = read;
- return chapter;
- })
- .toList()
- .flatMap(db::insertChapters)
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(result -> {
- }));
- }
- }
|