[优化] 增加了部分 Sigma 版本的书源回调参数
This commit is contained in:
@@ -102,6 +102,7 @@ object AudioPlay : CoroutineScope by MainScope() {
|
||||
durPlayUrl = ""
|
||||
durAudioSize = 0
|
||||
upDurChapter()
|
||||
SourceCallBack.callBackBook(SourceCallBack.START_READ, bookSource, book, durChapter)
|
||||
postEvent(EventBus.AUDIO_BUFFER_PROGRESS, 0)
|
||||
}
|
||||
|
||||
@@ -360,6 +361,7 @@ object AudioPlay : CoroutineScope by MainScope() {
|
||||
ContentProcessor.get(book.name, book.origin).getTitleReplaceRules(),
|
||||
book.getUseReplaceRule()
|
||||
)
|
||||
SourceCallBack.callBackBook(SourceCallBack.SAVE_READ, bookSource, book, it)
|
||||
}
|
||||
}
|
||||
book.update()
|
||||
|
||||
@@ -56,7 +56,7 @@ object SourceCallBack {
|
||||
}
|
||||
activity.lifecycleScope.launch(IO) {
|
||||
val java = SourceLoginJsExtensions(activity, source)
|
||||
runCatching {
|
||||
kotlin.runCatching {
|
||||
val result = runScriptWithContext {
|
||||
source.evalJS(jsStr) {
|
||||
put("event", event)
|
||||
@@ -114,7 +114,7 @@ object SourceCallBack {
|
||||
val jsStr = source.getContentRule().callBackJs
|
||||
if (jsStr.isNullOrEmpty()) return
|
||||
scope.launch(IO) {
|
||||
runCatching {
|
||||
kotlin.runCatching {
|
||||
withTimeout(30000L) {
|
||||
runScriptWithContext {
|
||||
source.evalJS(jsStr) {
|
||||
|
||||
@@ -59,6 +59,7 @@ import io.legado.app.help.config.LocalConfig
|
||||
import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.dialogs.selector
|
||||
import io.legado.app.model.BookCover
|
||||
import io.legado.app.model.SourceCallBack
|
||||
import io.legado.app.model.remote.RemoteBookWebDav
|
||||
import io.legado.app.ui.about.AppLogDialog
|
||||
import io.legado.app.ui.book.audio.AudioPlayActivity
|
||||
@@ -828,15 +829,47 @@ class BookInfoActivity :
|
||||
}
|
||||
tvAuthor.setOnClickListener {
|
||||
viewModel.getBook(false)?.let { book ->
|
||||
startActivity<SearchActivity> {
|
||||
putExtra("key", book.author)
|
||||
SourceCallBack.callBackBtn(
|
||||
this@BookInfoActivity,
|
||||
SourceCallBack.CLICK_AUTHOR,
|
||||
viewModel.bookSource,
|
||||
book,
|
||||
null
|
||||
) {
|
||||
startActivity<SearchActivity> {
|
||||
putExtra("key", book.author)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tvAuthor.setOnLongClickListener {
|
||||
viewModel.getBook(false)?.let { book ->
|
||||
SourceCallBack.callBackBtn(
|
||||
this@BookInfoActivity,
|
||||
SourceCallBack.LONG_CLICK_AUTHOR,
|
||||
viewModel.bookSource,
|
||||
book,
|
||||
null
|
||||
) {
|
||||
startActivity<SearchActivity> {
|
||||
putExtra("key", book.author)
|
||||
}
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
tvName.setOnClickListener {
|
||||
viewModel.getBook(false)?.let { book ->
|
||||
startActivity<SearchActivity> {
|
||||
putExtra("key", book.name)
|
||||
SourceCallBack.callBackBtn(
|
||||
this@BookInfoActivity,
|
||||
SourceCallBack.CLICK_BOOK_NAME,
|
||||
viewModel.bookSource,
|
||||
book,
|
||||
null
|
||||
) {
|
||||
startActivity<SearchActivity> {
|
||||
putExtra("key", book.name)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -922,14 +955,14 @@ class BookInfoActivity :
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
private fun deleteBook() {
|
||||
viewModel.getBook()?.let {
|
||||
viewModel.getBook()?.let { book ->
|
||||
if (LocalConfig.bookInfoDeleteAlert) {
|
||||
alert(
|
||||
titleResource = R.string.draw,
|
||||
messageResource = R.string.sure_del
|
||||
) {
|
||||
var checkBox: CheckBox? = null
|
||||
if (it.isLocal) {
|
||||
if (book.isLocal) {
|
||||
checkBox = CheckBox(this@BookInfoActivity).apply {
|
||||
setText(R.string.delete_book_file)
|
||||
isChecked = LocalConfig.deleteBookOriginal
|
||||
@@ -944,6 +977,11 @@ class BookInfoActivity :
|
||||
if (checkBox != null) {
|
||||
LocalConfig.deleteBookOriginal = checkBox.isChecked
|
||||
}
|
||||
SourceCallBack.callBackBook(
|
||||
SourceCallBack.DEL_BOOK_SHELF,
|
||||
viewModel.bookSource,
|
||||
book
|
||||
) //确认后删除书架
|
||||
viewModel.delBook(LocalConfig.deleteBookOriginal) {
|
||||
setResult(RESULT_OK)
|
||||
finish()
|
||||
@@ -952,6 +990,11 @@ class BookInfoActivity :
|
||||
noButton()
|
||||
}
|
||||
} else {
|
||||
SourceCallBack.callBackBook(
|
||||
SourceCallBack.DEL_BOOK_SHELF,
|
||||
viewModel.bookSource,
|
||||
book
|
||||
) //点按钮直接删除书架
|
||||
viewModel.delBook(LocalConfig.deleteBookOriginal) {
|
||||
setResult(RESULT_OK)
|
||||
finish()
|
||||
|
||||
@@ -23,6 +23,7 @@ import io.legado.app.help.book.sync
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.model.CacheBook
|
||||
import io.legado.app.model.ReadBook
|
||||
import io.legado.app.model.SourceCallBack
|
||||
import io.legado.app.model.webBook.WebBook
|
||||
import io.legado.app.service.CacheBookService
|
||||
import io.legado.app.utils.onEachParallel
|
||||
@@ -53,6 +54,7 @@ class MainViewModel(application: Application) : BaseViewModel(application) {
|
||||
val onUpBooksLiveData = MutableLiveData<Int>()
|
||||
private var upTocJob: Job? = null
|
||||
private var cacheBookJob: Job? = null
|
||||
private val eventListenerSource = ConcurrentHashMap<BookSource, Boolean>()
|
||||
val booksListRecycledViewPool = RecycledViewPool().apply {
|
||||
setMaxRecycledViews(0, 30)
|
||||
}
|
||||
@@ -156,6 +158,17 @@ class MainViewModel(application: Application) : BaseViewModel(application) {
|
||||
}
|
||||
return
|
||||
}
|
||||
if (source.eventListener) {
|
||||
// 使用 putIfAbsent 确保只添加一次
|
||||
if (eventListenerSource.putIfAbsent(source, true) == null) {
|
||||
// 通知监听事件的书源,书架刷新开始
|
||||
SourceCallBack.callBackSource(
|
||||
viewModelScope,
|
||||
SourceCallBack.START_SHELF_REFRESH,
|
||||
source
|
||||
)
|
||||
}
|
||||
}
|
||||
kotlin.runCatching {
|
||||
val oldBook = book.copy()
|
||||
if (book.tocUrl.isBlank()) {
|
||||
@@ -210,13 +223,24 @@ class MainViewModel(application: Application) : BaseViewModel(application) {
|
||||
* 缓存书籍
|
||||
*/
|
||||
private fun cacheBook() {
|
||||
//开始缓存前,通知监听事件的书源,书架刷新已完成
|
||||
eventListenerSource.toList().forEach {
|
||||
SourceCallBack.callBackSource(
|
||||
viewModelScope,
|
||||
SourceCallBack.END_SHELF_REFRESH,
|
||||
it.first
|
||||
)
|
||||
}
|
||||
eventListenerSource.clear()
|
||||
if (AppConfig.preDownloadNum == 0) return
|
||||
cacheBookJob?.cancel()
|
||||
cacheBookJob = viewModelScope.launch(upTocPool) {
|
||||
launch {
|
||||
while (isActive && CacheBook.isRun) {
|
||||
val isOnUpTocBooksEmpty =
|
||||
onUpTocBooks.isEmpty()
|
||||
//有目录更新是不缓存,优先更新目录,现在更多网站限制并发
|
||||
CacheBook.setWorkingState(waitUpTocBooks.isEmpty() && onUpTocBooks.isEmpty())
|
||||
CacheBook.setWorkingState(waitUpTocBooks.isEmpty() && isOnUpTocBooksEmpty)
|
||||
delay(1000)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user