diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 3b7a640fd..3eef6e9a2 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -67,7 +67,8 @@ "Bash(Test-Path *)", "Bash(git stash *)", "Bash(Select-String -Pattern \"FAILED|error:\")", - "Bash(Select-Object -First 5)" + "Bash(Select-Object -First 5)", + "Bash(Select-String -NotMatch \"^\\\\s*$\")" ] } } diff --git a/app/src/main/java/io/legado/app/model/CacheBook.kt b/app/src/main/java/io/legado/app/model/CacheBook.kt index 8e54b1682..473a3df80 100644 --- a/app/src/main/java/io/legado/app/model/CacheBook.kt +++ b/app/src/main/java/io/legado/app/model/CacheBook.kt @@ -474,6 +474,26 @@ object CacheBook { updateSummary() } + fun shutdownPreservingPaused() { + isPaused = false + val toRemove = ArrayList() + 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) { coordinator.setWorkingState(value) } diff --git a/app/src/main/java/io/legado/app/service/CacheBookService.kt b/app/src/main/java/io/legado/app/service/CacheBookService.kt index 5db78a086..fbaf5c478 100644 --- a/app/src/main/java/io/legado/app/service/CacheBookService.kt +++ b/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 MAX_IDLE_SPIN_MS = 60_000L + @Volatile var isRun = false private set } @@ -183,9 +184,9 @@ class CacheBookService : BaseService() { admissionIdleWaiters.values.flatten().forEach { it.complete(Unit) } admissionIdleWaiters.clear() } - CacheBook.close(clearFailureState = false) - serviceCommandScope.cancel() + CacheBook.shutdownPreservingPaused() super.onDestroy() + serviceCommandScope.cancel() } private fun reconstructRequestFromIntent(intent: Intent): CacheDownloadRequest? {