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