mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Get mangas from search first steps
This commit is contained in:
		| @@ -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); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,14 +1,15 @@ | ||||
| package eu.kanade.mangafeed.ui.activity; | ||||
|  | ||||
| import android.os.Bundle; | ||||
| import android.support.v7.widget.SearchView; | ||||
| import android.support.v7.widget.Toolbar; | ||||
| import android.view.Menu; | ||||
| import android.widget.ListView; | ||||
|  | ||||
| import butterknife.Bind; | ||||
| import butterknife.ButterKnife; | ||||
| import eu.kanade.mangafeed.R; | ||||
| import eu.kanade.mangafeed.presenter.CatalogueListPresenter; | ||||
| import eu.kanade.mangafeed.sources.Source; | ||||
| import eu.kanade.mangafeed.view.CatalogueListView; | ||||
| import eu.kanade.mangafeed.widget.EndlessScrollListener; | ||||
| import uk.co.ribot.easyadapter.EasyAdapter; | ||||
| @@ -22,7 +23,6 @@ public class CatalogueListActivity extends BaseActivity implements CatalogueList | ||||
|     ListView manga_list; | ||||
|  | ||||
|     private CatalogueListPresenter presenter; | ||||
|     private Source source; | ||||
|  | ||||
|     @Override | ||||
|     public void onCreate(Bundle savedInstanceState) { | ||||
| @@ -42,9 +42,32 @@ public class CatalogueListActivity extends BaseActivity implements CatalogueList | ||||
|         presenter.destroySubscriptions(); | ||||
|     } | ||||
|  | ||||
|     public void setSource(Source source) { | ||||
|         this.source = source; | ||||
|         setToolbarTitle(source.getName()); | ||||
|     @Override | ||||
|     public boolean onCreateOptionsMenu(Menu menu) { | ||||
|         getMenuInflater().inflate(R.menu.catalogue_list, menu); | ||||
|         initializeSearch(menu); | ||||
|         return super.onCreateOptionsMenu(menu); | ||||
|     } | ||||
|  | ||||
|     private void initializeSearch(Menu menu) { | ||||
|         final SearchView sv = (SearchView) menu.findItem(R.id.action_search).getActionView(); | ||||
|         sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { | ||||
|             @Override | ||||
|             public boolean onQueryTextSubmit(String query) { | ||||
|                 presenter.onQueryTextChange(query); | ||||
|                 return true; | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             public boolean onQueryTextChange(String newText) { | ||||
|                 presenter.onQueryTextChange(newText); | ||||
|                 return true; | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     public void setSourceTitle(String title) { | ||||
|         setToolbarTitle(title); | ||||
|     } | ||||
|  | ||||
|     public void setAdapter(EasyAdapter adapter) { | ||||
| @@ -55,7 +78,7 @@ public class CatalogueListActivity extends BaseActivity implements CatalogueList | ||||
|         manga_list.setOnScrollListener(new EndlessScrollListener() { | ||||
|             @Override | ||||
|             public boolean onLoadMore(int page, int totalItemsCount) { | ||||
|                 presenter.getMangasFromSource(page); | ||||
|                 presenter.loadMoreMangas(page); | ||||
|                 return true; | ||||
|             } | ||||
|         }); | ||||
|   | ||||
| @@ -1,9 +1,7 @@ | ||||
| package eu.kanade.mangafeed.view; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
|  | ||||
| public interface BaseView { | ||||
|     Context getActivity(); | ||||
|     void startActivity(Intent intent); | ||||
| } | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import uk.co.ribot.easyadapter.EasyAdapter; | ||||
|  | ||||
| public interface CatalogueListView extends BaseView { | ||||
|     Intent getIntent(); | ||||
|     void setSource(Source source); | ||||
|     void setSourceTitle(String title); | ||||
|     void setAdapter(EasyAdapter adapter); | ||||
|     void setScrollListener(); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user