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 391d3cf17..bd53a7fe8 100644 --- a/app/src/main/java/io/legado/app/model/CacheBook.kt +++ b/app/src/main/java/io/legado/app/model/CacheBook.kt @@ -592,7 +592,7 @@ object CacheBook { return } - val task = repository.downloadContentTask( + val task = repository.cacheContentTask( scope = scope, bookSource = bookSource, book = book, @@ -600,14 +600,12 @@ object CacheBook { context = context, start = CoroutineStart.LAZY, executeContext = context, - ).onSuccess { content -> + ).onSuccess { onSuccess(chapter) - downloadFinish(chapter, content) }.onError { onPreError(chapter, it) delay(1000) onPostError(chapter, it) - downloadFinish(chapter, "获取正文失败\n${it.localizedMessage}") }.onCancel { onCancel(chapterIndex) }.onFinally { diff --git a/app/src/main/java/io/legado/app/model/cache/CacheDownloadRepository.kt b/app/src/main/java/io/legado/app/model/cache/CacheDownloadRepository.kt index 2f561a90d..0c62e2743 100644 --- a/app/src/main/java/io/legado/app/model/cache/CacheDownloadRepository.kt +++ b/app/src/main/java/io/legado/app/model/cache/CacheDownloadRepository.kt @@ -62,6 +62,25 @@ class CacheDownloadRepository { ) } + fun cacheContentTask( + scope: CoroutineScope, + bookSource: BookSource, + book: Book, + chapter: BookChapter, + context: CoroutineContext, + start: CoroutineStart = CoroutineStart.LAZY, + executeContext: CoroutineContext = context, + ): Coroutine { + return Coroutine.async( + scope = scope, + context = context, + start = start, + executeContext = executeContext, + ) { + WebBook.getContentAwait(bookSource, book, chapter) + } + } + suspend fun downloadContentAwait( bookSource: BookSource, book: Book, diff --git a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreen.kt b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreen.kt index a06e948c5..6b4eade87 100644 --- a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreen.kt +++ b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreen.kt @@ -679,15 +679,9 @@ private fun BookshelfManageScreen( val cacheCount = remember(renderVersion, book.bookUrl) { viewModel.getCacheCount(book.bookUrl) ?: 0 } - val downloadState = viewModel.getBookDownloadState(book.bookUrl) val isPreparingDownload = viewModel.isBookPreparingDownload(book.bookUrl) - val waitingDownloadCount = downloadState?.waitingCount ?: 0 - val runningDownloadCount = downloadState?.runningIndices?.size ?: 0 val isDownloadingInCacheModel = viewModel.isBookDownloading(book.bookUrl) - val isDownloading = isPreparingDownload || - waitingDownloadCount > 0 || - runningDownloadCount > 0 || - isDownloadingInCacheModel + val isDownloading = isPreparingDownload || isDownloadingInCacheModel val downloadFailureText = viewModel.getDownloadFailureMessage(book.bookUrl)?.let { stringResource(R.string.cache_download_failed, it) } diff --git a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreenViewModel.kt b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreenViewModel.kt index eaae75b07..158a2cff3 100644 --- a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreenViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreenViewModel.kt @@ -27,7 +27,6 @@ import io.legado.app.help.book.isAudio import io.legado.app.help.book.isLocal import io.legado.app.help.book.removeType import io.legado.app.model.CacheBook -import io.legado.app.model.cache.CacheBookDownloadState import io.legado.app.help.config.LocalConfig import io.legado.app.service.ExportBookService import io.legado.app.ui.config.bookshelfConfig.BookshelfConfig @@ -169,7 +168,6 @@ class BookshelfManageScreenViewModel( val effects = _effects.asSharedFlow() private val cacheCounts = ConcurrentHashMap() - private val downloadStates = ConcurrentHashMap() private val pendingDownloadBookUrls = ConcurrentHashMap.newKeySet() private val downloadFailureMessages = ConcurrentHashMap() private var booksJob: Job? = null @@ -309,10 +307,6 @@ class BookshelfManageScreenViewModel( return CacheBook.cacheBookMap[bookUrl]?.isStop() == false } - fun getBookDownloadState(bookUrl: String): CacheBookDownloadState? { - return downloadStates[bookUrl] - } - fun getDownloadFailureMessage(bookUrl: String): String? { return downloadFailureMessages[bookUrl] } @@ -413,8 +407,6 @@ class BookshelfManageScreenViewModel( message?.let { bookUrl to it } }.toMap() pendingDownloadBookUrls.removeAll(downloadState.books.keys) - downloadStates.clear() - downloadStates.putAll(downloadState.books) successfulBookUrls.forEach { downloadFailureMessages.remove(it) } downloadFailureMessages.putAll(failureMsgs) _uiState.update { it.copy(isDownloadRunning = downloadState.isRunning) }