Restore covers only once
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user