LibraryPresenter.java 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package eu.kanade.mangafeed.ui.library;
  2. import android.os.Bundle;
  3. import android.util.Pair;
  4. import java.util.List;
  5. import java.util.Map;
  6. import javax.inject.Inject;
  7. import de.greenrobot.event.EventBus;
  8. import eu.kanade.mangafeed.data.cache.CoverCache;
  9. import eu.kanade.mangafeed.data.database.DatabaseHelper;
  10. import eu.kanade.mangafeed.data.database.models.Manga;
  11. import eu.kanade.mangafeed.data.preference.PreferencesHelper;
  12. import eu.kanade.mangafeed.data.source.SourceManager;
  13. import eu.kanade.mangafeed.event.LibraryMangasEvent;
  14. import eu.kanade.mangafeed.ui.base.presenter.BasePresenter;
  15. import rx.Observable;
  16. import rx.schedulers.Schedulers;
  17. public class LibraryPresenter extends BasePresenter<LibraryFragment> {
  18. @Inject DatabaseHelper db;
  19. @Inject PreferencesHelper prefs;
  20. @Inject CoverCache coverCache;
  21. @Inject SourceManager sourceManager;
  22. private static final int GET_CATEGORIES = 1;
  23. @Override
  24. protected void onCreate(Bundle savedState) {
  25. super.onCreate(savedState);
  26. restartableLatestCache(GET_CATEGORIES,
  27. () -> db.getCategories().createObservable(),
  28. LibraryFragment::onNextCategories);
  29. start(GET_CATEGORIES);
  30. add(getLibraryMangasObservable()
  31. .subscribe(mangas ->
  32. EventBus.getDefault().postSticky(new LibraryMangasEvent(mangas))));
  33. }
  34. public Observable<Map<Integer, List<Manga>>> getLibraryMangasObservable() {
  35. return db.getLibraryMangas().createObservable()
  36. .flatMap(mangas -> Observable.from(mangas)
  37. .groupBy(manga -> manga.category)
  38. .flatMap(group -> group.toList()
  39. .map(list -> Pair.create(group.getKey(), list)))
  40. .toMap(pair -> pair.first, pair -> pair.second));
  41. }
  42. public void deleteMangas(Observable<Manga> selectedMangas) {
  43. add(selectedMangas
  44. .subscribeOn(Schedulers.io())
  45. .doOnNext(manga -> manga.favorite = false)
  46. .toList()
  47. .flatMap(mangas -> db.insertMangas(mangas).createObservable())
  48. .subscribe());
  49. }
  50. }