From c4c6e41c46f38602578af9b0fa36c037482252da Mon Sep 17 00:00:00 2001 From: arkon Date: Sat, 7 Jan 2023 10:32:14 -0500 Subject: [PATCH] Fix downloaded badges appearing when filtering by downloaded Fixes #8850 --- .../ui/library/LibraryScreenModel.kt | 52 ++++++++----------- 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt index 29ca0a6ff3..eb9d799692 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt @@ -96,7 +96,8 @@ class LibraryScreenModel( getLibraryFlow(), getTracksPerManga.subscribe(), getTrackingFilterFlow(), - ) { searchQuery, library, tracks, loggedInTrackServices -> + downloadCache.changes, + ) { searchQuery, library, tracks, loggedInTrackServices, _ -> library .applyFilters(tracks, loggedInTrackServices) .applySort() @@ -180,14 +181,12 @@ class LibraryScreenModel( val includedTracks = loggedInTrackServices.mapNotNull { if (it.value == TriStateGroup.State.INCLUDE.value) it.key else null } val trackFiltersIsIgnored = includedTracks.isEmpty() && excludedTracks.isEmpty() - val filterFnDownloaded: (LibraryItem) -> Boolean = downloaded@{ item -> + val filterFnDownloaded: (LibraryItem) -> Boolean = downloaded@{ if (!downloadedOnly && filterDownloaded == TriStateGroup.State.IGNORE.value) return@downloaded true - val isDownloaded = when { - item.libraryManga.manga.isLocal() -> true - item.downloadCount != -1L -> item.downloadCount > 0 - else -> downloadManager.getDownloadCount(item.libraryManga.manga) > 0 - } + val isDownloaded = it.libraryManga.manga.isLocal() || + it.downloadCount > 0 || + downloadManager.getDownloadCount(it.libraryManga.manga) > 0 return@downloaded if (downloadedOnly || filterDownloaded == TriStateGroup.State.INCLUDE.value) { isDownloaded } else { @@ -195,10 +194,10 @@ class LibraryScreenModel( } } - val filterFnUnread: (LibraryItem) -> Boolean = unread@{ item -> + val filterFnUnread: (LibraryItem) -> Boolean = unread@{ if (filterUnread == TriStateGroup.State.IGNORE.value) return@unread true - val isUnread = item.libraryManga.unreadCount > 0 + val isUnread = it.libraryManga.unreadCount > 0 return@unread if (filterUnread == TriStateGroup.State.INCLUDE.value) { isUnread } else { @@ -206,10 +205,10 @@ class LibraryScreenModel( } } - val filterFnStarted: (LibraryItem) -> Boolean = started@{ item -> + val filterFnStarted: (LibraryItem) -> Boolean = started@{ if (filterStarted == TriStateGroup.State.IGNORE.value) return@started true - val hasStarted = item.libraryManga.hasStarted + val hasStarted = it.libraryManga.hasStarted return@started if (filterStarted == TriStateGroup.State.INCLUDE.value) { hasStarted } else { @@ -217,11 +216,10 @@ class LibraryScreenModel( } } - val filterFnBookmarked: (LibraryItem) -> Boolean = bookmarked@{ item -> + val filterFnBookmarked: (LibraryItem) -> Boolean = bookmarked@{ if (filterBookmarked == TriStateGroup.State.IGNORE.value) return@bookmarked true - val hasBookmarks = item.libraryManga.hasBookmarks - + val hasBookmarks = it.libraryManga.hasBookmarks return@bookmarked if (filterBookmarked == TriStateGroup.State.INCLUDE.value) { hasBookmarks } else { @@ -229,10 +227,10 @@ class LibraryScreenModel( } } - val filterFnCompleted: (LibraryItem) -> Boolean = completed@{ item -> + val filterFnCompleted: (LibraryItem) -> Boolean = completed@{ if (filterCompleted == TriStateGroup.State.IGNORE.value) return@completed true - val isCompleted = item.libraryManga.manga.status.toInt() == SManga.COMPLETED + val isCompleted = it.libraryManga.manga.status.toInt() == SManga.COMPLETED return@completed if (filterCompleted == TriStateGroup.State.INCLUDE.value) { isCompleted } else { @@ -260,14 +258,14 @@ class LibraryScreenModel( return@tracking false } - val filterFn: (LibraryItem) -> Boolean = filter@{ item -> + val filterFn: (LibraryItem) -> Boolean = filter@{ return@filter !( - !filterFnDownloaded(item) || - !filterFnUnread(item) || - !filterFnStarted(item) || - !filterFnBookmarked(item) || - !filterFnCompleted(item) || - !filterFnTracking(item) + !filterFnDownloaded(it) || + !filterFnUnread(it) || + !filterFnStarted(it) || + !filterFnBookmarked(it) || + !filterFnCompleted(it) || + !filterFnTracking(it) ) } @@ -363,8 +361,6 @@ class LibraryScreenModel( /** * Get the categories and all its manga from the database. - * - * @return an observable of the categories and its manga. */ private fun getLibraryFlow(): Flow { val libraryMangasFlow = combine( @@ -374,13 +370,9 @@ class LibraryScreenModel( ) { libraryMangaList, prefs, _ -> libraryMangaList .map { libraryManga -> - val needsDownloadCounts = prefs.downloadBadge || - prefs.filterDownloaded != TriStateGroup.State.IGNORE.value || - prefs.globalFilterDownloaded - // Display mode based on user preference: take it from global library setting or category LibraryItem(libraryManga).apply { - downloadCount = if (needsDownloadCounts) { + downloadCount = if (prefs.downloadBadge) { downloadManager.getDownloadCount(libraryManga.manga).toLong() } else { 0