123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- package eu.kanade.mangafeed.ui.library;
- import android.os.Bundle;
- import android.util.Pair;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import javax.inject.Inject;
- import de.greenrobot.event.EventBus;
- import eu.kanade.mangafeed.data.cache.CoverCache;
- import eu.kanade.mangafeed.data.database.DatabaseHelper;
- import eu.kanade.mangafeed.data.database.models.Category;
- import eu.kanade.mangafeed.data.database.models.Manga;
- import eu.kanade.mangafeed.data.database.models.MangaCategory;
- import eu.kanade.mangafeed.data.preference.PreferencesHelper;
- import eu.kanade.mangafeed.data.source.SourceManager;
- import eu.kanade.mangafeed.event.LibraryMangasEvent;
- import eu.kanade.mangafeed.ui.base.presenter.BasePresenter;
- import rx.Observable;
- import rx.android.schedulers.AndroidSchedulers;
- public class LibraryPresenter extends BasePresenter<LibraryFragment> {
- @Inject DatabaseHelper db;
- @Inject PreferencesHelper preferences;
- @Inject CoverCache coverCache;
- @Inject SourceManager sourceManager;
- protected List<Category> categories;
- protected List<Manga> selectedMangas;
- private static final int GET_LIBRARY = 1;
- @Override
- protected void onCreate(Bundle savedState) {
- super.onCreate(savedState);
- selectedMangas = new ArrayList<>();
- restartableLatestCache(GET_LIBRARY,
- this::getLibraryObservable,
- (view, pair) -> view.onNextLibraryUpdate(pair.first, pair.second));
- start(GET_LIBRARY);
- }
- @Override
- protected void onDestroy() {
- EventBus.getDefault().removeStickyEvent(LibraryMangasEvent.class);
- super.onDestroy();
- }
- @Override
- protected void onTakeView(LibraryFragment libraryFragment) {
- super.onTakeView(libraryFragment);
- if (!isSubscribed(GET_LIBRARY)) {
- start(GET_LIBRARY);
- }
- }
- private Observable<Pair<List<Category>, Map<Integer, List<Manga>>>> getLibraryObservable() {
- return Observable.combineLatest(getCategoriesObservable(), getLibraryMangasObservable(),
- Pair::create)
- .observeOn(AndroidSchedulers.mainThread());
- }
- private Observable<List<Category>> getCategoriesObservable() {
- return db.getCategories().createObservable()
- .doOnNext(categories -> this.categories = categories);
- }
- private Observable<Map<Integer, List<Manga>>> getLibraryMangasObservable() {
- return db.getLibraryMangas().createObservable()
- .flatMap(mangas -> Observable.from(mangas)
- .groupBy(manga -> manga.category)
- .flatMap(group -> group.toList()
- .map(list -> Pair.create(group.getKey(), list)))
- .toMap(pair -> pair.first, pair -> pair.second));
- }
- public void onOpenManga(Manga manga) {
- // Avoid further db updates for the library when it's not needed
- stop(GET_LIBRARY);
- }
- public void setSelection(Manga manga, boolean selected) {
- if (selected) {
- selectedMangas.add(manga);
- } else {
- selectedMangas.remove(manga);
- }
- }
- public String[] getCategoriesNames() {
- int count = categories.size();
- String[] names = new String[count];
- for (int i = 0; i < count; i++) {
- names[i] = categories.get(i).name;
- }
- return names;
- }
- public void deleteMangas() {
- for (Manga manga : selectedMangas) {
- manga.favorite = false;
- }
- db.insertMangas(selectedMangas).executeAsBlocking();
- }
- public void moveMangasToCategories(Integer[] positions, List<Manga> mangas) {
- List<Category> categoriesToAdd = new ArrayList<>();
- for (Integer index : positions) {
- categoriesToAdd.add(categories.get(index));
- }
- moveMangasToCategories(categoriesToAdd, mangas);
- }
- public void moveMangasToCategories(List<Category> categories, List<Manga> mangas) {
- List<MangaCategory> mc = new ArrayList<>();
- for (Manga manga : mangas) {
- for (Category cat : categories) {
- mc.add(MangaCategory.create(manga, cat));
- }
- }
- db.setMangaCategories(mc, mangas);
- }
- }
|