mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
优化
This commit is contained in:
@@ -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
|
||||
|
||||
/**
|
||||
* 本地书籍书源标志
|
||||
*/
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package io.legado.app.ui.book.manga.entities
|
||||
|
||||
|
||||
data class MangaContent(
|
||||
var mChapterIndex: Int = 0,//总章节位置
|
||||
var chapterSize: Int,//总章节数量
|
||||
|
||||
Reference in New Issue
Block a user