This commit is contained in:
Horis
2025-03-06 14:41:47 +08:00
parent c3a696c9fb
commit fd77ef0705
10 changed files with 36 additions and 25 deletions

View File

@@ -58,6 +58,8 @@ object BookType {
*/
const val allBookType = text or image or audio or webFile
const val allBookTypeLocal = text or image or audio or webFile or local
/**
* 本地书籍书源标志
*/

View File

@@ -109,6 +109,14 @@ data class SearchBook(
tocHtml = null
}
fun primaryStr(): String {
return origin + bookUrl
}
fun sameBookTypeLocal(bookType: Int): Boolean {
return type and BookType.allBookTypeLocal == bookType and BookType.allBookTypeLocal
}
fun toBook() = Book(
name = name,
author = author,

View File

@@ -232,15 +232,6 @@ fun Book.upType() {
}
}
fun BookSource.getBookType(): Int {
return when (bookSourceType) {
BookSourceType.file -> BookType.text or BookType.webFile
BookSourceType.image -> BookType.image
BookSourceType.audio -> BookType.audio
else -> BookType.text
}
}
fun Book.sync(oldBook: Book) {
val curBook = appDb.bookDao.getBook(oldBook.bookUrl)!!
durChapterTime = curBook.durChapterTime
@@ -259,6 +250,10 @@ fun Book.update() {
appDb.bookDao.update(this)
}
fun Book.primaryStr(): String {
return origin + bookUrl
}
fun Book.updateTo(newBook: Book): Book {
newBook.durChapterIndex = durChapterIndex
newBook.durChapterTitle = durChapterTitle

View File

@@ -1,5 +1,7 @@
package io.legado.app.help.source
import io.legado.app.constant.BookSourceType
import io.legado.app.constant.BookType
import io.legado.app.data.entities.BookSource
import io.legado.app.data.entities.BookSourcePart
import io.legado.app.data.entities.rule.ExploreKind
@@ -90,3 +92,12 @@ suspend fun BookSourcePart.clearExploreKindsCache() {
exploreKindsMap.remove(exploreKindsKey)
}
}
fun BookSource.getBookType(): Int {
return when (bookSourceType) {
BookSourceType.file -> BookType.text or BookType.webFile
BookSourceType.image -> BookType.image
BookSourceType.audio -> BookType.audio
else -> BookType.text
}
}

View File

@@ -7,7 +7,7 @@ import io.legado.app.data.entities.SearchBook
import io.legado.app.data.entities.rule.BookListRule
import io.legado.app.exception.NoStackTraceException
import io.legado.app.help.book.BookHelp
import io.legado.app.help.book.getBookType
import io.legado.app.help.source.getBookType
import io.legado.app.model.Debug
import io.legado.app.model.analyzeRule.AnalyzeRule
import io.legado.app.model.analyzeRule.AnalyzeUrl

View File

@@ -8,10 +8,10 @@ import io.legado.app.data.entities.BookSourcePart
import io.legado.app.data.entities.SearchBook
import io.legado.app.exception.NoStackTraceException
import io.legado.app.help.book.addType
import io.legado.app.help.book.getBookType
import io.legado.app.help.book.removeAllBookType
import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.http.StrResponse
import io.legado.app.help.source.getBookType
import io.legado.app.model.Debug
import io.legado.app.model.analyzeRule.AnalyzeRule
import io.legado.app.model.analyzeRule.AnalyzeUrl

View File

@@ -17,8 +17,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R
import io.legado.app.base.BaseDialogFragment
import io.legado.app.constant.AppConst
import io.legado.app.constant.BookType
import io.legado.app.constant.EventBus
import io.legado.app.data.appDb
import io.legado.app.data.entities.Book
@@ -307,9 +305,8 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
}
override fun changeTo(searchBook: SearchBook) {
val oldBookType = callBack?.oldBook?.type?.and(BookType.updateError.inv())
?.and(BookType.notShelf.inv())
if (searchBook.type == oldBookType) {
val oldBookType = callBack?.oldBook?.type ?: 0
if (searchBook.sameBookTypeLocal(oldBookType)) {
changeSource(searchBook) {
dismissAllowingStateLoss()
}
@@ -369,7 +366,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
private fun changeSource(searchBook: SearchBook, onSuccess: (() -> Unit)? = null) {
waitDialog.setText(R.string.load_toc)
waitDialog.show()
val book = viewModel.bookMap[searchBook.bookUrl] ?: searchBook.toBook()
val book = viewModel.bookMap[searchBook.primaryStr()] ?: searchBook.toBook()
val coroutine = viewModel.getToc(book, {
waitDialog.dismiss()
toastOnUi(it)

View File

@@ -18,6 +18,7 @@ import io.legado.app.data.entities.SearchBook
import io.legado.app.exception.NoStackTraceException
import io.legado.app.help.book.BookHelp
import io.legado.app.help.book.ContentProcessor
import io.legado.app.help.book.primaryStr
import io.legado.app.help.book.releaseHtmlData
import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.SourceConfig
@@ -278,9 +279,9 @@ open class ChangeBookSourceViewModel(application: Application) : BaseViewModel(a
}
if (tocMapChapterCount < 30000) {
tocMapChapterCount += chapters.size
tocMap[book.bookUrl] = chapters
tocMap[book.primaryStr()] = chapters
}
bookMap[book.bookUrl] = book
bookMap[book.primaryStr()] = book
book.releaseHtmlData()
if (AppConfig.changeSourceLoadWordCount) {
loadBookWordCount(source, book, chapters)
@@ -429,13 +430,13 @@ open class ChangeBookSourceViewModel(application: Application) : BaseViewModel(a
onSuccess: (toc: List<BookChapter>, source: BookSource) -> Unit
): Coroutine<Pair<List<BookChapter>, BookSource>> {
return execute {
val toc = tocMap[book.bookUrl]
val toc = tocMap[book.primaryStr()]
if (toc != null) {
val source = appDb.bookSourceDao.getBookSource(book.origin)
return@execute Pair(toc, source!!)
}
val result = getToc(book).getOrThrow()
tocMap[book.bookUrl] = result.first
tocMap[book.primaryStr()] = result.first
return@execute result
}.onSuccess {
onSuccess.invoke(it.first, it.second)

View File

@@ -201,9 +201,7 @@ class MangaViewModel(application: Application) : BaseViewModel(application) {
appDb.bookDao.insert(book)
appDb.bookChapterDao.insert(*toc.toTypedArray())
ReadManga.resetData(book)
toc.find { it.title.contains(ReadManga.chapterTitle) }?.run {
ReadManga.loadContent(index)
} ?: ReadManga.loadContent()
ReadManga.loadContent()
}.onError {
AppLog.put("换源失败\n$it", it, true)
}.onFinally {

View File

@@ -1,6 +1,5 @@
package io.legado.app.ui.book.manga.entities
data class MangaContent(
var mChapterIndex: Int = 0,//总章节位置
var chapterSize: Int,//总章节数量