Fix wrong manga received through EventBus

This commit is contained in:
inorichi
2015-10-19 23:54:19 +02:00
parent 0c77a7034a
commit 49c69be38e
5 changed files with 60 additions and 33 deletions
@@ -39,7 +39,7 @@ public class MangaChaptersPresenter extends BasePresenter<MangaChaptersFragment>
this::getDbChaptersObs,
(view, chapters) -> {
view.onNextChapters(chapters);
EventBus.getDefault().postSticky(new ChapterCountEvent(chapters.size()));
EventBus.getDefault().postSticky( new ChapterCountEvent(chapters.size()) );
}
);
@@ -61,19 +61,30 @@ public class MangaChaptersPresenter extends BasePresenter<MangaChaptersFragment>
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;
start(DB_CHAPTERS);
// Get chapters if it's an online source
if (getView() != null && getView().isOnlineManga()) {
refreshChapters();
}
}
}
public void refreshChapters(MangaChaptersFragment view) {
if (manga != null) {
view.setSwipeRefreshing();
start(ONLINE_CHAPTERS);
}
public void refreshChapters() {
if (getView() != null)
getView().setSwipeRefreshing();
start(ONLINE_CHAPTERS);
}
private Observable<List<Chapter>> getDbChaptersObs() {
@@ -89,4 +100,5 @@ public class MangaChaptersPresenter extends BasePresenter<MangaChaptersFragment>
.flatMap(chapters -> db.insertOrRemoveChapters(manga, chapters))
.observeOn(AndroidSchedulers.mainThread());
}
}
@@ -1,5 +1,7 @@
package eu.kanade.mangafeed.presenter;
import android.os.Bundle;
import javax.inject.Inject;
import de.greenrobot.event.EventBus;
@@ -7,7 +9,6 @@ import eu.kanade.mangafeed.data.helpers.DatabaseHelper;
import eu.kanade.mangafeed.data.models.Manga;
import eu.kanade.mangafeed.ui.activity.MangaDetailActivity;
import rx.Observable;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
@@ -15,32 +16,39 @@ public class MangaDetailPresenter extends BasePresenter<MangaDetailActivity> {
@Inject DatabaseHelper db;
private Manga manga;
private Subscription mangaSubscription;
private long mangaId;
private static final int DB_MANGA = 1;
@Override
protected void onTakeView(MangaDetailActivity view) {
super.onTakeView(view);
if (manga != null)
view.setManga(manga);
protected void onCreate(Bundle savedState) {
super.onCreate(savedState);
getManga(view);
restartableLatestCache(DB_MANGA,
this::getDbMangaObservable,
(view, manga) -> {
view.setManga(manga);
EventBus.getDefault().postSticky(manga);
});
}
private void getManga(MangaDetailActivity view) {
if (mangaSubscription != null)
return;
@Override
protected void onDestroy() {
super.onDestroy();
// Avoid fragments receiving wrong manga
EventBus.getDefault().removeStickyEvent(Manga.class);
}
add(mangaSubscription = db.getManga(view.getMangaId())
private Observable<Manga> getDbMangaObservable() {
return db.getManga(mangaId)
.subscribeOn(Schedulers.io())
.take(1)
.flatMap(Observable::from)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(manga -> {
this.manga = manga;
view.setManga(manga);
EventBus.getDefault().postSticky(manga);
}));
.observeOn(AndroidSchedulers.mainThread());
}
public void queryManga(long mangaId) {
this.mangaId = mangaId;
start(DB_MANGA);
}
}
@@ -10,9 +10,6 @@ import eu.kanade.mangafeed.ui.fragment.MangaInfoFragment;
import eu.kanade.mangafeed.util.EventBusHook;
import eu.kanade.mangafeed.util.events.ChapterCountEvent;
import rx.Observable;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import timber.log.Timber;
public class MangaInfoPresenter extends BasePresenter<MangaInfoFragment> {
@@ -52,10 +49,8 @@ public class MangaInfoPresenter extends BasePresenter<MangaInfoFragment> {
@EventBusHook
public void onEventMainThread(Manga manga) {
if (!manga.equals(this.manga)) {
this.manga = manga;
start(GET_MANGA);
}
this.manga = manga;
start(GET_MANGA);
}
@EventBusHook