Only cancel decode job for recycled viewHolder
This commit is contained in:
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)
|
||||
|
||||
Reference in new issue
Block a user