diff --git a/app/src/main/assets/help/ruleHelp.md b/app/src/main/assets/help/ruleHelp.md index e6c1643a4..554509612 100644 --- a/app/src/main/assets/help/ruleHelp.md +++ b/app/src/main/assets/help/ruleHelp.md @@ -152,5 +152,4 @@ let options = { ``` * 购买操作 -> 返回购买链接,可直接填写链接或者JavaScript -> 可用变量 book chapter java(不支持AnalyzeRule函数) source \ No newline at end of file +> 可直接填写链接或者JavaScript,如果执行结果是字符串链接将会自动打开浏览器 \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceAdapter.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceAdapter.kt index e94f8671b..8859584f0 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceAdapter.kt @@ -1,7 +1,6 @@ package io.legado.app.ui.book.changesource import android.content.Context -import android.graphics.Color import android.os.Bundle import android.view.View import android.view.ViewGroup @@ -14,7 +13,10 @@ import io.legado.app.base.adapter.DiffRecyclerAdapter import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.data.entities.SearchBook import io.legado.app.databinding.ItemChangeSourceBinding -import io.legado.app.utils.* +import io.legado.app.utils.getCompatColor +import io.legado.app.utils.gone +import io.legado.app.utils.invisible +import io.legado.app.utils.visible import splitties.init.appCtx import splitties.views.onLongClick diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt index a886df99e..ed4ba5443 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt @@ -83,27 +83,23 @@ open class ChangeBookSourceViewModel(application: Application) : BaseViewModel(a searchCallback = null } }.map { - searchBooks.sortedWith(object : Comparator { - override fun compare(o1: SearchBook, o2: SearchBook): Int { - val o1bs = SourceConfig.getBookScore(o1.origin, o1.name, o1.author) - val o2bs = SourceConfig.getBookScore(o2.origin, o2.name, o2.author) - if (o1bs - o2bs > 0) { - return -1 - } else if (o1bs - o2bs < 0) { - return 1 - } else { + searchBooks.sortedWith { o1, o2 -> + val o1bs = SourceConfig.getBookScore(o1.origin, o1.name, o1.author) + val o2bs = SourceConfig.getBookScore(o2.origin, o2.name, o2.author) + when { + o1bs - o2bs > 0 -> -1 + o1bs - o2bs < 0 -> 1 + else -> { val o1ss = SourceConfig.getSourceScore(o1.origin) val o2ss = SourceConfig.getSourceScore(o2.origin) - if (o1ss - o2ss > 0) { - return -1 - } else if (o1ss - o2ss < 0) { - return 1 - } else { - return o1.originOrder - o2.originOrder + when { + o1ss - o2ss > 0 -> -1 + o1ss - o2ss < 0 -> 1 + else -> o1.originOrder - o2.originOrder } } } - }) + } }.flowOn(IO) @Volatile diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 7fcab742b..81edc9ea7 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -36,6 +36,7 @@ import io.legado.app.lib.dialogs.selector import io.legado.app.lib.theme.accentColor import io.legado.app.model.ReadAloud import io.legado.app.model.ReadBook +import io.legado.app.model.analyzeRule.AnalyzeRule import io.legado.app.receiver.TimeBatteryReceiver import io.legado.app.service.BaseReadAloudService import io.legado.app.ui.about.AppLogDialog @@ -962,31 +963,41 @@ class ReadBookActivity : BaseReadBookActivity(), } override fun payAction() { - Coroutine.async(this) { - val book = ReadBook.book ?: throw NoStackTraceException("no book") + ReadBook.book?.let { book -> + if (book.isLocalBook()) return val chapter = appDb.bookChapterDao.getChapter(book.bookUrl, ReadBook.durChapterIndex) - ?: throw NoStackTraceException("no chapter") - val source = ReadBook.bookSource ?: throw NoStackTraceException("no book source") - val payAction = source.getContentRule().payAction - if (payAction.isNullOrEmpty()) { - throw NoStackTraceException("no pay action") - } - JsUtils.evalJs(payAction) { - it["java"] = source - it["source"] = source - it["book"] = book - it["chapter"] = chapter - } - }.onSuccess { - if (it.isNotBlank()) { - startActivity { - putExtra("title", getString(R.string.chapter_pay)) - putExtra("url", it) - IntentData.put(it, ReadBook.bookSource?.getHeaderMap(true)) + if (chapter == null) { + toastOnUi("no chapter") + return + } + alert(R.string.chapter_pay) { + setMessage(chapter.title) + yesButton { + Coroutine.async { + val source = ReadBook.bookSource ?: throw NoStackTraceException("no book source") + val payAction = source.getContentRule().payAction + if (payAction.isNullOrEmpty()) { + throw NoStackTraceException("no pay action") + } + val analyzeRule = AnalyzeRule(book, source) + analyzeRule.setBaseUrl(chapter.url) + analyzeRule.chapter = chapter + analyzeRule.evalJS(payAction).toString() + }.onSuccess { + if (it.isNotBlank()) { + startActivity { + putExtra("title", R.string.chapter_pay) + putExtra("url", it) + IntentData.put(it, ReadBook.bookSource?.getHeaderMap(true)) + } + } + }.onError { + AppLog.putDebug(it.localizedMessage) + toastOnUi(it.localizedMessage) + } } + noButton() } - }.onError { - toastOnUi(it.localizedMessage) } }