فهرست منبع

下载代码优化

HapeLee 6 ماه پیش
والد
کامیت
b90b9f034d

+ 2 - 1
.claude/settings.local.json

@@ -67,7 +67,8 @@
       "Bash(Test-Path *)",
       "Bash(Test-Path *)",
       "Bash(git stash *)",
       "Bash(git stash *)",
       "Bash(Select-String -Pattern \"FAILED|error:\")",
       "Bash(Select-String -Pattern \"FAILED|error:\")",
-      "Bash(Select-Object -First 5)"
+      "Bash(Select-Object -First 5)",
+      "Bash(Select-String -NotMatch \"^\\\\s*$\")"
     ]
     ]
   }
   }
 }
 }

+ 20 - 0
app/src/main/java/io/legado/app/model/CacheBook.kt

@@ -474,6 +474,26 @@ object CacheBook {
         updateSummary()
         updateSummary()
     }
     }
 
 
+    fun shutdownPreservingPaused() {
+        isPaused = false
+        val toRemove = ArrayList<String>()
+        cacheBookMap.forEach { (bookUrl, model) ->
+            val keep = synchronized(model) {
+                model.isPaused() || model.pausedIndices().isNotEmpty()
+            }
+            if (keep) return@forEach
+            toRemove.add(bookUrl)
+            model.stop()
+        }
+        toRemove.forEach { cacheBookMap.remove(it) }
+        successDownloadCount.set(0)
+        pendingRemoveRequests.values.forEach { it.complete(false) }
+        pendingRemoveRequests.clear()
+        clearPendingAdmissions()
+        stateStore.clearRuntimeState()
+        updateSummary()
+    }
+
     fun setWorkingState(value: Boolean) {
     fun setWorkingState(value: Boolean) {
         coordinator.setWorkingState(value)
         coordinator.setWorkingState(value)
     }
     }

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

@@ -52,6 +52,7 @@ class CacheBookService : BaseService() {
         private const val DIAGNOSTICS_LOG_INTERVAL_MILLIS = 5_000L
         private const val DIAGNOSTICS_LOG_INTERVAL_MILLIS = 5_000L
         private const val MAX_IDLE_SPIN_MS = 60_000L
         private const val MAX_IDLE_SPIN_MS = 60_000L
 
 
+        @Volatile
         var isRun = false
         var isRun = false
             private set
             private set
     }
     }
@@ -183,9 +184,9 @@ class CacheBookService : BaseService() {
             admissionIdleWaiters.values.flatten().forEach { it.complete(Unit) }
             admissionIdleWaiters.values.flatten().forEach { it.complete(Unit) }
             admissionIdleWaiters.clear()
             admissionIdleWaiters.clear()
         }
         }
-        CacheBook.close(clearFailureState = false)
-        serviceCommandScope.cancel()
+        CacheBook.shutdownPreservingPaused()
         super.onDestroy()
         super.onDestroy()
+        serviceCommandScope.cancel()
     }
     }
 
 
     private fun reconstructRequestFromIntent(intent: Intent): CacheDownloadRequest? {
     private fun reconstructRequestFromIntent(intent: Intent): CacheDownloadRequest? {