优化
This commit is contained in:
@@ -14,6 +14,7 @@ import io.legado.app.constant.PageAnim
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.book.getFolderNameNoCache
|
||||
import io.legado.app.help.book.isEpub
|
||||
import io.legado.app.help.book.isImage
|
||||
import io.legado.app.help.book.simulatedTotalChapterNum
|
||||
@@ -21,14 +22,12 @@ import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.config.ReadBookConfig
|
||||
import io.legado.app.model.ReadBook
|
||||
import io.legado.app.utils.GSON
|
||||
import io.legado.app.utils.MD5Utils
|
||||
import io.legado.app.utils.fromJsonObject
|
||||
import kotlinx.parcelize.IgnoredOnParcel
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import java.nio.charset.Charset
|
||||
import java.time.LocalDate
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
|
||||
@Parcelize
|
||||
@TypeConverters(Book.Converters::class)
|
||||
@@ -316,12 +315,6 @@ data class Book(
|
||||
return folderName!!
|
||||
}
|
||||
|
||||
fun getFolderNameNoCache(): String {
|
||||
return name.replace(AppPattern.fileNameRegex, "").let {
|
||||
it.substring(0, min(9, it.length)) + MD5Utils.md5Encode16(bookUrl)
|
||||
}
|
||||
}
|
||||
|
||||
fun toSearchBook() = SearchBook(
|
||||
name = name,
|
||||
author = author,
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.net.Uri
|
||||
import com.script.buildScriptBindings
|
||||
import com.script.rhino.RhinoScriptEngine
|
||||
import io.legado.app.constant.AppLog
|
||||
import io.legado.app.constant.AppPattern
|
||||
import io.legado.app.constant.BookSourceType
|
||||
import io.legado.app.constant.BookType
|
||||
import io.legado.app.data.appDb
|
||||
@@ -17,6 +18,7 @@ import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.model.localBook.LocalBook
|
||||
import io.legado.app.utils.FileDoc
|
||||
import io.legado.app.utils.GSON
|
||||
import io.legado.app.utils.MD5Utils
|
||||
import io.legado.app.utils.exists
|
||||
import io.legado.app.utils.find
|
||||
import io.legado.app.utils.inputStream
|
||||
@@ -277,6 +279,12 @@ fun Book.updateTo(newBook: Book): Book {
|
||||
return newBook
|
||||
}
|
||||
|
||||
fun Book.getFolderNameNoCache(): String {
|
||||
return name.replace(AppPattern.fileNameRegex, "").let {
|
||||
it.substring(0, min(9, it.length)) + MD5Utils.md5Encode16(bookUrl)
|
||||
}
|
||||
}
|
||||
|
||||
fun Book.getBookSource(): BookSource? {
|
||||
return appDb.bookSourceDao.getBookSource(origin)
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.book.isImage
|
||||
import io.legado.app.help.book.isLocal
|
||||
import io.legado.app.help.book.isPdf
|
||||
import io.legado.app.help.book.isSameNameAuthor
|
||||
import io.legado.app.help.book.readSimulating
|
||||
import io.legado.app.help.book.simulatedTotalChapterNum
|
||||
import io.legado.app.help.book.update
|
||||
@@ -921,6 +922,18 @@ object ReadBook : CoroutineScope by MainScope() {
|
||||
}
|
||||
}
|
||||
|
||||
fun onChapterListUpdated(newBook: Book) {
|
||||
if (newBook.isSameNameAuthor(book)) {
|
||||
book = newBook
|
||||
chapterSize = newBook.totalChapterNum
|
||||
simulatedChapterSize = newBook.simulatedTotalChapterNum()
|
||||
if (simulatedChapterSize > 0 && durChapterIndex > simulatedChapterSize - 1) {
|
||||
durChapterIndex = simulatedChapterSize - 1
|
||||
}
|
||||
clearTextChapter()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册回调
|
||||
*/
|
||||
|
||||
@@ -32,7 +32,6 @@ import io.legado.app.help.book.isPdf
|
||||
import io.legado.app.help.book.isUmd
|
||||
import io.legado.app.help.book.removeLocalUriCache
|
||||
import io.legado.app.help.book.simulatedTotalChapterNum
|
||||
import io.legado.app.help.book.update
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.lib.webdav.WebDav
|
||||
import io.legado.app.lib.webdav.WebDavException
|
||||
@@ -152,7 +151,7 @@ object LocalBook {
|
||||
list.getOrElse(book.simulatedTotalChapterNum() - 1) { list.last() }
|
||||
.getDisplayTitle(replaceRules, book.getUseReplaceRule())
|
||||
book.totalChapterNum = list.size
|
||||
book.update()
|
||||
book.latestChapterTime = System.currentTimeMillis()
|
||||
return list
|
||||
}
|
||||
|
||||
|
||||
@@ -21,9 +21,9 @@ import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.book.getExportFileName
|
||||
import io.legado.app.help.book.isLocal
|
||||
import io.legado.app.help.book.isLocalModified
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.model.ReadBook
|
||||
import io.legado.app.model.localBook.LocalBook
|
||||
import io.legado.app.ui.book.cache.CacheActivity
|
||||
import io.legado.app.utils.FileDoc
|
||||
@@ -212,15 +212,16 @@ class ExportBookService : BaseService() {
|
||||
}
|
||||
|
||||
private fun refreshChapterList(book: Book) {
|
||||
if (!book.isLocal || !book.isLocalModified()) {
|
||||
if (!book.isLocalModified()) {
|
||||
return
|
||||
}
|
||||
kotlin.runCatching {
|
||||
LocalBook.getChapterList(book)
|
||||
}.onSuccess {
|
||||
book.latestChapterTime = System.currentTimeMillis()
|
||||
appDb.bookChapterDao.delByBook(book.bookUrl)
|
||||
appDb.bookChapterDao.insert(*it.toTypedArray())
|
||||
appDb.bookDao.update(book)
|
||||
ReadBook.onChapterListUpdated(book)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@ import io.legado.app.help.book.isNotShelf
|
||||
import io.legado.app.help.book.isSameNameAuthor
|
||||
import io.legado.app.help.book.isWebFile
|
||||
import io.legado.app.help.book.removeType
|
||||
import io.legado.app.help.book.simulatedTotalChapterNum
|
||||
import io.legado.app.help.book.updateTo
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.lib.webdav.ObjectNotFoundException
|
||||
@@ -226,12 +225,8 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
|
||||
appDb.bookDao.update(book)
|
||||
appDb.bookChapterDao.delByBook(book.bookUrl)
|
||||
appDb.bookChapterDao.insert(*it.toTypedArray())
|
||||
if (book.isSameNameAuthor(ReadBook.book)) {
|
||||
ReadBook.book = book
|
||||
ReadBook.chapterSize = book.totalChapterNum
|
||||
ReadBook.simulatedChapterSize = book.simulatedTotalChapterNum()
|
||||
ReadBook.clearTextChapter()
|
||||
}
|
||||
ReadBook.onChapterListUpdated(book)
|
||||
bookData.postValue(book)
|
||||
chapterListData.postValue(it)
|
||||
}
|
||||
}.onError {
|
||||
@@ -258,12 +253,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
|
||||
}
|
||||
appDb.bookChapterDao.delByBook(oldBook.bookUrl)
|
||||
appDb.bookChapterDao.insert(*it.toTypedArray())
|
||||
if (book.isSameNameAuthor(ReadBook.book)) {
|
||||
ReadBook.book = book
|
||||
ReadBook.chapterSize = book.totalChapterNum
|
||||
ReadBook.simulatedChapterSize = book.simulatedTotalChapterNum()
|
||||
ReadBook.clearTextChapter()
|
||||
}
|
||||
ReadBook.onChapterListUpdated(book)
|
||||
}
|
||||
bookData.postValue(book)
|
||||
chapterListData.postValue(it)
|
||||
|
||||
@@ -136,7 +136,7 @@ class BookInfoEditActivity :
|
||||
book.customIntro = if (customIntro == book.intro) null else customIntro
|
||||
BookHelp.updateCacheFolder(oldBook, book)
|
||||
viewModel.saveBook(book) {
|
||||
setResult(Activity.RESULT_OK)
|
||||
setResult(RESULT_OK)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package io.legado.app.ui.book.read
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.content.res.Configuration
|
||||
import android.net.Uri
|
||||
@@ -1578,7 +1577,7 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
ReadBook.book?.removeType(BookType.notShelf)
|
||||
ReadBook.book?.save()
|
||||
ReadBook.inBookshelf = true
|
||||
setResult(Activity.RESULT_OK)
|
||||
setResult(RESULT_OK)
|
||||
}
|
||||
noButton { viewModel.removeFromBookshelf { super.finish() } }
|
||||
}
|
||||
|
||||
@@ -122,7 +122,6 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
||||
return
|
||||
}
|
||||
ReadBook.upMsg(null)
|
||||
ensureChapterExist()
|
||||
if (!isSameBook) {
|
||||
ReadBook.loadContent(resetPageOffset = true)
|
||||
} else {
|
||||
@@ -157,12 +156,6 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun ensureChapterExist() {
|
||||
if (ReadBook.simulatedChapterSize > 0 && ReadBook.durChapterIndex > ReadBook.simulatedChapterSize - 1) {
|
||||
ReadBook.durChapterIndex = ReadBook.simulatedChapterSize - 1
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载详情页
|
||||
*/
|
||||
@@ -183,7 +176,6 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
||||
fun loadChapterList(book: Book) {
|
||||
execute {
|
||||
if (loadChapterListAwait(book)) {
|
||||
ensureChapterExist()
|
||||
ReadBook.upMsg(null)
|
||||
ReadBook.loadContent(resetPageOffset = true)
|
||||
}
|
||||
@@ -194,13 +186,10 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
||||
if (book.isLocal) {
|
||||
kotlin.runCatching {
|
||||
LocalBook.getChapterList(book).let {
|
||||
book.latestChapterTime = System.currentTimeMillis()
|
||||
appDb.bookChapterDao.delByBook(book.bookUrl)
|
||||
appDb.bookChapterDao.insert(*it.toTypedArray())
|
||||
appDb.bookDao.update(book)
|
||||
ReadBook.chapterSize = it.size
|
||||
ReadBook.simulatedChapterSize = book.simulatedTotalChapterNum()
|
||||
ReadBook.clearTextChapter()
|
||||
ReadBook.onChapterListUpdated(book)
|
||||
}
|
||||
return true
|
||||
}.onFailure {
|
||||
@@ -229,8 +218,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
||||
}
|
||||
appDb.bookChapterDao.delByBook(oldBook.bookUrl)
|
||||
appDb.bookChapterDao.insert(*cList.toTypedArray())
|
||||
ReadBook.chapterSize = cList.size
|
||||
ReadBook.simulatedChapterSize = book.simulatedTotalChapterNum()
|
||||
ReadBook.onChapterListUpdated(book)
|
||||
return true
|
||||
}.onFailure {
|
||||
ReadBook.upMsg(context.getString(R.string.error_load_toc))
|
||||
|
||||
@@ -17,7 +17,6 @@ import io.legado.app.base.VMBaseActivity
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.databinding.ActivityChapterListBinding
|
||||
import io.legado.app.help.book.isLocalTxt
|
||||
import io.legado.app.help.book.simulatedTotalChapterNum
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.lib.theme.accentColor
|
||||
import io.legado.app.lib.theme.primaryTextColor
|
||||
@@ -198,9 +197,6 @@ class TocActivity : VMBaseActivity<ActivityChapterListBinding, TocViewModel>(),
|
||||
waitDialog.dismiss()
|
||||
ReadBook.book?.let { readBook ->
|
||||
if (readBook == book) {
|
||||
ReadBook.book = book
|
||||
ReadBook.chapterSize = book.totalChapterNum
|
||||
ReadBook.simulatedChapterSize = book.simulatedTotalChapterNum()
|
||||
ReadBook.upMsg(null)
|
||||
ReadBook.loadContent(resetPageOffset = true)
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import io.legado.app.constant.AppLog
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.model.ReadBook
|
||||
import io.legado.app.model.localBook.LocalBook
|
||||
import io.legado.app.utils.FileDoc
|
||||
import io.legado.app.utils.GSON
|
||||
@@ -38,10 +39,10 @@ class TocViewModel(application: Application) : BaseViewModel(application) {
|
||||
execute {
|
||||
appDb.bookDao.update(book)
|
||||
LocalBook.getChapterList(book).let {
|
||||
book.latestChapterTime = System.currentTimeMillis()
|
||||
appDb.bookChapterDao.delByBook(book.bookUrl)
|
||||
appDb.bookChapterDao.insert(*it.toTypedArray())
|
||||
appDb.bookDao.update(book)
|
||||
ReadBook.onChapterListUpdated(book)
|
||||
bookData.postValue(book)
|
||||
}
|
||||
}.onFinally {
|
||||
|
||||
@@ -17,10 +17,8 @@ import io.legado.app.help.DefaultData
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.book.addType
|
||||
import io.legado.app.help.book.isLocal
|
||||
import io.legado.app.help.book.isSameNameAuthor
|
||||
import io.legado.app.help.book.isUpError
|
||||
import io.legado.app.help.book.removeType
|
||||
import io.legado.app.help.book.simulatedTotalChapterNum
|
||||
import io.legado.app.help.book.sync
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.model.CacheBook
|
||||
@@ -169,12 +167,7 @@ class MainViewModel(application: Application) : BaseViewModel(application) {
|
||||
}
|
||||
appDb.bookChapterDao.delByBook(bookUrl)
|
||||
appDb.bookChapterDao.insert(*toc.toTypedArray())
|
||||
if (book.isSameNameAuthor(ReadBook.book)) {
|
||||
ReadBook.book = book
|
||||
ReadBook.chapterSize = book.totalChapterNum
|
||||
ReadBook.simulatedChapterSize = book.simulatedTotalChapterNum()
|
||||
ReadBook.clearTextChapter()
|
||||
}
|
||||
ReadBook.onChapterListUpdated(book)
|
||||
addDownload(source, book)
|
||||
}.onFailure {
|
||||
AppLog.put("${book.name} 更新目录失败\n${it.localizedMessage}", it)
|
||||
|
||||
Reference in New Issue
Block a user