Horis 1 год назад
Родитель
Сommit
083a003dc9

+ 2 - 0
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 allBookType = text or image or audio or webFile
 
 
+    const val allBookTypeLocal = text or image or audio or webFile or local
+
     /**
     /**
      * 本地书籍书源标志
      * 本地书籍书源标志
      */
      */

+ 8 - 0
app/src/main/java/io/legado/app/data/entities/SearchBook.kt

@@ -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,

+ 4 - 9
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) {
 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

+ 11 - 0
app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt

@@ -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
+    }
+}

+ 1 - 1
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.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

+ 1 - 1
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.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

+ 3 - 6
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 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())
-            ?.and(BookType.notShelf.inv())
-        if (searchBook.type == oldBookType) {
+        val oldBookType = callBack?.oldBook?.type ?: 0
+        if (searchBook.sameBookTypeLocal(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)

+ 5 - 4
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.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)

+ 1 - 3
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.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(index)
-            } ?: ReadManga.loadContent()
+            ReadManga.loadContent()
         }.onError {
         }.onError {
             AppLog.put("换源失败\n$it", it, true)
             AppLog.put("换源失败\n$it", it, true)
         }.onFinally {
         }.onFinally {

+ 0 - 1
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
 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,//总章节数量