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