Restore covers only once

This commit is contained in:
Koitharu
2023-08-22 13:38:20 +03:00
parent aa650d44d3
commit 05dbd11fc1

View File

@@ -1,5 +1,6 @@
package org.koitharu.kotatsu.main.domain
import androidx.collection.ArraySet
import androidx.lifecycle.coroutineScope
import coil.EventListener
import coil.ImageLoader
@@ -28,6 +29,8 @@ class CoverRestorer @Inject constructor(
private val coilProvider: Provider<ImageLoader>,
) : EventListener {
private val blacklist = ArraySet<String>()
override fun onError(request: ImageRequest, result: ErrorResult) {
super.onError(request, result)
if (!result.throwable.shouldRestore()) {
@@ -42,12 +45,18 @@ class CoverRestorer @Inject constructor(
}
private fun restoreManga(manga: Manga, request: ImageRequest) {
val key = manga.publicUrl
if (key in blacklist) {
return
}
request.lifecycle.coroutineScope.launch {
val restored = runCatchingCancellable {
restoreMangaImpl(manga)
}.getOrDefault(false)
if (restored) {
request.newBuilder().enqueueWith(coilProvider.get())
} else {
blacklist.add(key)
}
}
}
@@ -67,12 +76,18 @@ class CoverRestorer @Inject constructor(
}
private fun restoreBookmark(bookmark: Bookmark, request: ImageRequest) {
val key = bookmark.imageUrl
if (key in blacklist) {
return
}
request.lifecycle.coroutineScope.launch {
val restored = runCatchingCancellable {
restoreBookmarkImpl(bookmark)
}.getOrDefault(false)
if (restored) {
request.newBuilder().enqueueWith(coilProvider.get())
} else {
blacklist.add(key)
}
}
}