From fd77ef0705360ba367363b149eb80c7c8035ee4a Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Thu, 6 Mar 2025 14:41:47 +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 --- .../main/java/io/legado/app/constant/BookType.kt | 2 ++ .../java/io/legado/app/data/entities/SearchBook.kt | 8 ++++++++ .../java/io/legado/app/help/book/BookExtensions.kt | 13 ++++--------- .../legado/app/help/source/BookSourceExtensions.kt | 11 +++++++++++ .../java/io/legado/app/model/webBook/BookList.kt | 2 +- .../java/io/legado/app/model/webBook/WebBook.kt | 2 +- .../ui/book/changesource/ChangeBookSourceDialog.kt | 9 +++------ .../book/changesource/ChangeBookSourceViewModel.kt | 9 +++++---- .../io/legado/app/ui/book/manga/MangaViewModel.kt | 4 +--- .../app/ui/book/manga/entities/MangaContent.kt | 1 - 10 files changed, 36 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/io/legado/app/constant/BookType.kt b/app/src/main/java/io/legado/app/constant/BookType.kt index 92ee9ef37..fcdd0bd8e 100644 --- a/app/src/main/java/io/legado/app/constant/BookType.kt +++ b/app/src/main/java/io/legado/app/constant/BookType.kt @@ -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 + /** * 本地书籍书源标志 */ diff --git a/app/src/main/java/io/legado/app/data/entities/SearchBook.kt b/app/src/main/java/io/legado/app/data/entities/SearchBook.kt index 29f59717c..2b327b6d7 100644 --- a/app/src/main/java/io/legado/app/data/entities/SearchBook.kt +++ b/app/src/main/java/io/legado/app/data/entities/SearchBook.kt @@ -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, 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 12a0c0782..3d499c8f6 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 @@ -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 diff --git a/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt b/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt index bae097215..2208218e5 100644 --- a/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt +++ b/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt @@ -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 + } +} diff --git a/app/src/main/java/io/legado/app/model/webBook/BookList.kt b/app/src/main/java/io/legado/app/model/webBook/BookList.kt index 2f5d51998..d8a1ba56b 100644 --- a/app/src/main/java/io/legado/app/model/webBook/BookList.kt +++ b/app/src/main/java/io/legado/app/model/webBook/BookList.kt @@ -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 diff --git a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt index 247f11309..f446a370c 100644 --- a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt @@ -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 diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt index 1d17aaf38..89397a7af 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt @@ -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) diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt index 8f069375e..d0b7e1d08 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt @@ -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, source: BookSource) -> Unit ): Coroutine, 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) diff --git a/app/src/main/java/io/legado/app/ui/book/manga/MangaViewModel.kt b/app/src/main/java/io/legado/app/ui/book/manga/MangaViewModel.kt index 636687635..4a96783d6 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/MangaViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/manga/MangaViewModel.kt @@ -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 { diff --git a/app/src/main/java/io/legado/app/ui/book/manga/entities/MangaContent.kt b/app/src/main/java/io/legado/app/ui/book/manga/entities/MangaContent.kt index 464ad1bff..9ab23d87a 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/entities/MangaContent.kt +++ b/app/src/main/java/io/legado/app/ui/book/manga/entities/MangaContent.kt @@ -1,6 +1,5 @@ package io.legado.app.ui.book.manga.entities - data class MangaContent( var mChapterIndex: Int = 0,//总章节位置 var chapterSize: Int,//总章节数量