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 c6c62aa4b..7996e3ea9 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 @@ -151,11 +151,26 @@ data class Book( delete() App.db.bookDao().insert(newBook) } - + fun delete() { if (ReadBook.book?.bookUrl == bookUrl) { ReadBook.book = null } App.db.bookDao().delete(this) } + + fun upInfoFromOld(oldBook: Book?) { + oldBook?.let { + group = oldBook.group + durChapterIndex = oldBook.durChapterIndex + durChapterPos = oldBook.durChapterPos + durChapterTitle = oldBook.durChapterTitle + customCoverUrl = oldBook.customCoverUrl + customIntro = oldBook.customIntro + order = oldBook.order + if (coverUrl.isNullOrEmpty()) { + coverUrl = oldBook.getDisplayCover() + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/service/help/ReadBook.kt b/app/src/main/java/io/legado/app/service/help/ReadBook.kt index 25858c022..e8485261c 100644 --- a/app/src/main/java/io/legado/app/service/help/ReadBook.kt +++ b/app/src/main/java/io/legado/app/service/help/ReadBook.kt @@ -85,8 +85,10 @@ object ReadBook { } fun upMsg(msg: String?) { - this.msg = msg - callBack?.upContent() + if (this.msg != msg) { + this.msg = msg + callBack?.upContent() + } } fun moveToNextPage() { @@ -263,9 +265,11 @@ object ReadBook { } private fun download(chapter: BookChapter, resetPageOffset: Boolean) { - book?.let { book -> - webBook?.getContent(book, chapter) - ?.onSuccess(Dispatchers.IO) { content -> + val book = book + val webBook = webBook + if (book != null && webBook != null) { + webBook.getContent(book, chapter) + .onSuccess(Dispatchers.IO) { content -> if (content.isEmpty()) { contentLoadFinish( book, @@ -276,10 +280,15 @@ object ReadBook { removeLoading(chapter.index) } else { BookHelp.saveContent(book, chapter, content) - contentLoadFinish(book, chapter, content, resetPageOffset = resetPageOffset) + contentLoadFinish( + book, + chapter, + content, + resetPageOffset = resetPageOffset + ) removeLoading(chapter.index) } - }?.onError { + }.onError { contentLoadFinish( book, chapter, @@ -288,6 +297,16 @@ object ReadBook { ) removeLoading(chapter.index) } + } else if (book != null) { + contentLoadFinish( + book, + chapter, + "没有书源", + resetPageOffset = resetPageOffset + ) + removeLoading(chapter.index) + } else { + removeLoading(chapter.index) } } diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceDialog.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceDialog.kt index 7ebb4c0db..bbd627466 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceDialog.kt @@ -166,19 +166,8 @@ class ChangeSourceDialog : BaseDialogFragment(), override fun changeTo(searchBook: SearchBook) { val book = searchBook.toBook() - callBack?.oldBook?.let { oldBook -> - book.group = oldBook.group - book.durChapterIndex = oldBook.durChapterIndex - book.durChapterPos = oldBook.durChapterPos - book.durChapterTitle = oldBook.durChapterTitle - book.customCoverUrl = oldBook.customCoverUrl - book.customIntro = oldBook.customIntro - book.order = oldBook.order - if (book.coverUrl.isNullOrEmpty()) { - book.coverUrl = oldBook.getDisplayCover() - } - callBack?.changeTo(book) - } + book.upInfoFromOld(callBack?.oldBook) + callBack?.changeTo(book) dismiss() } 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 908a968af..b8efe1cee 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 @@ -46,11 +46,11 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { private fun initBook(book: Book) { if (ReadBook.book?.bookUrl != book.bookUrl) { ReadBook.resetData(book) + isInitFinish = true if (!book.isLocalBook() && ReadBook.webBook == null) { autoChangeSource(book.name, book.author) return } - isInitFinish = true ReadBook.chapterSize = App.db.bookChapterDao().getChapterCount(book.bookUrl) if (ReadBook.chapterSize == 0) { if (book.tocUrl.isEmpty()) { @@ -65,6 +65,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { ReadBook.loadContent(resetPageOffset = true) } } else { + ReadBook.book = book if (ReadBook.durChapterIndex != book.durChapterIndex) { ReadBook.durChapterIndex = book.durChapterIndex ReadBook.durPageIndex = book.durChapterPos @@ -72,7 +73,6 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { ReadBook.curTextChapter = null ReadBook.nextTextChapter = null } - ReadBook.book!!.group = book.group ReadBook.titleDate.postValue(book.name) ReadBook.upWebBook(book) isInitFinish = true @@ -160,20 +160,24 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { execute { ReadBook.upMsg(null) ReadBook.book?.changeTo(newBook) + ReadBook.book = newBook + App.db.bookSourceDao().getBookSource(newBook.origin)?.let { + ReadBook.webBook = WebBook(it) + } ReadBook.prevTextChapter = null ReadBook.curTextChapter = null ReadBook.nextTextChapter = null withContext(Main) { ReadBook.callBack?.upContent() } - ReadBook.book = newBook - App.db.bookSourceDao().getBookSource(newBook.origin)?.let { - ReadBook.webBook = WebBook(it) - } if (newBook.tocUrl.isEmpty()) { - loadBookInfo(newBook) { upChangeDurChapterIndex(newBook, it) } + loadBookInfo(newBook) { + upChangeDurChapterIndex(newBook, it) + } } else { - loadChapterList(newBook) { upChangeDurChapterIndex(newBook, it) } + loadChapterList(newBook) { + upChangeDurChapterIndex(newBook, it) + } } } } @@ -188,8 +192,10 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { .searchBookSuspend(this, name, variableBook = variableBook) .getOrNull(0)?.let { if (it.name == name && (it.author == author || author == "")) { - changeTo(it.toBook()) - return@forEach + val book = it.toBook() + book.upInfoFromOld(ReadBook.book) + changeTo(book) + return@execute } } } catch (e: Exception) { @@ -215,6 +221,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { App.db.bookDao().update(book) App.db.bookChapterDao().insert(*chapters.toTypedArray()) ReadBook.chapterSize = chapters.size + ReadBook.upMsg(null) ReadBook.loadContent(resetPageOffset = true) } }