mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +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();
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								app/src/main/res/menu/catalogue_list.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								app/src/main/res/menu/catalogue_list.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
    xmlns:app="http://schemas.android.com/apk/res-auto"
 | 
			
		||||
    xmlns:tools="http://schemas.android.com/tools" tools:context=".CatalogueListActivity">
 | 
			
		||||
    <item
 | 
			
		||||
        android:id="@+id/action_search"
 | 
			
		||||
        android:title="@string/action_search"
 | 
			
		||||
        android:icon="@drawable/ic_action_search"
 | 
			
		||||
        android:orderInCategory="100"
 | 
			
		||||
        app:showAsAction="collapseActionView|ifRoom"
 | 
			
		||||
        app:actionViewClass="android.support.v7.widget.SearchView"/>
 | 
			
		||||
</menu>
 | 
			
		||||
		Reference in New Issue
	
	Block a user