|
|
|
@ -14,7 +14,6 @@ import io.legado.app.data.appDb |
|
|
|
|
import io.legado.app.data.entities.Book |
|
|
|
|
import io.legado.app.data.entities.BookChapter |
|
|
|
|
import io.legado.app.data.entities.BookProgress |
|
|
|
|
import io.legado.app.data.entities.BookSource |
|
|
|
|
import io.legado.app.exception.NoStackTraceException |
|
|
|
|
import io.legado.app.help.AppWebDav |
|
|
|
|
import io.legado.app.help.BookHelp |
|
|
|
@ -93,7 +92,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { |
|
|
|
|
if (ReadBook.durChapterIndex > ReadBook.chapterSize - 1) { |
|
|
|
|
ReadBook.durChapterIndex = ReadBook.chapterSize - 1 |
|
|
|
|
} |
|
|
|
|
ReadBook.loadContent(resetPageOffset = isSameBook) |
|
|
|
|
ReadBook.loadContent(resetPageOffset = false) |
|
|
|
|
} |
|
|
|
|
if (!isSameBook || !BaseReadAloudService.isRun) { |
|
|
|
|
syncBookProgress(book) |
|
|
|
@ -210,20 +209,11 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { |
|
|
|
|
/** |
|
|
|
|
* 换源 |
|
|
|
|
*/ |
|
|
|
|
fun changeTo(source: BookSource, book: Book, toc: List<BookChapter>) { |
|
|
|
|
fun changeTo(book: Book, toc: List<BookChapter>) { |
|
|
|
|
changeSourceCoroutine?.cancel() |
|
|
|
|
changeSourceCoroutine = execute { |
|
|
|
|
ReadBook.upMsg(context.getString(R.string.loading)) |
|
|
|
|
ReadBook.book?.changeTo(book, toc) |
|
|
|
|
val nextChapter = toc.getOrElse(book.durChapterIndex) { |
|
|
|
|
toc.first() |
|
|
|
|
} |
|
|
|
|
WebBook.getContentAwait( |
|
|
|
|
bookSource = source, |
|
|
|
|
book = book, |
|
|
|
|
bookChapter = toc[book.durChapterIndex], |
|
|
|
|
nextChapterUrl = nextChapter.url |
|
|
|
|
) |
|
|
|
|
appDb.bookDao.insert(book) |
|
|
|
|
appDb.bookChapterDao.insert(*toc.toTypedArray()) |
|
|
|
|
ReadBook.resetData(book) |
|
|
|
@ -250,11 +240,25 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { |
|
|
|
|
WebBook.getBookInfoAwait(source, book) |
|
|
|
|
} |
|
|
|
|
val toc = WebBook.getChapterListAwait(source, book).getOrThrow() |
|
|
|
|
changeTo(source, book, toc) |
|
|
|
|
return@execute |
|
|
|
|
val chapter = toc.getOrElse(book.durChapterIndex) { |
|
|
|
|
toc.last() |
|
|
|
|
} |
|
|
|
|
val nextChapter = toc.getOrElse(chapter.index) { |
|
|
|
|
toc.first() |
|
|
|
|
} |
|
|
|
|
kotlin.runCatching { |
|
|
|
|
WebBook.getContentAwait( |
|
|
|
|
bookSource = source, |
|
|
|
|
book = book, |
|
|
|
|
bookChapter = chapter, |
|
|
|
|
nextChapterUrl = nextChapter.url |
|
|
|
|
) |
|
|
|
|
changeTo(book, toc) |
|
|
|
|
return@execute |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
throw NoStackTraceException("没有搜索到 ${name}(${author})") |
|
|
|
|
throw NoStackTraceException("没有合适书源") |
|
|
|
|
}.onStart { |
|
|
|
|
ReadBook.upMsg(context.getString(R.string.source_auto_changing)) |
|
|
|
|
}.onError { |
|
|
|
|