mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	* update cover logic when thumbnail url becomes null * always clear cover on refresh even if custom cover is set * remove concurrency changes
This commit is contained in:
		| @@ -396,9 +396,7 @@ class LibraryUpdateService( | ||||
|         // Update manga details metadata in the background | ||||
|         source.fetchMangaDetails(manga) | ||||
|             .map { networkManga -> | ||||
|                 if (manga.thumbnail_url != networkManga.thumbnail_url) { | ||||
|                     manga.prepUpdateCover(coverCache) | ||||
|                 } | ||||
|                 manga.prepUpdateCover(coverCache, networkManga, false) | ||||
|                 manga.copyFrom(networkManga) | ||||
|                 db.insertManga(manga).executeAsBlocking() | ||||
|                 manga | ||||
| @@ -415,11 +413,23 @@ class LibraryUpdateService( | ||||
|         var count = 0 | ||||
|  | ||||
|         return Observable.from(mangaToUpdate) | ||||
|             .doOnNext { showProgressNotification(it, count++, mangaToUpdate.size) } | ||||
|             .map { manga -> | ||||
|                 manga.prepUpdateCover(coverCache) | ||||
|                 db.insertManga(manga).executeAsBlocking() | ||||
|                 manga | ||||
|             .doOnNext { | ||||
|                 showProgressNotification(it, count++, mangaToUpdate.size) | ||||
|             } | ||||
|             .flatMap { manga -> | ||||
|                 val source = sourceManager.get(manga.source) | ||||
|                     ?: return@flatMap Observable.empty<LibraryManga>() | ||||
|  | ||||
|                 source.fetchMangaDetails(manga) | ||||
|                     .map { networkManga -> | ||||
|                         manga.prepUpdateCover(coverCache, networkManga, true) | ||||
|                         networkManga.thumbnail_url?.let { | ||||
|                             manga.thumbnail_url = it | ||||
|                             db.insertManga(manga).executeAsBlocking() | ||||
|                         } | ||||
|                         manga | ||||
|                     } | ||||
|                     .onErrorReturn { manga } | ||||
|             } | ||||
|             .doOnCompleted { | ||||
|                 cancelProgressNotification() | ||||
|   | ||||
| @@ -34,6 +34,7 @@ import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction | ||||
| import eu.kanade.tachiyomi.ui.main.MainActivity | ||||
| import eu.kanade.tachiyomi.ui.main.offsetAppbarHeight | ||||
| import eu.kanade.tachiyomi.ui.manga.MangaController | ||||
| import eu.kanade.tachiyomi.util.hasCustomCover | ||||
| import eu.kanade.tachiyomi.util.system.getResourceColor | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| import eu.kanade.tachiyomi.util.view.visible | ||||
| @@ -487,7 +488,7 @@ class LibraryController( | ||||
|     private fun handleChangeCover() { | ||||
|         val manga = selectedMangas.firstOrNull() ?: return | ||||
|  | ||||
|         if (coverCache.getCustomCoverFile(manga).exists()) { | ||||
|         if (manga.hasCustomCover(coverCache)) { | ||||
|             showEditCoverDialog(manga) | ||||
|         } else { | ||||
|             openMangaCoverPicker(manga) | ||||
|   | ||||
| @@ -75,9 +75,7 @@ class MangaInfoPresenter( | ||||
|         if (!fetchMangaSubscription.isNullOrUnsubscribed()) return | ||||
|         fetchMangaSubscription = Observable.defer { source.fetchMangaDetails(manga) } | ||||
|             .map { networkManga -> | ||||
|                 if (manualFetch || manga.thumbnail_url != networkManga.thumbnail_url) { | ||||
|                     manga.prepUpdateCover(coverCache) | ||||
|                 } | ||||
|                 manga.prepUpdateCover(coverCache, networkManga, manualFetch) | ||||
|                 manga.copyFrom(networkManga) | ||||
|                 manga.initialized = true | ||||
|                 db.insertManga(manga).executeAsBlocking() | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import eu.kanade.tachiyomi.data.cache.CoverCache | ||||
| import eu.kanade.tachiyomi.data.database.DatabaseHelper | ||||
| import eu.kanade.tachiyomi.data.database.models.Manga | ||||
| import eu.kanade.tachiyomi.source.LocalSource | ||||
| import eu.kanade.tachiyomi.source.model.SManga | ||||
| import java.util.Date | ||||
|  | ||||
| fun Manga.isLocal() = source == LocalSource.ID | ||||
| @@ -11,14 +12,30 @@ fun Manga.isLocal() = source == LocalSource.ID | ||||
| /** | ||||
|  * Call before updating [Manga.thumbnail_url] to ensure old cover can be cleared from cache | ||||
|  */ | ||||
| fun Manga.prepUpdateCover(coverCache: CoverCache) { | ||||
|     cover_last_modified = Date().time | ||||
| fun Manga.prepUpdateCover(coverCache: CoverCache, remoteManga: SManga, refreshSameUrl: Boolean) { | ||||
|     // Never refresh covers if the new url is null, as the current url has possibly become invalid | ||||
|     val newUrl = remoteManga.thumbnail_url ?: return | ||||
|  | ||||
|     if (!isLocal()) { | ||||
|         coverCache.deleteFromCache(this, false) | ||||
|     if (!refreshSameUrl && thumbnail_url == newUrl) return | ||||
|  | ||||
|     when { | ||||
|         isLocal() -> { | ||||
|             cover_last_modified = Date().time | ||||
|         } | ||||
|         hasCustomCover(coverCache) -> { | ||||
|             coverCache.deleteFromCache(this, false) | ||||
|         } | ||||
|         else -> { | ||||
|             cover_last_modified = Date().time | ||||
|             coverCache.deleteFromCache(this, false) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| fun Manga.hasCustomCover(coverCache: CoverCache): Boolean { | ||||
|     return coverCache.getCustomCoverFile(this).exists() | ||||
| } | ||||
|  | ||||
| fun Manga.removeCovers(coverCache: CoverCache) { | ||||
|     if (isLocal()) return | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user