fix: 修复换源加载字数配置不生效
- loadBookWordCount 中 book.toSearchBook().apply 创建临时对象后被丢弃, 字数信息未传递到搜索结果。改为返回 SearchBook 并在 searchSource 中使用。 - loadInfo/loadToc 切换后不重启搜索(与参考实现一致,仅保存设置)。
This commit is contained in:
@@ -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()
|
||||
|
||||
-2
@@ -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 -> {
|
||||
|
||||
Reference in New Issue
Block a user