Only cancel decode job for recycled viewHolder

This commit is contained in:
tarsin committed 2023-02-14 15:45:55 +08:00
1 parent d7b08a0181
commit f7bf1d624b
7 files changed
+21 -15

No files matched your search

@@ -46,6 +46,7 @@ import java.util.Stack;
import java.util.concurrent.atomic.AtomicInteger;
import eu.kanade.tachiyomi.ui.reader.loader.PageLoader;
import kotlin.Pair;
public class ArchivePageLoader extends PageLoader2 {
private static final AtomicInteger sIdGenerator = new AtomicInteger();
@@ -187,7 +188,7 @@ public class ArchivePageLoader extends PageLoader2 {
}
@Override
protected void preloadPages(@NonNull List<Integer> pages) {
protected void preloadPages(@NonNull List<Integer> pages, @NonNull Pair<Integer, Integer> pair) {
}
@@ -29,6 +29,7 @@ import java.util.List;
import java.util.Locale;
import eu.kanade.tachiyomi.ui.reader.loader.PageLoader;
import kotlin.Pair;
public class EhPageLoader extends PageLoader2 implements SpiderQueen.OnSpiderListener {
@@ -191,9 +192,9 @@ public class EhPageLoader extends PageLoader2 implements SpiderQueen.OnSpiderLis
}
@Override
protected void preloadPages(@NonNull List<Integer> pages) {
protected void preloadPages(@NonNull List<Integer> pages, @NonNull Pair<Integer, Integer> pair) {
if (mSpiderQueen != null) {
mSpiderQueen.preloadPages(pages);
mSpiderQueen.preloadPages(pages, pair);
}
}
@@ -51,6 +51,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import eu.kanade.tachiyomi.ui.reader.loader.PageLoader;
import kotlin.Pair;
import kotlinx.coroutines.CoroutineScopeKt;
import okhttp3.OkHttpClient;
import okhttp3.Request;
@@ -379,15 +380,15 @@ public final class SpiderQueen implements Runnable {
return;
}
mWorkerScope.cancel(index);
mWorkerScope.cancelDecode(index);
}
public void preloadPages(@NonNull List<Integer> pages) {
public void preloadPages(@NonNull List<Integer> pages, @NonNull Pair<Integer, Integer> pair) {
if (mQueenThread == null) {
return;
}
mWorkerScope.updateRAList(pages);
mWorkerScope.updateRAList(pages, pair);
}
private void request(int index, boolean force) {
@@ -45,12 +45,8 @@ class SpiderQueenWorker(private val queen: SpiderQueen) : CoroutineScope {
override val coroutineContext: CoroutineContext
get() = Dispatchers.IO + Job()
fun cancel(index: Int) {
fun cancelDecode(index: Int) {
decoder.cancel(index)
if (isDownloadMode) return
synchronized(mFetcherJobMap) {
mFetcherJobMap.remove(index)?.cancel()
}
}
@Synchronized
@@ -60,9 +56,13 @@ class SpiderQueenWorker(private val queen: SpiderQueen) : CoroutineScope {
isDownloadMode = true
}
fun updateRAList(list: List<Int>) {
fun updateRAList(list: List<Int>, cancelBounds: Pair<Int, Int> = 0 to Int.MAX_VALUE) {
if (isDownloadMode) return
synchronized(mFetcherJobMap) {
mFetcherJobMap.forEach { (i, job) ->
if (i < cancelBounds.first || i > cancelBounds.second)
job.cancel()
}
list.forEach {
if (mFetcherJobMap[it]?.isActive != true)
doLaunchDownloadJob(it, false)