|
|
|
@ -2,6 +2,8 @@ package eu.kanade.mangafeed.presenter;
|
|
|
|
|
|
|
|
|
|
import android.content.Intent;
|
|
|
|
|
|
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
|
|
import javax.inject.Inject;
|
|
|
|
|
|
|
|
|
|
import eu.kanade.mangafeed.App;
|
|
|
|
@ -15,6 +17,8 @@ import rx.Observable;
|
|
|
|
|
import rx.Subscription;
|
|
|
|
|
import rx.android.schedulers.AndroidSchedulers;
|
|
|
|
|
import rx.schedulers.Schedulers;
|
|
|
|
|
import rx.subjects.PublishSubject;
|
|
|
|
|
import timber.log.Timber;
|
|
|
|
|
import uk.co.ribot.easyadapter.EasyAdapter;
|
|
|
|
|
|
|
|
|
|
public class CatalogueListPresenter extends BasePresenter {
|
|
|
|
@ -26,7 +30,13 @@ public class CatalogueListPresenter extends BasePresenter {
|
|
|
|
|
@Inject SourceManager sourceManager;
|
|
|
|
|
@Inject DatabaseHelper db;
|
|
|
|
|
|
|
|
|
|
private String mSearchName;
|
|
|
|
|
private final int SEARCH_TIMEOUT = 1000;
|
|
|
|
|
|
|
|
|
|
private Subscription mMangaFetchSubscription;
|
|
|
|
|
private Subscription mMangaSearchSubscription;
|
|
|
|
|
private Subscription mSearchViewSubscription;
|
|
|
|
|
private PublishSubject<Observable<String>> mSearchViewPublishSubject;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public CatalogueListPresenter(CatalogueListView view) {
|
|
|
|
@ -37,12 +47,14 @@ public class CatalogueListPresenter extends BasePresenter {
|
|
|
|
|
public void initialize() {
|
|
|
|
|
int sourceId = view.getIntent().getIntExtra(Intent.EXTRA_UID, -1);
|
|
|
|
|
selectedSource = sourceManager.get(sourceId);
|
|
|
|
|
view.setSource(selectedSource);
|
|
|
|
|
view.setSourceTitle(selectedSource.getName());
|
|
|
|
|
|
|
|
|
|
adapter = new EasyAdapter<>(view.getActivity(), CatalogueListHolder.class);
|
|
|
|
|
view.setAdapter(adapter);
|
|
|
|
|
view.setScrollListener();
|
|
|
|
|
|
|
|
|
|
initializeSearch();
|
|
|
|
|
|
|
|
|
|
getMangasFromSource(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -60,6 +72,14 @@ public class CatalogueListPresenter extends BasePresenter {
|
|
|
|
|
subscriptions.add(mMangaFetchSubscription);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void getMangasFromSearch(int page) {
|
|
|
|
|
subscriptions.remove(mMangaSearchSubscription);
|
|
|
|
|
|
|
|
|
|
// TODO fetch mangas from source
|
|
|
|
|
|
|
|
|
|
subscriptions.add(mMangaSearchSubscription);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Manga networkToLocalManga(Manga networkManga) {
|
|
|
|
|
Manga localManga = db.getMangaBlock(networkManga.url);
|
|
|
|
|
if (localManga == null) {
|
|
|
|
@ -69,4 +89,43 @@ public class CatalogueListPresenter extends BasePresenter {
|
|
|
|
|
return localManga;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void onQueryTextChange(String query) {
|
|
|
|
|
if (mSearchViewPublishSubject != null)
|
|
|
|
|
mSearchViewPublishSubject.onNext(Observable.just(query));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void initializeSearch() {
|
|
|
|
|
mSearchViewPublishSubject = PublishSubject.create();
|
|
|
|
|
mSearchViewSubscription = Observable.switchOnNext(mSearchViewPublishSubject)
|
|
|
|
|
.debounce(SEARCH_TIMEOUT, TimeUnit.MILLISECONDS)
|
|
|
|
|
.subscribeOn(Schedulers.io())
|
|
|
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
|
|
|
.subscribe(
|
|
|
|
|
this::queryFromSearch,
|
|
|
|
|
error -> Timber.e(error.getCause(), error.getMessage()));
|
|
|
|
|
|
|
|
|
|
subscriptions.add(mSearchViewSubscription);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void queryFromSearch(String query) {
|
|
|
|
|
mSearchName = query;
|
|
|
|
|
if (!isSearchMode()) {
|
|
|
|
|
getMangasFromSource(1);
|
|
|
|
|
} else {
|
|
|
|
|
getMangasFromSearch(1);
|
|
|
|
|
}
|
|
|
|
|
view.setScrollListener();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void loadMoreMangas(int page) {
|
|
|
|
|
if (!isSearchMode()) {
|
|
|
|
|
getMangasFromSource(page);
|
|
|
|
|
} else {
|
|
|
|
|
getMangasFromSearch(page);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean isSearchMode() {
|
|
|
|
|
return !mSearchName.equals("");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|