[优化] 增加 阅读Sigma 的书源回调 (@Luoyacheng)
This commit is contained in:
@@ -184,12 +184,6 @@ object ReadBook : CoroutineScope by MainScope(), KoinComponent {
|
||||
} else {
|
||||
appDb.bookSourceDao.getBookSource(book.origin)?.let {
|
||||
bookSource = it
|
||||
SourceCallBack.callBackBook(
|
||||
SourceCallBack.START_READ,
|
||||
it,
|
||||
book,
|
||||
curTextChapter?.chapter
|
||||
)
|
||||
if (book.getImageStyle().isNullOrBlank()) {
|
||||
var imageStyle = it.getContentRule().imageStyle
|
||||
if (imageStyle.isNullOrBlank() && (book.isImage || book.isPdf)) {
|
||||
@@ -639,9 +633,11 @@ object ReadBook : CoroutineScope by MainScope(), KoinComponent {
|
||||
loadContent(durChapterIndex - 1, resetPageOffset = resetPageOffset)
|
||||
}
|
||||
|
||||
fun loadOrUpContent() {
|
||||
fun loadOrUpContent(success: (() -> Unit)? = null) {
|
||||
if (curTextChapter == null) {
|
||||
loadContent(durChapterIndex)
|
||||
loadContent(durChapterIndex) {
|
||||
success?.invoke()
|
||||
}
|
||||
} else {
|
||||
callBack?.upContent()
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ object SourceCallBack {
|
||||
source: BookSource?,
|
||||
book: Book,
|
||||
chapter: BookChapter?,
|
||||
bookType: Int = 0,
|
||||
noCall: (() -> Unit)? = null
|
||||
) {
|
||||
if (source == null || !source.eventListener) {
|
||||
@@ -55,7 +56,7 @@ object SourceCallBack {
|
||||
return
|
||||
}
|
||||
activity.lifecycleScope.launch(IO) {
|
||||
val java = SourceLoginJsExtensions(activity, source)
|
||||
val java = SourceLoginJsExtensions(activity, source, bookType)
|
||||
kotlin.runCatching {
|
||||
val result = runScriptWithContext {
|
||||
source.evalJS(jsStr) {
|
||||
|
||||
@@ -45,6 +45,7 @@ import io.legado.app.help.book.removeType
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.model.AudioPlay
|
||||
import io.legado.app.model.BookCover
|
||||
import io.legado.app.model.SourceCallBack
|
||||
import io.legado.app.service.AudioPlayService
|
||||
import io.legado.app.ui.about.AppLogDialog
|
||||
import io.legado.app.ui.book.changesource.ChangeBookSourceDialog
|
||||
@@ -164,6 +165,13 @@ class AudioPlayActivity :
|
||||
}
|
||||
}
|
||||
|
||||
override fun finish() {
|
||||
if (AudioPlay.inBookshelf) {
|
||||
callBackBookEnd()
|
||||
return super.finish()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.audio_play, menu)
|
||||
return super.onCompatCreateOptionsMenu(menu)
|
||||
@@ -190,7 +198,20 @@ class AudioPlayActivity :
|
||||
}
|
||||
R.id.menu_media_control -> AppConfig.systemMediaControlCompatibilityChange = !AppConfig.systemMediaControlCompatibilityChange
|
||||
R.id.menu_wake_lock -> AppConfig.audioPlayUseWakeLock = !AppConfig.audioPlayUseWakeLock
|
||||
R.id.menu_copy_audio_url -> sendToClip(AudioPlayService.url)
|
||||
R.id.menu_copy_audio_url -> {
|
||||
AudioPlay.book?.let {
|
||||
SourceCallBack.callBackBtn(
|
||||
this,
|
||||
SourceCallBack.CLICK_COPY_PLAY_URL,
|
||||
AudioPlay.bookSource,
|
||||
it,
|
||||
AudioPlay.durChapter,
|
||||
BookType.audio
|
||||
) {
|
||||
sendToClip(AudioPlayService.url)
|
||||
}
|
||||
}
|
||||
}
|
||||
R.id.menu_edit_source -> AudioPlay.bookSource?.let {
|
||||
sourceEditResult.launch {
|
||||
putExtra("sourceUrl", it.bookSourceUrl)
|
||||
@@ -202,6 +223,15 @@ class AudioPlayActivity :
|
||||
return super.onCompatOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
private fun callBackBookEnd() {
|
||||
SourceCallBack.callBackBook(
|
||||
SourceCallBack.END_READ,
|
||||
AudioPlay.bookSource,
|
||||
AudioPlay.book,
|
||||
AudioPlay.durChapter
|
||||
)
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
binding.ivTimer.isEnabled = false
|
||||
binding.ivFastForward.isEnabled = false
|
||||
|
||||
@@ -84,7 +84,6 @@ import io.legado.app.utils.gone
|
||||
import io.legado.app.utils.longToastOnUi
|
||||
import io.legado.app.utils.openFileUri
|
||||
import io.legado.app.utils.sendToClip
|
||||
import io.legado.app.utils.shareWithQr
|
||||
import io.legado.app.utils.showDialogFragment
|
||||
import io.legado.app.utils.startActivity
|
||||
import io.legado.app.utils.toastOnUi
|
||||
@@ -270,9 +269,21 @@ class BookInfoActivity :
|
||||
|
||||
R.id.menu_share_it -> {
|
||||
viewModel.getBook()?.let {
|
||||
val bookJson = GSON.toJson(it)
|
||||
val shareStr = "${it.bookUrl}#$bookJson"
|
||||
shareWithQr(shareStr, it.name)
|
||||
SourceCallBack.callBackBtn(
|
||||
this,
|
||||
SourceCallBack.CLICK_SHARE_BOOK,
|
||||
viewModel.bookSource,
|
||||
it,
|
||||
null
|
||||
) {
|
||||
val bookJson = GSON.toJson(it)
|
||||
val shareStr = "${it.bookUrl}#$bookJson"
|
||||
val intent = Intent(Intent.ACTION_SEND)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
intent.putExtra(Intent.EXTRA_TEXT, shareStr)
|
||||
intent.type = "text/plain"
|
||||
startActivity(Intent.createChooser(intent, it.name))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -294,12 +305,28 @@ class BookInfoActivity :
|
||||
R.id.menu_top -> viewModel.topBook()
|
||||
R.id.menu_set_source_variable -> setSourceVariable()
|
||||
R.id.menu_set_book_variable -> setBookVariable()
|
||||
R.id.menu_copy_book_url -> viewModel.getBook()?.bookUrl?.let {
|
||||
sendToClip(it)
|
||||
R.id.menu_copy_book_url -> viewModel.getBook()?.let {
|
||||
SourceCallBack.callBackBtn(
|
||||
this,
|
||||
SourceCallBack.CLICK_COPY_BOOK_URL,
|
||||
viewModel.bookSource,
|
||||
it,
|
||||
null
|
||||
) {
|
||||
sendToClip(it.bookUrl)
|
||||
}
|
||||
}
|
||||
|
||||
R.id.menu_copy_toc_url -> viewModel.getBook()?.tocUrl?.let {
|
||||
sendToClip(it)
|
||||
R.id.menu_copy_toc_url -> viewModel.getBook()?.let {
|
||||
SourceCallBack.callBackBtn(
|
||||
this,
|
||||
SourceCallBack.CLICK_COPY_TOC_URL,
|
||||
viewModel.bookSource,
|
||||
it,
|
||||
null
|
||||
) {
|
||||
sendToClip(it.tocUrl)
|
||||
}
|
||||
}
|
||||
|
||||
R.id.menu_can_update -> {
|
||||
@@ -314,7 +341,18 @@ class BookInfoActivity :
|
||||
}
|
||||
}
|
||||
|
||||
R.id.menu_clear_cache -> viewModel.clearCache()
|
||||
R.id.menu_clear_cache -> viewModel.getBook()?.let {
|
||||
SourceCallBack.callBackBtn(
|
||||
this,
|
||||
SourceCallBack.CLICK_CLEAR_CACHE,
|
||||
viewModel.bookSource,
|
||||
it,
|
||||
null
|
||||
) {
|
||||
viewModel.clearCache(it)
|
||||
}
|
||||
}
|
||||
|
||||
R.id.menu_log -> showDialogFragment<AppLogDialog>()
|
||||
R.id.menu_split_long_chapter -> {
|
||||
upLoading(true)
|
||||
|
||||
@@ -32,6 +32,7 @@ import io.legado.app.model.AudioPlay
|
||||
import io.legado.app.model.BookCover
|
||||
import io.legado.app.model.ReadBook
|
||||
import io.legado.app.model.ReadManga
|
||||
import io.legado.app.model.SourceCallBack
|
||||
import io.legado.app.model.analyzeRule.AnalyzeUrl
|
||||
import io.legado.app.model.localBook.LocalBook
|
||||
import io.legado.app.model.webBook.WebBook
|
||||
@@ -446,7 +447,7 @@ class BookInfoViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
fun addToBookshelf(success: (() -> Unit)?) {
|
||||
fun addToBookshelf(success: (() -> Unit)?) { //点击书架按钮或在加分组时触发
|
||||
execute {
|
||||
bookData.value?.let { book ->
|
||||
book.removeType(BookType.notShelf)
|
||||
@@ -464,6 +465,7 @@ class BookInfoViewModel(
|
||||
AudioPlay.book = book
|
||||
}
|
||||
book.save()
|
||||
SourceCallBack.callBackBook(SourceCallBack.ADD_BOOK_SHELF, bookSource, book)
|
||||
}
|
||||
chapterListData.value?.let {
|
||||
appDb.bookChapterDao.insert(*it.toTypedArray())
|
||||
@@ -496,13 +498,13 @@ class BookInfoViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
fun clearCache() {
|
||||
fun clearCache(book: Book) {
|
||||
execute {
|
||||
BookHelp.clearCache(bookData.value!!)
|
||||
if (ReadBook.book?.bookUrl == bookData.value!!.bookUrl) {
|
||||
BookHelp.clearCache(book)
|
||||
if (ReadBook.book?.bookUrl == book.bookUrl) {
|
||||
ReadBook.clearTextChapter()
|
||||
}
|
||||
if (ReadManga.book?.bookUrl == bookData.value!!.bookUrl) {
|
||||
if (ReadManga.book?.bookUrl == book.bookUrl) {
|
||||
ReadManga.clearMangaChapter()
|
||||
}
|
||||
}.onSuccess {
|
||||
@@ -512,7 +514,6 @@ class BookInfoViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun addToBookshelf(book: Book, toc: List<BookChapter>, success: (() -> Unit)? = null) {
|
||||
execute {
|
||||
book.removeType(BookType.notShelf)
|
||||
|
||||
@@ -14,6 +14,7 @@ import io.legado.app.help.book.isLocal
|
||||
import io.legado.app.help.book.removeType
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.model.SourceCallBack
|
||||
import io.legado.app.model.localBook.LocalBook
|
||||
import io.legado.app.model.webBook.WebBook
|
||||
import io.legado.app.utils.FileUtils
|
||||
@@ -57,6 +58,9 @@ class BookshelfManageViewModel(application: Application) : BaseViewModel(applica
|
||||
books.forEach {
|
||||
if (it.isLocal) {
|
||||
LocalBook.deleteBook(it, deleteOriginal)
|
||||
} else {
|
||||
val source = appDb.bookSourceDao.getBookSource(it.origin)
|
||||
SourceCallBack.callBackBook(SourceCallBack.DEL_BOOK_SHELF, source, it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,6 +62,7 @@ import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.dialogs.selector
|
||||
import io.legado.app.model.ReadAloud
|
||||
import io.legado.app.model.ReadBook
|
||||
import io.legado.app.model.SourceCallBack
|
||||
import io.legado.app.model.analyzeRule.AnalyzeRule
|
||||
import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setChapter
|
||||
import io.legado.app.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext
|
||||
@@ -1864,6 +1865,22 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
}
|
||||
}
|
||||
|
||||
override fun finish() {
|
||||
if (ReadBook.inBookshelf) {
|
||||
callBackBookEnd()
|
||||
return super.finish()
|
||||
}
|
||||
}
|
||||
|
||||
private fun callBackBookEnd() {
|
||||
SourceCallBack.callBackBook(
|
||||
SourceCallBack.END_READ,
|
||||
ReadBook.bookSource,
|
||||
ReadBook.book,
|
||||
ReadBook.curTextChapter?.chapter
|
||||
)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
tts?.clearTts()
|
||||
|
||||
@@ -25,6 +25,7 @@ import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.model.ImageProvider
|
||||
import io.legado.app.model.ReadAloud
|
||||
import io.legado.app.model.ReadBook
|
||||
import io.legado.app.model.SourceCallBack
|
||||
import io.legado.app.model.localBook.LocalBook
|
||||
import io.legado.app.model.webBook.WebBook
|
||||
import io.legado.app.service.BaseReadAloudService
|
||||
@@ -117,14 +118,32 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
||||
}
|
||||
ReadBook.upMsg(null)
|
||||
if (!isSameBook) {
|
||||
ReadBook.loadContent(resetPageOffset = true)
|
||||
ReadBook.loadContent(resetPageOffset = true) {
|
||||
ReadBook.bookSource?.let {
|
||||
SourceCallBack.callBackBook(
|
||||
SourceCallBack.START_READ,
|
||||
it,
|
||||
book,
|
||||
ReadBook.curTextChapter?.chapter
|
||||
)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ReadBook.loadOrUpContent()
|
||||
ReadBook.loadOrUpContent {
|
||||
ReadBook.bookSource?.let {
|
||||
SourceCallBack.callBackBook(
|
||||
SourceCallBack.START_READ,
|
||||
it,
|
||||
book,
|
||||
ReadBook.curTextChapter?.chapter
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ReadBook.chapterChanged) {
|
||||
// 有章节跳转不同步阅读进度
|
||||
ReadBook.chapterChanged = false
|
||||
} else if (!isSameBook || !BaseReadAloudService.isRun) {
|
||||
} else if (!(isSameBook && BaseReadAloudService.isRun) && ReadBook.inBookshelf) {
|
||||
if (AppConfig.syncBookProgressPlus) {
|
||||
ReadBook.syncProgress({ progress -> ReadBook.callBack?.sureNewProgress(progress) })
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user