pull/42/head
parent
befe856e75
commit
8c66391703
@ -1,9 +1,110 @@ |
|||||||
package io.legado.app.ui.audio |
package io.legado.app.ui.audio |
||||||
|
|
||||||
import android.app.Application |
import android.app.Application |
||||||
|
import android.content.Intent |
||||||
|
import androidx.lifecycle.MutableLiveData |
||||||
|
import io.legado.app.App |
||||||
|
import io.legado.app.R |
||||||
import io.legado.app.base.BaseViewModel |
import io.legado.app.base.BaseViewModel |
||||||
|
import io.legado.app.constant.BookType |
||||||
|
import io.legado.app.data.entities.Book |
||||||
|
import io.legado.app.data.entities.BookChapter |
||||||
|
import io.legado.app.model.WebBook |
||||||
|
import io.legado.app.ui.book.read.ReadBookViewModel |
||||||
|
import kotlinx.coroutines.Dispatchers |
||||||
|
|
||||||
class AudioPlayViewModel(application: Application) : BaseViewModel(application) { |
class AudioPlayViewModel(application: Application) : BaseViewModel(application) { |
||||||
|
var inBookshelf = false |
||||||
|
var bookData = MutableLiveData<Book>() |
||||||
|
val chapterListFinish = MutableLiveData<Boolean>() |
||||||
|
var chapterSize = 0 |
||||||
|
var callBack: ReadBookViewModel.CallBack? = null |
||||||
|
var durChapterIndex = 0 |
||||||
|
var durPageIndex = 0 |
||||||
|
var isLocalBook = true |
||||||
|
var webBook: WebBook? = null |
||||||
|
|
||||||
|
fun initData(intent: Intent) { |
||||||
|
execute { |
||||||
|
inBookshelf = intent.getBooleanExtra("inBookshelf", true) |
||||||
|
val bookUrl = intent.getStringExtra("bookUrl") |
||||||
|
val book = if (!bookUrl.isNullOrEmpty()) { |
||||||
|
App.db.bookDao().getBook(bookUrl) |
||||||
|
} else { |
||||||
|
App.db.bookDao().lastReadBook |
||||||
|
} |
||||||
|
book?.let { |
||||||
|
durChapterIndex = book.durChapterIndex |
||||||
|
durPageIndex = book.durChapterPos |
||||||
|
isLocalBook = book.origin == BookType.local |
||||||
|
bookData.postValue(book) |
||||||
|
App.db.bookSourceDao().getBookSource(book.origin)?.let { |
||||||
|
webBook = WebBook(it) |
||||||
|
} |
||||||
|
val count = App.db.bookChapterDao().getChapterCount(book.bookUrl) |
||||||
|
if (count == 0) { |
||||||
|
if (book.tocUrl.isEmpty()) { |
||||||
|
loadBookInfo(book) |
||||||
|
} else { |
||||||
|
loadChapterList(book) |
||||||
|
} |
||||||
|
} else { |
||||||
|
if (durChapterIndex > count - 1) { |
||||||
|
durChapterIndex = count - 1 |
||||||
|
} |
||||||
|
chapterSize = count |
||||||
|
chapterListFinish.postValue(true) |
||||||
|
} |
||||||
|
} |
||||||
|
saveRead(book) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private fun loadBookInfo( |
||||||
|
book: Book, |
||||||
|
changeDruChapterIndex: ((chapters: List<BookChapter>) -> Unit)? = null |
||||||
|
) { |
||||||
|
execute { |
||||||
|
webBook?.getBookInfo(book, this) |
||||||
|
?.onSuccess { |
||||||
|
loadChapterList(book, changeDruChapterIndex) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private fun loadChapterList( |
||||||
|
book: Book, |
||||||
|
changeDruChapterIndex: ((chapters: List<BookChapter>) -> Unit)? = null |
||||||
|
) { |
||||||
|
execute { |
||||||
|
webBook?.getChapterList(book, this) |
||||||
|
?.onSuccess(Dispatchers.IO) { cList -> |
||||||
|
if (!cList.isNullOrEmpty()) { |
||||||
|
if (changeDruChapterIndex == null) { |
||||||
|
App.db.bookChapterDao().insert(*cList.toTypedArray()) |
||||||
|
chapterSize = cList.size |
||||||
|
chapterListFinish.postValue(true) |
||||||
|
} else { |
||||||
|
changeDruChapterIndex(cList) |
||||||
|
} |
||||||
|
} else { |
||||||
|
toast(R.string.error_load_toc) |
||||||
|
} |
||||||
|
}?.onError { |
||||||
|
toast(R.string.error_load_toc) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
fun saveRead(book: Book? = bookData.value) { |
||||||
|
execute { |
||||||
|
book?.let { book -> |
||||||
|
book.lastCheckCount = 0 |
||||||
|
book.durChapterTime = System.currentTimeMillis() |
||||||
|
book.durChapterIndex = durChapterIndex |
||||||
|
book.durChapterPos = durPageIndex |
||||||
|
App.db.bookDao().update(book) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
} |
} |
Loading…
Reference in new issue