Merge pull request #3 from gedoor/master

merge
pull/416/head
口口吕 5 years ago committed by GitHub
commit f594193b15
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      app/src/main/assets/updateLog.md
  2. 11
      app/src/main/java/io/legado/app/service/help/CacheBook.kt
  3. 24
      app/src/main/java/io/legado/app/ui/main/MainViewModel.kt

@ -3,6 +3,9 @@
* 关注合作公众号 **[小说拾遗]()** 获取好看的小说。
- 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。
**2020/10/12**
* 优化预下载,防止同时下载太多卡顿
**2020/10/11**
* 优化书源校验
* 语言切换bug修复 by [h11128](https://github.com/h11128)

@ -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)
}
}

@ -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)
}
}
}
}
}
}
}

Loading…
Cancel
Save