From 67a25c7cfe785f3adac602c12c5b51104e134e8d Mon Sep 17 00:00:00 2001 From: HapeLee <63206378+HapeLee@users.noreply.github.com> Date: Sun, 14 Jun 2026 20:19:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=8D=A2=E6=BA=90?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E5=AD=97=E6=95=B0=E9=85=8D=E7=BD=AE=E4=B8=8D?= =?UTF-8?q?=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - loadBookWordCount 中 book.toSearchBook().apply 创建临时对象后被丢弃, 字数信息未传递到搜索结果。改为返回 SearchBook 并在 searchSource 中使用。 - loadInfo/loadToc 切换后不重启搜索(与参考实现一致,仅保存设置)。 --- .../usecase/ChangeSourceSearchUseCase.kt | 23 ++++++++++--------- .../ChangeBookSourceComposeViewModel.kt | 2 -- .../changesource/ChangeBookSourceDialog.kt | 2 -- .../ChangeChapterSourceViewModel.kt | 2 -- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/io/legado/app/domain/usecase/ChangeSourceSearchUseCase.kt b/app/src/main/java/io/legado/app/domain/usecase/ChangeSourceSearchUseCase.kt index 408c7466f..48c94ce31 100644 --- a/app/src/main/java/io/legado/app/domain/usecase/ChangeSourceSearchUseCase.kt +++ b/app/src/main/java/io/legado/app/domain/usecase/ChangeSourceSearchUseCase.kt @@ -154,7 +154,7 @@ class ChangeSourceSearchUseCase( loadInfo || loadToc || loadWordCount -> { val book = searchBook.toBook() try { - loadBookInfo( + val wordCountSearchBook = loadBookInfo( source, book, loadToc, @@ -163,8 +163,7 @@ class ChangeSourceSearchUseCase( fromReadBookActivity, contentProcessor ) - val processedSearchBook = book.toSearchBook() - processedBooks.add(processedSearchBook) + processedBooks.add(wordCountSearchBook ?: book.toSearchBook()) } catch (e: Throwable) { if (e is CancellationException) throw e processedBooks.add(searchBook) @@ -187,12 +186,12 @@ class ChangeSourceSearchUseCase( oldBook: Book, fromReadBookActivity: Boolean, contentProcessor: ContentProcessor, - ) { + ): SearchBook? { if (book.tocUrl.isEmpty()) { WebBook.getBookInfoAwait(source, book) } if (loadToc || loadWordCount) { - loadBookToc( + return loadBookToc( source, book, loadWordCount, @@ -201,6 +200,7 @@ class ChangeSourceSearchUseCase( contentProcessor ) } + return null } private suspend fun loadBookToc( @@ -210,7 +210,7 @@ class ChangeSourceSearchUseCase( oldBook: Book, fromReadBookActivity: Boolean, contentProcessor: ContentProcessor, - ) { + ): SearchBook? { val chapters = WebBook.getChapterListAwait(source, book).getOrThrow() for (chapter in chapters) { chapter.internString() @@ -222,7 +222,7 @@ class ChangeSourceSearchUseCase( bookMap[book.primaryStr()] = book book.releaseHtmlData() if (loadWordCount) { - loadBookWordCount( + return loadBookWordCount( source, book, chapters, @@ -231,6 +231,7 @@ class ChangeSourceSearchUseCase( contentProcessor ) } + return null } private suspend fun loadBookWordCount( @@ -240,21 +241,21 @@ class ChangeSourceSearchUseCase( oldBook: Book, fromReadBookActivity: Boolean, contentProcessor: ContentProcessor, - ) { - if (chapters.isEmpty()) return + ): SearchBook? { + if (chapters.isEmpty()) return null val chapterIndex = if (fromReadBookActivity) { BookHelp.getDurChapter(oldBook, chapters) } else { chapters.lastIndex } - if (chapterIndex !in chapters.indices) return + if (chapterIndex !in chapters.indices) return null val bookChapter = chapters[chapterIndex] var title = bookChapter.title.trim() if (title.length > 20) { title = title.substring(0, 20) + "…" } val startTime = System.currentTimeMillis() - try { + return try { val nextChapterUrl = chapters.getOrNull(chapterIndex + 1)?.url var content = WebBook.getContentAwait(source, book, bookChapter, nextChapterUrl, false) content = contentProcessor.getContent(oldBook, bookChapter, content, false).toString() diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceComposeViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceComposeViewModel.kt index adccfda3f..9a29f0569 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceComposeViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceComposeViewModel.kt @@ -227,13 +227,11 @@ class ChangeBookSourceComposeViewModel( fun onLoadInfoChange(enabled: Boolean) { if (ChangeSourceConfig.loadInfo == enabled) return ChangeSourceConfig.loadInfo = enabled - refresh() } fun onLoadTocChange(enabled: Boolean) { if (ChangeSourceConfig.loadToc == enabled) return ChangeSourceConfig.loadToc = enabled - refresh() } fun onLoadWordCountChange(enabled: Boolean) { diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt index 6c4d64967..b14c08318 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt @@ -323,13 +323,11 @@ class ChangeBookSourceDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_b R.id.menu_load_info -> { ChangeSourceConfig.loadInfo = !item.isChecked item.isChecked = !item.isChecked - viewModel.refresh() } R.id.menu_load_toc -> { ChangeSourceConfig.loadToc = !item.isChecked item.isChecked = !item.isChecked - viewModel.refresh() } R.id.menu_load_word_count -> { diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceViewModel.kt index 71d87ba5e..006bbfe3a 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceViewModel.kt @@ -133,13 +133,11 @@ class ChangeChapterSourceViewModel( is ChangeChapterSourceIntent.SetLoadInfo -> { ChangeSourceConfig.loadInfo = intent.enabled _uiState.update { it.copy(loadInfo = intent.enabled) } - refreshResults() } is ChangeChapterSourceIntent.SetLoadToc -> { ChangeSourceConfig.loadToc = intent.enabled _uiState.update { it.copy(loadToc = intent.enabled) } - refreshResults() } is ChangeChapterSourceIntent.SetLoadWordCount -> {