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

- loadBookWordCount 中 book.toSearchBook().apply 创建临时对象后被丢弃,
  字数信息未传递到搜索结果。改为返回 SearchBook 并在 searchSource 中使用。
- loadInfo/loadToc 切换后不重启搜索(与参考实现一致,仅保存设置)。
This commit is contained in:
HapeLee
2026-06-14 20:20:11 +08:00
parent 2097c0201c
commit 67a25c7cfe
4 changed files with 12 additions and 17 deletions
@@ -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()
@@ -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) {
@@ -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 -> {
@@ -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 -> {