From a424282840936c826a043aa14bb65b2e1c6e4713 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Mon, 19 Oct 2026 00:22:39 +0600 Subject: [PATCH] Fix covers reloading when removing manga from library --- CHANGELOG.md | 3 +++ .../kanade/tachiyomi/data/coil/MangaCoverFetcher.kt | 4 ++-- .../eu/kanade/tachiyomi/data/coil/MangaCoverKeyer.kt | 4 ++-- .../ui/browse/source/browse/BrowseSourceViewModel.kt | 7 ++----- .../eu/kanade/tachiyomi/ui/manga/MangaViewModel.kt | 5 +---- .../java/eu/kanade/tachiyomi/util/MangaExtensions.kt | 11 +++-------- 6 files changed, 13 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 423592307..f7f80189f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,9 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - Remove "Custom hardware bitmap threshold" and "Custom display profile" advanced settings ([@wwww-wwww](https://github.com/wwww-wwww)) ([#3786](https://github.com/mihonapp/mihon/pull/3786)) - Remove the "Split tall images" download setting ([@AntsyLich](https://github.com/AntsyLich)) +### Fixed +- Fixed covers reloading when removing an entry from the library ([@AntsyLich](https://github.com/AntsyLich)) + ## [v0.21.2] - 2026-10-13 ### Fixed - Fix long floating point numbers showing up in Comick progress ([@MajorTanya](https://github.com/MajorTanya)) ([#4090](https://github.com/mihonapp/mihon/pull/4090)) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverFetcher.kt b/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverFetcher.kt index 00a364a45..038e1a2cb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverFetcher.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverFetcher.kt @@ -60,9 +60,9 @@ class MangaCoverFetcher( get() = diskCacheKeyLazy.value override suspend fun fetch(): FetchResult { - // Use custom cover if exists + // Use custom cover if exists, which only library manga can have val useCustomCover = options.extras.getOrDefault(USE_CUSTOM_COVER_KEY) - if (useCustomCover) { + if (useCustomCover && isLibraryManga) { val customCoverFile = customCoverFileLazy.value if (customCoverFile.exists()) { return fileLoader(customCoverFile) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverKeyer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverKeyer.kt index 61a30978a..28cf44482 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverKeyer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverKeyer.kt @@ -9,7 +9,7 @@ import tachiyomi.domain.manga.model.Manga as DomainManga class MangaKeyer : Keyer { override fun key(data: DomainManga, options: Options): String { - return if (data.hasCustomCover()) { + return if (data.favorite && data.hasCustomCover()) { "${data.id};${data.coverLastModified}" } else { "${data.thumbnailUrl};${data.coverLastModified}" @@ -21,7 +21,7 @@ class MangaCoverKeyer( private val coverCache: CoverCache, ) : Keyer { override fun key(data: MangaCover, options: Options): String { - return if (coverCache.hasCustomCover(data.mangaId)) { + return if (data.isMangaFavorite && coverCache.hasCustomCover(data.mangaId)) { "${data.mangaId};${data.lastModified}" } else { "${data.url};${data.lastModified}" diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceViewModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceViewModel.kt index 7d080a72b..74e59e116 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceViewModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceViewModel.kt @@ -239,11 +239,8 @@ class BrowseSourceViewModel( fun changeMangaFavorite(manga: Manga) { appScope.launch { val update = if (manga.favorite) { - val coverLastModified = manga.removeCovers(coverCache).coverLastModified - MangaUpdate(manga.id) { - favoriteAt = null - if (coverLastModified != manga.coverLastModified) this.coverLastModified = coverLastModified - } + manga.removeCovers(coverCache) + MangaUpdate(manga.id) { favoriteAt = null } } else { setMangaDefaultChapterFlags.await(manga) addTracks.bindEnhancedTrackers(manga, sourceManager.getOrStub(manga.source)) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaViewModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaViewModel.kt index 85f6bc488..64d32d0b3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaViewModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaViewModel.kt @@ -414,10 +414,7 @@ class MangaViewModel( if (isFavorited) { // Remove from library if (updateManga.awaitUpdateFavorite(manga.id, false)) { - // Remove covers and update last modified in db - if (manga.removeCovers(coverCache) != manga) { - updateManga.awaitUpdateCoverLastModified(manga.id) - } + manga.removeCovers(coverCache) onRemoved() } } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt index 3a754b100..28a5fe1f9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt @@ -7,15 +7,10 @@ import tachiyomi.domain.manga.model.Manga import tachiyomi.source.local.image.LocalCoverManager import tachiyomi.source.local.isLocal import java.io.InputStream -import kotlin.time.Clock -fun Manga.removeCovers(coverCache: CoverCache): Manga { - if (isLocal()) return this - return if (coverCache.deleteFromCache(this, true) > 0) { - copy(coverLastModified = Clock.System.now()) - } else { - this - } +fun Manga.removeCovers(coverCache: CoverCache) { + if (isLocal()) return + coverCache.deleteFromCache(this, true) } suspend fun Manga.editCover(