* update cover logic when thumbnail url becomes null * always clear cover on refresh even if custom cover is set * remove concurrency changes (cherry picked from commit 5723c184b1c7963ac5fbbf61452328f0c21271ec) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt # app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt
This commit is contained in:
parent
a076deeb5f
commit
1c0f08fc5b
@ -355,9 +355,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
|
||||
@ -374,11 +372,23 @@ class LibraryUpdateService(
|
||||
var count = 0
|
||||
|
||||
return Observable.from(mangaToUpdate)
|
||||
.doOnNext { notifier.showProgressNotification(it, count++, mangaToUpdate.size) }
|
||||
.map { manga ->
|
||||
manga.prepUpdateCover(coverCache)
|
||||
db.insertManga(manga).executeAsBlocking()
|
||||
manga
|
||||
.doOnNext {
|
||||
notifier.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 {
|
||||
notifier.cancelProgressNotification()
|
||||
|
@ -40,6 +40,7 @@ import eu.kanade.tachiyomi.ui.manga.MangaAllInOneController
|
||||
import eu.kanade.tachiyomi.ui.manga.MangaController
|
||||
import eu.kanade.tachiyomi.ui.migration.MigrationController
|
||||
import eu.kanade.tachiyomi.ui.migration.manga.design.PreMigrationController
|
||||
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.inflate
|
||||
@ -556,7 +557,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)
|
||||
|
@ -206,9 +206,7 @@ class MangaAllInOnePresenter(
|
||||
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()
|
||||
|
@ -84,9 +84,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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user