kunfei 4 سال پیش
والد
کامیت
d093208a20

+ 5 - 6
app/src/main/java/io/legado/app/model/CacheBook.kt

@@ -202,25 +202,25 @@ object CacheBook {
          * 从待下载列表内取第一条下载
          */
         @Synchronized
-        fun download(scope: CoroutineScope, context: CoroutineContext): Boolean {
+        fun download(scope: CoroutineScope, context: CoroutineContext) {
             val chapterIndex = waitDownloadSet.firstOrNull()
             if (chapterIndex == null) {
                 if (onDownloadSet.isEmpty()) {
                     cacheBookMap.remove(book.bookUrl)
                 }
-                return false
+                return
             }
             if (onDownloadSet.contains(chapterIndex)) {
                 waitDownloadSet.remove(chapterIndex)
-                return download(scope, context)
+                return
             }
             val chapter = appDb.bookChapterDao.getChapter(book.bookUrl, chapterIndex) ?: let {
                 waitDownloadSet.remove(chapterIndex)
-                return download(scope, context)
+                return
             }
             if (BookHelp.hasContent(book, chapter)) {
                 waitDownloadSet.remove(chapterIndex)
-                return download(scope, context)
+                return
             }
             waitDownloadSet.remove(chapterIndex)
             onDownloadSet.add(chapterIndex)
@@ -243,7 +243,6 @@ object CacheBook {
             }.onFinally {
                 onFinally()
             }
-            return true
         }
 
         @Synchronized

+ 7 - 3
app/src/main/java/io/legado/app/service/CacheBookService.kt

@@ -107,10 +107,14 @@ class CacheBookService : BaseService() {
                     return@launch
                 }
                 CacheBook.cacheBookMap.forEach {
-                    while (CacheBook.onDownloadCount > threadCount) {
-                        delay(100)
+                    val cacheBookModel = it.value
+                    while (cacheBookModel.waitCount > 0) {
+                        if (CacheBook.onDownloadCount < threadCount) {
+                            cacheBookModel.download(this, cachePool)
+                        } else {
+                            delay(100)
+                        }
                     }
-                    it.value.download(this, cachePool)
                 }
             }
         }

+ 7 - 3
app/src/main/java/io/legado/app/ui/main/MainViewModel.kt

@@ -195,10 +195,14 @@ class MainViewModel(application: Application) : BaseViewModel(application) {
                     return@launch
                 }
                 CacheBook.cacheBookMap.forEach {
-                    while (CacheBook.onDownloadCount > threadCount) {
-                        delay(100)
+                    val cacheBookModel = it.value
+                    while (cacheBookModel.waitCount > 0) {
+                        if (CacheBook.onDownloadCount < threadCount) {
+                            cacheBookModel.download(this, upTocPool)
+                        } else {
+                            delay(100)
+                        }
                     }
-                    it.value.download(this, upTocPool)
                 }
             }
         }