Get mangas from search first steps

This commit is contained in:
inorichi
2015-10-12 23:00:55 +02:00
parent 38da2ba35b
commit 66ab8caf76
6 changed files with 102 additions and 11 deletions
@@ -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("");
}
}
@@ -39,6 +39,6 @@ public class CataloguePresenter {
public void onSourceClick(int position) {
Intent intent = new Intent(view.getActivity(), CatalogueListActivity.class);
intent.putExtra(Intent.EXTRA_UID, adapter.getItem(position).getSource());
view.startActivity(intent);
view.getActivity().startActivity(intent);
}
}