From e78a13e5cdcd2d4c53c1bb0cbe69e2aada3460dd Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Fri, 28 Feb 2025 16:01:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/data/entities/Book.kt | 9 +-------- .../io/legado/app/help/book/BookExtensions.kt | 8 ++++++++ .../main/java/io/legado/app/model/ReadBook.kt | 13 +++++++++++++ .../io/legado/app/model/localBook/LocalBook.kt | 3 +-- .../io/legado/app/service/ExportBookService.kt | 7 ++++--- .../legado/app/ui/book/info/BookInfoViewModel.kt | 16 +++------------- .../ui/book/info/edit/BookInfoEditActivity.kt | 2 +- .../legado/app/ui/book/read/ReadBookActivity.kt | 3 +-- .../legado/app/ui/book/read/ReadBookViewModel.kt | 16 ++-------------- .../io/legado/app/ui/book/toc/TocActivity.kt | 4 ---- .../io/legado/app/ui/book/toc/TocViewModel.kt | 3 ++- .../java/io/legado/app/ui/main/MainViewModel.kt | 9 +-------- 12 files changed, 37 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/entities/Book.kt b/app/src/main/java/io/legado/app/data/entities/Book.kt index b9c9d0f72..ae9bdbc35 100644 --- a/app/src/main/java/io/legado/app/data/entities/Book.kt +++ b/app/src/main/java/io/legado/app/data/entities/Book.kt @@ -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, diff --git a/app/src/main/java/io/legado/app/help/book/BookExtensions.kt b/app/src/main/java/io/legado/app/help/book/BookExtensions.kt index 09760f90f..12a0c0782 100644 --- a/app/src/main/java/io/legado/app/help/book/BookExtensions.kt +++ b/app/src/main/java/io/legado/app/help/book/BookExtensions.kt @@ -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) } diff --git a/app/src/main/java/io/legado/app/model/ReadBook.kt b/app/src/main/java/io/legado/app/model/ReadBook.kt index 173f1b3b2..f163c9566 100644 --- a/app/src/main/java/io/legado/app/model/ReadBook.kt +++ b/app/src/main/java/io/legado/app/model/ReadBook.kt @@ -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() + } + } + /** * 注册回调 */ diff --git a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt index ef33d948a..393829eff 100644 --- a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt +++ b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt @@ -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 } diff --git a/app/src/main/java/io/legado/app/service/ExportBookService.kt b/app/src/main/java/io/legado/app/service/ExportBookService.kt index 7ff38237f..20439e327 100644 --- a/app/src/main/java/io/legado/app/service/ExportBookService.kt +++ b/app/src/main/java/io/legado/app/service/ExportBookService.kt @@ -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) } } diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt index bb553712f..46c5e5139 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt @@ -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) diff --git a/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt index 8d9ddacd4..3a2b651af 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditActivity.kt @@ -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() } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 1f1b89eb4..daf3aa755 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -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() } } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 73d64e3b9..babd70e8a 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -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)) diff --git a/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt b/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt index 2d9f2cc35..b101c8abc 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt @@ -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(), 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) } diff --git a/app/src/main/java/io/legado/app/ui/book/toc/TocViewModel.kt b/app/src/main/java/io/legado/app/ui/book/toc/TocViewModel.kt index 316ac5bca..c2b9b1d26 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/TocViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/TocViewModel.kt @@ -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 { diff --git a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt index 8f4e46a52..c82afd03d 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt @@ -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)