diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/ArchivePageLoader.java b/app/src/main/java/com/hippo/ehviewer/gallery/ArchivePageLoader.java index ca5788ae0..4c4f0e08c 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/ArchivePageLoader.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/ArchivePageLoader.java @@ -41,6 +41,7 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.Iterator; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.Stack; @@ -187,6 +188,11 @@ public class ArchivePageLoader extends PageLoader2 { return dst; } + @Override + protected void preloadPages(@NonNull List pages) { + + } + private class ArchiveHostTask implements Runnable { public final Thread[] archiveThreads = new Thread[]{ new Thread(new ArchiveTask()), diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/EhPageLoader.java b/app/src/main/java/com/hippo/ehviewer/gallery/EhPageLoader.java index 39e150133..69825e724 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/EhPageLoader.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/EhPageLoader.java @@ -25,6 +25,7 @@ import com.hippo.image.Image; import com.hippo.unifile.UniFile; import com.hippo.yorozuya.SimpleHandler; +import java.util.List; import java.util.Locale; import eu.kanade.tachiyomi.ui.reader.loader.PageLoader; @@ -207,6 +208,13 @@ public class EhPageLoader extends PageLoader2 implements SpiderQueen.OnSpiderLis notifyPageFailed(index); } + @Override + protected void preloadPages(@NonNull List pages) { + if (mSpiderQueen != null) { + mSpiderQueen.preloadPages(pages); + } + } + private static class ReleaseTask implements Runnable { private SpiderQueen mSpiderQueen; diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java index bfaab3502..3f8efa7af 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java @@ -460,6 +460,19 @@ public final class SpiderQueen implements Runnable { } } + public void preloadPages(@NonNull List pages) { + if (mQueenThread == null) { + return; + } + + synchronized (mRequestPageQueue) { + pages.removeAll(mRequestPageQueue); + pages.removeAll(mRequestPageQueue2); + pages.removeAll(mDecodeRequestQueue); + mRequestPageQueue2.addAll(pages); + } + } + /** * @return String for error
* Float for download percent
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt index 47914da14..9ef7896b1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt @@ -17,6 +17,8 @@ abstract class PageLoader { (0 until size()).map { ReaderPage(it) } } + private val mPreloads = MathUtils.clamp(com.hippo.ehviewer.Settings.getPreloadImage(), 0, 100) + var state = MutableStateFlow(STATE_WAIT) abstract val error: String @@ -41,12 +43,19 @@ abstract class PageLoader { notifyPageSucceed(index, image) else onRequest(index) + + // val pagesAbsent = (index until (mPreloads + index).coerceAtMost(size())).toMutableList().removeAll(mImageCache.snapshot().keys) + // Should we refresh our LruCache ? + val pagesAbsent = (index until (mPreloads + index).coerceAtMost(size())).mapNotNull { it.takeIf { mImageCache[it] == null } } + preloadPages(pagesAbsent) } fun retryPage(page: ReaderPage) { onForceRequest(mPages.indexOf(page)) } + protected abstract fun preloadPages(pages: List) + protected abstract fun onRequest(index: Int) protected abstract fun onForceRequest(index: Int)