优化
This commit is contained in:
@@ -58,6 +58,8 @@ object BookType {
|
|||||||
*/
|
*/
|
||||||
const val allBookType = text or image or audio or webFile
|
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
|
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(
|
fun toBook() = Book(
|
||||||
name = name,
|
name = name,
|
||||||
author = author,
|
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) {
|
fun Book.sync(oldBook: Book) {
|
||||||
val curBook = appDb.bookDao.getBook(oldBook.bookUrl)!!
|
val curBook = appDb.bookDao.getBook(oldBook.bookUrl)!!
|
||||||
durChapterTime = curBook.durChapterTime
|
durChapterTime = curBook.durChapterTime
|
||||||
@@ -259,6 +250,10 @@ fun Book.update() {
|
|||||||
appDb.bookDao.update(this)
|
appDb.bookDao.update(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Book.primaryStr(): String {
|
||||||
|
return origin + bookUrl
|
||||||
|
}
|
||||||
|
|
||||||
fun Book.updateTo(newBook: Book): Book {
|
fun Book.updateTo(newBook: Book): Book {
|
||||||
newBook.durChapterIndex = durChapterIndex
|
newBook.durChapterIndex = durChapterIndex
|
||||||
newBook.durChapterTitle = durChapterTitle
|
newBook.durChapterTitle = durChapterTitle
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package io.legado.app.help.source
|
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.BookSource
|
||||||
import io.legado.app.data.entities.BookSourcePart
|
import io.legado.app.data.entities.BookSourcePart
|
||||||
import io.legado.app.data.entities.rule.ExploreKind
|
import io.legado.app.data.entities.rule.ExploreKind
|
||||||
@@ -90,3 +92,12 @@ suspend fun BookSourcePart.clearExploreKindsCache() {
|
|||||||
exploreKindsMap.remove(exploreKindsKey)
|
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.data.entities.rule.BookListRule
|
||||||
import io.legado.app.exception.NoStackTraceException
|
import io.legado.app.exception.NoStackTraceException
|
||||||
import io.legado.app.help.book.BookHelp
|
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.Debug
|
||||||
import io.legado.app.model.analyzeRule.AnalyzeRule
|
import io.legado.app.model.analyzeRule.AnalyzeRule
|
||||||
import io.legado.app.model.analyzeRule.AnalyzeUrl
|
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.data.entities.SearchBook
|
||||||
import io.legado.app.exception.NoStackTraceException
|
import io.legado.app.exception.NoStackTraceException
|
||||||
import io.legado.app.help.book.addType
|
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.book.removeAllBookType
|
||||||
import io.legado.app.help.coroutine.Coroutine
|
import io.legado.app.help.coroutine.Coroutine
|
||||||
import io.legado.app.help.http.StrResponse
|
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.Debug
|
||||||
import io.legado.app.model.analyzeRule.AnalyzeRule
|
import io.legado.app.model.analyzeRule.AnalyzeRule
|
||||||
import io.legado.app.model.analyzeRule.AnalyzeUrl
|
import io.legado.app.model.analyzeRule.AnalyzeUrl
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
|||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.base.BaseDialogFragment
|
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.constant.EventBus
|
||||||
import io.legado.app.data.appDb
|
import io.legado.app.data.appDb
|
||||||
import io.legado.app.data.entities.Book
|
import io.legado.app.data.entities.Book
|
||||||
@@ -307,9 +305,8 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun changeTo(searchBook: SearchBook) {
|
override fun changeTo(searchBook: SearchBook) {
|
||||||
val oldBookType = callBack?.oldBook?.type?.and(BookType.updateError.inv())
|
val oldBookType = callBack?.oldBook?.type ?: 0
|
||||||
?.and(BookType.notShelf.inv())
|
if (searchBook.sameBookTypeLocal(oldBookType)) {
|
||||||
if (searchBook.type == oldBookType) {
|
|
||||||
changeSource(searchBook) {
|
changeSource(searchBook) {
|
||||||
dismissAllowingStateLoss()
|
dismissAllowingStateLoss()
|
||||||
}
|
}
|
||||||
@@ -369,7 +366,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
|
|||||||
private fun changeSource(searchBook: SearchBook, onSuccess: (() -> Unit)? = null) {
|
private fun changeSource(searchBook: SearchBook, onSuccess: (() -> Unit)? = null) {
|
||||||
waitDialog.setText(R.string.load_toc)
|
waitDialog.setText(R.string.load_toc)
|
||||||
waitDialog.show()
|
waitDialog.show()
|
||||||
val book = viewModel.bookMap[searchBook.bookUrl] ?: searchBook.toBook()
|
val book = viewModel.bookMap[searchBook.primaryStr()] ?: searchBook.toBook()
|
||||||
val coroutine = viewModel.getToc(book, {
|
val coroutine = viewModel.getToc(book, {
|
||||||
waitDialog.dismiss()
|
waitDialog.dismiss()
|
||||||
toastOnUi(it)
|
toastOnUi(it)
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import io.legado.app.data.entities.SearchBook
|
|||||||
import io.legado.app.exception.NoStackTraceException
|
import io.legado.app.exception.NoStackTraceException
|
||||||
import io.legado.app.help.book.BookHelp
|
import io.legado.app.help.book.BookHelp
|
||||||
import io.legado.app.help.book.ContentProcessor
|
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.book.releaseHtmlData
|
||||||
import io.legado.app.help.config.AppConfig
|
import io.legado.app.help.config.AppConfig
|
||||||
import io.legado.app.help.config.SourceConfig
|
import io.legado.app.help.config.SourceConfig
|
||||||
@@ -278,9 +279,9 @@ open class ChangeBookSourceViewModel(application: Application) : BaseViewModel(a
|
|||||||
}
|
}
|
||||||
if (tocMapChapterCount < 30000) {
|
if (tocMapChapterCount < 30000) {
|
||||||
tocMapChapterCount += chapters.size
|
tocMapChapterCount += chapters.size
|
||||||
tocMap[book.bookUrl] = chapters
|
tocMap[book.primaryStr()] = chapters
|
||||||
}
|
}
|
||||||
bookMap[book.bookUrl] = book
|
bookMap[book.primaryStr()] = book
|
||||||
book.releaseHtmlData()
|
book.releaseHtmlData()
|
||||||
if (AppConfig.changeSourceLoadWordCount) {
|
if (AppConfig.changeSourceLoadWordCount) {
|
||||||
loadBookWordCount(source, book, chapters)
|
loadBookWordCount(source, book, chapters)
|
||||||
@@ -429,13 +430,13 @@ open class ChangeBookSourceViewModel(application: Application) : BaseViewModel(a
|
|||||||
onSuccess: (toc: List<BookChapter>, source: BookSource) -> Unit
|
onSuccess: (toc: List<BookChapter>, source: BookSource) -> Unit
|
||||||
): Coroutine<Pair<List<BookChapter>, BookSource>> {
|
): Coroutine<Pair<List<BookChapter>, BookSource>> {
|
||||||
return execute {
|
return execute {
|
||||||
val toc = tocMap[book.bookUrl]
|
val toc = tocMap[book.primaryStr()]
|
||||||
if (toc != null) {
|
if (toc != null) {
|
||||||
val source = appDb.bookSourceDao.getBookSource(book.origin)
|
val source = appDb.bookSourceDao.getBookSource(book.origin)
|
||||||
return@execute Pair(toc, source!!)
|
return@execute Pair(toc, source!!)
|
||||||
}
|
}
|
||||||
val result = getToc(book).getOrThrow()
|
val result = getToc(book).getOrThrow()
|
||||||
tocMap[book.bookUrl] = result.first
|
tocMap[book.primaryStr()] = result.first
|
||||||
return@execute result
|
return@execute result
|
||||||
}.onSuccess {
|
}.onSuccess {
|
||||||
onSuccess.invoke(it.first, it.second)
|
onSuccess.invoke(it.first, it.second)
|
||||||
|
|||||||
@@ -201,9 +201,7 @@ class MangaViewModel(application: Application) : BaseViewModel(application) {
|
|||||||
appDb.bookDao.insert(book)
|
appDb.bookDao.insert(book)
|
||||||
appDb.bookChapterDao.insert(*toc.toTypedArray())
|
appDb.bookChapterDao.insert(*toc.toTypedArray())
|
||||||
ReadManga.resetData(book)
|
ReadManga.resetData(book)
|
||||||
toc.find { it.title.contains(ReadManga.chapterTitle) }?.run {
|
ReadManga.loadContent()
|
||||||
ReadManga.loadContent(index)
|
|
||||||
} ?: ReadManga.loadContent()
|
|
||||||
}.onError {
|
}.onError {
|
||||||
AppLog.put("换源失败\n$it", it, true)
|
AppLog.put("换源失败\n$it", it, true)
|
||||||
}.onFinally {
|
}.onFinally {
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package io.legado.app.ui.book.manga.entities
|
package io.legado.app.ui.book.manga.entities
|
||||||
|
|
||||||
|
|
||||||
data class MangaContent(
|
data class MangaContent(
|
||||||
var mChapterIndex: Int = 0,//总章节位置
|
var mChapterIndex: Int = 0,//总章节位置
|
||||||
var chapterSize: Int,//总章节数量
|
var chapterSize: Int,//总章节数量
|
||||||
|
|||||||
Reference in New Issue
Block a user