mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Add filter by downloaded chapter. When searching manga by URL, also check the source
This commit is contained in:
		| @@ -108,13 +108,13 @@ public class DatabaseHelper { | ||||
|                 .prepare(); | ||||
|     } | ||||
|  | ||||
|     public PreparedGetListOfObjects<Manga> getManga(String url) { | ||||
|     public PreparedGetListOfObjects<Manga> getManga(String url, int sourceId) { | ||||
|         return db.get() | ||||
|                 .listOfObjects(Manga.class) | ||||
|                 .withQuery(Query.builder() | ||||
|                         .table(MangaTable.TABLE) | ||||
|                         .where(MangaTable.COLUMN_URL + "=?") | ||||
|                         .whereArgs(url) | ||||
|                         .where(MangaTable.COLUMN_URL + "=? AND " + MangaTable.COLUMN_SOURCE + "=?") | ||||
|                         .whereArgs(url, sourceId) | ||||
|                         .build()) | ||||
|                 .prepare(); | ||||
|     } | ||||
|   | ||||
| @@ -137,7 +137,7 @@ public class CataloguePresenter extends BasePresenter<CatalogueFragment> { | ||||
|     } | ||||
|  | ||||
|     private Manga networkToLocalManga(Manga networkManga) { | ||||
|         List<Manga> dbResult = db.getManga(networkManga.url).executeAsBlocking(); | ||||
|         List<Manga> dbResult = db.getManga(networkManga.url, selectedSource.getSourceId()).executeAsBlocking(); | ||||
|         Manga localManga = !dbResult.isEmpty() ? dbResult.get(0) : null; | ||||
|         if (localManga == null) { | ||||
|             PutResult result = db.insertManga(networkManga).executeAsBlocking(); | ||||
|   | ||||
| @@ -79,11 +79,15 @@ public class ChaptersFragment extends BaseRxFragment<ChaptersPresenter> implemen | ||||
|  | ||||
|         // Set initial values | ||||
|         setReadFilter(); | ||||
|         setDownloadedFilter(); | ||||
|         setSortIcon(); | ||||
|  | ||||
|         // Init listeners | ||||
|         swipeRefresh.setOnRefreshListener(this::onFetchChapters); | ||||
|         readCb.setOnCheckedChangeListener((arg, isChecked) -> getPresenter().setReadFilter(isChecked)); | ||||
|         readCb.setOnCheckedChangeListener((arg, isChecked) -> | ||||
|                 getPresenter().setReadFilter(isChecked)); | ||||
|         downloadedCb.setOnCheckedChangeListener((v, isChecked) -> | ||||
|                 getPresenter().setDownloadedFilter(isChecked)); | ||||
|         sortBtn.setOnClickListener(v -> { | ||||
|             getPresenter().revertSortOrder(); | ||||
|             setSortIcon(); | ||||
| @@ -294,4 +298,11 @@ public class ChaptersFragment extends BaseRxFragment<ChaptersPresenter> implemen | ||||
|             readCb.setChecked(getPresenter().getReadFilter()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setDownloadedFilter() { | ||||
|         if (downloadedCb != null) { | ||||
|             downloadedCb.setChecked(getPresenter().getDownloadedFilter()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -37,6 +37,7 @@ public class ChaptersPresenter extends BasePresenter<ChaptersFragment> { | ||||
|     private boolean isCatalogueManga; | ||||
|     private boolean sortOrderAToZ = true; | ||||
|     private boolean onlyUnread = true; | ||||
|     private boolean onlyDownloaded; | ||||
|  | ||||
|     private static final int DB_CHAPTERS = 1; | ||||
|     private static final int FETCH_CHAPTERS = 2; | ||||
| @@ -98,6 +99,7 @@ public class ChaptersPresenter extends BasePresenter<ChaptersFragment> { | ||||
|     private Observable<List<Chapter>> getDbChaptersObs() { | ||||
|         return db.getChapters(manga.id, sortOrderAToZ, onlyUnread).createObservable() | ||||
|                 .doOnNext(this::checkChaptersStatus) | ||||
|                 .flatMap(this::applyDownloadedFilter) | ||||
|                 .subscribeOn(Schedulers.io()) | ||||
|                 .observeOn(AndroidSchedulers.mainThread()); | ||||
|     } | ||||
| @@ -152,7 +154,6 @@ public class ChaptersPresenter extends BasePresenter<ChaptersFragment> { | ||||
|                 })); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     private void checkChaptersStatus(List<Chapter> chapters) { | ||||
|         for (Chapter chapter : chapters) { | ||||
|             checkIsChapterDownloaded(chapter); | ||||
| @@ -174,6 +175,15 @@ public class ChaptersPresenter extends BasePresenter<ChaptersFragment> { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private Observable<List<Chapter>> applyDownloadedFilter(List<Chapter> chapters) { | ||||
|         if (onlyDownloaded) | ||||
|             return Observable.from(chapters) | ||||
|                     .filter(chapter -> chapter.status == Download.DOWNLOADED) | ||||
|                     .toList(); | ||||
|  | ||||
|         return Observable.just(chapters); | ||||
|     } | ||||
|  | ||||
|     public void revertSortOrder() { | ||||
|         //TODO manga.chapter_order | ||||
|         sortOrderAToZ = !sortOrderAToZ; | ||||
| @@ -186,6 +196,11 @@ public class ChaptersPresenter extends BasePresenter<ChaptersFragment> { | ||||
|         start(DB_CHAPTERS); | ||||
|     } | ||||
|  | ||||
|     public void setDownloadedFilter(boolean onlyDownloaded) { | ||||
|         this.onlyDownloaded = onlyDownloaded; | ||||
|         start(DB_CHAPTERS); | ||||
|     } | ||||
|  | ||||
|     public void setIsCatalogueManga(boolean value) { | ||||
|         isCatalogueManga = value; | ||||
|     } | ||||
| @@ -198,7 +213,12 @@ public class ChaptersPresenter extends BasePresenter<ChaptersFragment> { | ||||
|         return onlyUnread; | ||||
|     } | ||||
|  | ||||
|     public boolean getDownloadedFilter() { | ||||
|         return onlyDownloaded; | ||||
|     } | ||||
|  | ||||
|     public Manga getManga() { | ||||
|         return manga; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user