fix: 修复换源加载字数配置不生效
- loadBookWordCount 中 book.toSearchBook().apply 创建临时对象后被丢弃, 字数信息未传递到搜索结果。改为返回 SearchBook 并在 searchSource 中使用。 - loadInfo/loadToc 切换后不重启搜索(与参考实现一致,仅保存设置)。
This commit is contained in:
4 files changed
+12
-17
No files matched your search
@@ -154,7 +154,7 @@ class ChangeSourceSearchUseCase(
|
|||||||
loadInfo || loadToc || loadWordCount -> {
|
loadInfo || loadToc || loadWordCount -> {
|
||||||
val book = searchBook.toBook()
|
val book = searchBook.toBook()
|
||||||
try {
|
try {
|
||||||
loadBookInfo(
|
val wordCountSearchBook = loadBookInfo(
|
||||||
source,
|
source,
|
||||||
book,
|
book,
|
||||||
loadToc,
|
loadToc,
|
||||||
@@ -163,8 +163,7 @@ class ChangeSourceSearchUseCase(
|
|||||||
fromReadBookActivity,
|
fromReadBookActivity,
|
||||||
contentProcessor
|
contentProcessor
|
||||||
)
|
)
|
||||||
val processedSearchBook = book.toSearchBook()
|
processedBooks.add(wordCountSearchBook ?: book.toSearchBook())
|
||||||
processedBooks.add(processedSearchBook)
|
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
if (e is CancellationException) throw e
|
if (e is CancellationException) throw e
|
||||||
processedBooks.add(searchBook)
|
processedBooks.add(searchBook)
|
||||||
@@ -187,12 +186,12 @@ class ChangeSourceSearchUseCase(
|
|||||||
oldBook: Book,
|
oldBook: Book,
|
||||||
fromReadBookActivity: Boolean,
|
fromReadBookActivity: Boolean,
|
||||||
contentProcessor: ContentProcessor,
|
contentProcessor: ContentProcessor,
|
||||||
) {
|
): SearchBook? {
|
||||||
if (book.tocUrl.isEmpty()) {
|
if (book.tocUrl.isEmpty()) {
|
||||||
WebBook.getBookInfoAwait(source, book)
|
WebBook.getBookInfoAwait(source, book)
|
||||||
}
|
}
|
||||||
if (loadToc || loadWordCount) {
|
if (loadToc || loadWordCount) {
|
||||||
loadBookToc(
|
return loadBookToc(
|
||||||
source,
|
source,
|
||||||
book,
|
book,
|
||||||
loadWordCount,
|
loadWordCount,
|
||||||
@@ -201,6 +200,7 @@ class ChangeSourceSearchUseCase(
|
|||||||
contentProcessor
|
contentProcessor
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun loadBookToc(
|
private suspend fun loadBookToc(
|
||||||
@@ -210,7 +210,7 @@ class ChangeSourceSearchUseCase(
|
|||||||
oldBook: Book,
|
oldBook: Book,
|
||||||
fromReadBookActivity: Boolean,
|
fromReadBookActivity: Boolean,
|
||||||
contentProcessor: ContentProcessor,
|
contentProcessor: ContentProcessor,
|
||||||
) {
|
): SearchBook? {
|
||||||
val chapters = WebBook.getChapterListAwait(source, book).getOrThrow()
|
val chapters = WebBook.getChapterListAwait(source, book).getOrThrow()
|
||||||
for (chapter in chapters) {
|
for (chapter in chapters) {
|
||||||
chapter.internString()
|
chapter.internString()
|
||||||
@@ -222,7 +222,7 @@ class ChangeSourceSearchUseCase(
|
|||||||
bookMap[book.primaryStr()] = book
|
bookMap[book.primaryStr()] = book
|
||||||
book.releaseHtmlData()
|
book.releaseHtmlData()
|
||||||
if (loadWordCount) {
|
if (loadWordCount) {
|
||||||
loadBookWordCount(
|
return loadBookWordCount(
|
||||||
source,
|
source,
|
||||||
book,
|
book,
|
||||||
chapters,
|
chapters,
|
||||||
@@ -231,6 +231,7 @@ class ChangeSourceSearchUseCase(
|
|||||||
contentProcessor
|
contentProcessor
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun loadBookWordCount(
|
private suspend fun loadBookWordCount(
|
||||||
@@ -240,21 +241,21 @@ class ChangeSourceSearchUseCase(
|
|||||||
oldBook: Book,
|
oldBook: Book,
|
||||||
fromReadBookActivity: Boolean,
|
fromReadBookActivity: Boolean,
|
||||||
contentProcessor: ContentProcessor,
|
contentProcessor: ContentProcessor,
|
||||||
) {
|
): SearchBook? {
|
||||||
if (chapters.isEmpty()) return
|
if (chapters.isEmpty()) return null
|
||||||
val chapterIndex = if (fromReadBookActivity) {
|
val chapterIndex = if (fromReadBookActivity) {
|
||||||
BookHelp.getDurChapter(oldBook, chapters)
|
BookHelp.getDurChapter(oldBook, chapters)
|
||||||
} else {
|
} else {
|
||||||
chapters.lastIndex
|
chapters.lastIndex
|
||||||
}
|
}
|
||||||
if (chapterIndex !in chapters.indices) return
|
if (chapterIndex !in chapters.indices) return null
|
||||||
val bookChapter = chapters[chapterIndex]
|
val bookChapter = chapters[chapterIndex]
|
||||||
var title = bookChapter.title.trim()
|
var title = bookChapter.title.trim()
|
||||||
if (title.length > 20) {
|
if (title.length > 20) {
|
||||||
title = title.substring(0, 20) + "…"
|
title = title.substring(0, 20) + "…"
|
||||||
}
|
}
|
||||||
val startTime = System.currentTimeMillis()
|
val startTime = System.currentTimeMillis()
|
||||||
try {
|
return try {
|
||||||
val nextChapterUrl = chapters.getOrNull(chapterIndex + 1)?.url
|
val nextChapterUrl = chapters.getOrNull(chapterIndex + 1)?.url
|
||||||
var content = WebBook.getContentAwait(source, book, bookChapter, nextChapterUrl, false)
|
var content = WebBook.getContentAwait(source, book, bookChapter, nextChapterUrl, false)
|
||||||
content = contentProcessor.getContent(oldBook, bookChapter, content, false).toString()
|
content = contentProcessor.getContent(oldBook, bookChapter, content, false).toString()
|
||||||
|
|||||||
-2
@@ -227,13 +227,11 @@ class ChangeBookSourceComposeViewModel(
|
|||||||
fun onLoadInfoChange(enabled: Boolean) {
|
fun onLoadInfoChange(enabled: Boolean) {
|
||||||
if (ChangeSourceConfig.loadInfo == enabled) return
|
if (ChangeSourceConfig.loadInfo == enabled) return
|
||||||
ChangeSourceConfig.loadInfo = enabled
|
ChangeSourceConfig.loadInfo = enabled
|
||||||
refresh()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onLoadTocChange(enabled: Boolean) {
|
fun onLoadTocChange(enabled: Boolean) {
|
||||||
if (ChangeSourceConfig.loadToc == enabled) return
|
if (ChangeSourceConfig.loadToc == enabled) return
|
||||||
ChangeSourceConfig.loadToc = enabled
|
ChangeSourceConfig.loadToc = enabled
|
||||||
refresh()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onLoadWordCountChange(enabled: Boolean) {
|
fun onLoadWordCountChange(enabled: Boolean) {
|
||||||
|
|||||||
@@ -323,13 +323,11 @@ class ChangeBookSourceDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_b
|
|||||||
R.id.menu_load_info -> {
|
R.id.menu_load_info -> {
|
||||||
ChangeSourceConfig.loadInfo = !item.isChecked
|
ChangeSourceConfig.loadInfo = !item.isChecked
|
||||||
item.isChecked = !item.isChecked
|
item.isChecked = !item.isChecked
|
||||||
viewModel.refresh()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.menu_load_toc -> {
|
R.id.menu_load_toc -> {
|
||||||
ChangeSourceConfig.loadToc = !item.isChecked
|
ChangeSourceConfig.loadToc = !item.isChecked
|
||||||
item.isChecked = !item.isChecked
|
item.isChecked = !item.isChecked
|
||||||
viewModel.refresh()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.menu_load_word_count -> {
|
R.id.menu_load_word_count -> {
|
||||||
|
|||||||
@@ -133,13 +133,11 @@ class ChangeChapterSourceViewModel(
|
|||||||
is ChangeChapterSourceIntent.SetLoadInfo -> {
|
is ChangeChapterSourceIntent.SetLoadInfo -> {
|
||||||
ChangeSourceConfig.loadInfo = intent.enabled
|
ChangeSourceConfig.loadInfo = intent.enabled
|
||||||
_uiState.update { it.copy(loadInfo = intent.enabled) }
|
_uiState.update { it.copy(loadInfo = intent.enabled) }
|
||||||
refreshResults()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
is ChangeChapterSourceIntent.SetLoadToc -> {
|
is ChangeChapterSourceIntent.SetLoadToc -> {
|
||||||
ChangeSourceConfig.loadToc = intent.enabled
|
ChangeSourceConfig.loadToc = intent.enabled
|
||||||
_uiState.update { it.copy(loadToc = intent.enabled) }
|
_uiState.update { it.copy(loadToc = intent.enabled) }
|
||||||
refreshResults()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
is ChangeChapterSourceIntent.SetLoadWordCount -> {
|
is ChangeChapterSourceIntent.SetLoadWordCount -> {
|
||||||
|
|||||||
Reference in new issue
Block a user