mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Fix downloaded badges appearing when filtering by downloaded
Fixes #8850
This commit is contained in:
		@@ -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<LibraryMap> {
 | 
			
		||||
        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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user