Jelajahi Sumber

fix: 修复换源加载字数配置不生效

- loadBookWordCount 中 book.toSearchBook().apply 创建临时对象后被丢弃,
  字数信息未传递到搜索结果。改为返回 SearchBook 并在 searchSource 中使用。
- loadInfo/loadToc 切换后不重启搜索(与参考实现一致,仅保存设置)。
HapeLee 4 bulan lalu
induk
melakukan
67a25c7cfe

+ 12 - 11
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()

+ 0 - 2
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) {

+ 0 - 2
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 -> {

+ 0 - 2
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 -> {