diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 8d26e58ca..c7875c262 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -3,6 +3,9 @@ * 关注合作公众号 **[小说拾遗]()** 获取好看的小说。 - 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 +**2020/10/12** +* 优化预下载,防止同时下载太多卡顿 + **2020/10/11** * 优化书源校验 * 语言切换bug修复 by [h11128](https://github.com/h11128) diff --git a/app/src/main/java/io/legado/app/service/help/CacheBook.kt b/app/src/main/java/io/legado/app/service/help/CacheBook.kt index 149e6258c..18b68b332 100644 --- a/app/src/main/java/io/legado/app/service/help/CacheBook.kt +++ b/app/src/main/java/io/legado/app/service/help/CacheBook.kt @@ -54,6 +54,14 @@ object CacheBook { } } + fun downloadCount(): Int { + var count = 0 + downloadMap.forEach { + count += it.value.size + } + return count + } + fun download( webBook: WebBook, book: Book, @@ -98,6 +106,9 @@ object CacheBook { } }.onFinally { downloadMap[book.bookUrl]?.remove(chapter.index) + if (downloadMap[book.bookUrl].isNullOrEmpty()) { + downloadMap.remove(book.bookUrl) + } ReadBook.removeLoading(chapter.index) } } diff --git a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt index 9a10d0060..8f45c4a9c 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt @@ -8,6 +8,7 @@ import io.legado.app.constant.EventBus import io.legado.app.data.entities.Book import io.legado.app.data.entities.RssSource import io.legado.app.help.AppConfig +import io.legado.app.help.BookHelp import io.legado.app.help.DefaultValueHelp import io.legado.app.help.http.HttpHelper import io.legado.app.help.storage.Restore @@ -19,6 +20,7 @@ import io.legado.app.utils.fromJsonObject import io.legado.app.utils.postEvent import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.asCoroutineDispatcher +import kotlinx.coroutines.delay import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.CopyOnWriteArraySet import java.util.concurrent.Executors @@ -109,11 +111,23 @@ class MainViewModel(application: Application) : BaseViewModel(application) { } private fun cacheBook(webBook: WebBook, book: Book) { - if (book.totalChapterNum > book.durChapterIndex) { - val downloadToIndex = min(book.totalChapterNum, book.durChapterIndex.plus(10)) - for (i in book.durChapterIndex until downloadToIndex) { - App.db.bookChapterDao().getChapter(book.bookUrl, i)?.let { chapter -> - CacheBook.download(webBook, book, chapter) + execute { + if (book.totalChapterNum > book.durChapterIndex) { + val downloadToIndex = min(book.totalChapterNum, book.durChapterIndex.plus(10)) + for (i in book.durChapterIndex until downloadToIndex) { + App.db.bookChapterDao().getChapter(book.bookUrl, i)?.let { chapter -> + if (!BookHelp.hasContent(book, chapter)) { + var addToCache = false + while (!addToCache) { + if (CacheBook.downloadCount() < 5) { + CacheBook.download(webBook, book, chapter) + addToCache = true + } else { + delay(1000) + } + } + } + } } } }