|
@@ -7,6 +7,7 @@ import androidx.lifecycle.viewModelScope
|
|
|
import io.legado.app.R
|
|
import io.legado.app.R
|
|
|
import io.legado.app.base.BaseViewModel
|
|
import io.legado.app.base.BaseViewModel
|
|
|
import io.legado.app.constant.AppLog
|
|
import io.legado.app.constant.AppLog
|
|
|
|
|
+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
|
|
@@ -30,6 +31,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
|
|
|
var inBookshelf = false
|
|
var inBookshelf = false
|
|
|
var bookSource: BookSource? = null
|
|
var bookSource: BookSource? = null
|
|
|
private var changeSourceCoroutine: Coroutine<*>? = null
|
|
private var changeSourceCoroutine: Coroutine<*>? = null
|
|
|
|
|
+ var isImportBookOnLine = false
|
|
|
|
|
|
|
|
fun initData(intent: Intent) {
|
|
fun initData(intent: Intent) {
|
|
|
execute {
|
|
execute {
|
|
@@ -73,9 +75,10 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
|
|
|
upCoverByRule(book)
|
|
upCoverByRule(book)
|
|
|
bookSource = if (book.isLocalBook()) null else
|
|
bookSource = if (book.isLocalBook()) null else
|
|
|
appDb.bookSourceDao.getBookSource(book.origin)
|
|
appDb.bookSourceDao.getBookSource(book.origin)
|
|
|
|
|
+ isImportBookOnLine = bookSource?.bookSourceType ?: BookType.local == BookType.file
|
|
|
if (book.tocUrl.isEmpty()) {
|
|
if (book.tocUrl.isEmpty()) {
|
|
|
loadBookInfo(book)
|
|
loadBookInfo(book)
|
|
|
- } else {
|
|
|
|
|
|
|
+ } else if (!isImportBookOnLine) {
|
|
|
val chapterList = appDb.bookChapterDao.getChapterList(book.bookUrl)
|
|
val chapterList = appDb.bookChapterDao.getChapterList(book.bookUrl)
|
|
|
if (chapterList.isNotEmpty()) {
|
|
if (chapterList.isNotEmpty()) {
|
|
|
chapterListData.postValue(chapterList)
|
|
chapterListData.postValue(chapterList)
|
|
@@ -108,7 +111,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
|
|
|
execute(scope) {
|
|
execute(scope) {
|
|
|
if (book.isLocalBook()) {
|
|
if (book.isLocalBook()) {
|
|
|
loadChapter(book, scope)
|
|
loadChapter(book, scope)
|
|
|
- } else {
|
|
|
|
|
|
|
+ } else if (!isImportBookOnLine) {
|
|
|
bookSource?.let { bookSource ->
|
|
bookSource?.let { bookSource ->
|
|
|
WebBook.getBookInfo(this, bookSource, book, canReName = canReName)
|
|
WebBook.getBookInfo(this, bookSource, book, canReName = canReName)
|
|
|
.onSuccess(IO) {
|
|
.onSuccess(IO) {
|
|
@@ -282,4 +285,28 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ fun importBookFileOnLine() {
|
|
|
|
|
+ execute {
|
|
|
|
|
+ //下载类书源的目录链接视为文件链接
|
|
|
|
|
+ val book = bookData.value!!
|
|
|
|
|
+ val fileUrl = book.tocUrl
|
|
|
|
|
+ //切下载链接获取文件名
|
|
|
|
|
+ var fileName = fileUrl.substringAfterLast("/")
|
|
|
|
|
+ if (fileName.isEmpty()) {
|
|
|
|
|
+ fileName = book.name
|
|
|
|
|
+ }
|
|
|
|
|
+ LocalBook.importFile(fileUrl, fileName, bookSource, book)
|
|
|
|
|
+ }.onSuccess {
|
|
|
|
|
+ bookData.postValue(it)
|
|
|
|
|
+ LocalBook.getChapterList(it).let { toc ->
|
|
|
|
|
+ chapterListData.postValue(toc)
|
|
|
|
|
+ }
|
|
|
|
|
+ isImportBookOnLine = false
|
|
|
|
|
+ inBookshelf = true
|
|
|
|
|
+ }.onError {
|
|
|
|
|
+ context.toastOnUi("自动导入出错\n${it.localizedMessage}")
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|