From 649e481d72d8ea3eef12e937a873a83a2b51e4ed Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 16 Jul 2023 21:04:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/help/JsEngine.kt | 19 +++++++++++ .../io/legado/app/ui/about/DonateFragment.kt | 21 ++++++++++++ .../main/java/io/legado/app/utils/JsUtils.kt | 34 ------------------- app/src/main/res/xml/donate.xml | 6 ++++ 4 files changed, 46 insertions(+), 34 deletions(-) create mode 100644 app/src/main/java/io/legado/app/help/JsEngine.kt delete mode 100644 app/src/main/java/io/legado/app/utils/JsUtils.kt diff --git a/app/src/main/java/io/legado/app/help/JsEngine.kt b/app/src/main/java/io/legado/app/help/JsEngine.kt new file mode 100644 index 000000000..0a2447ffd --- /dev/null +++ b/app/src/main/java/io/legado/app/help/JsEngine.kt @@ -0,0 +1,19 @@ +package io.legado.app.help + +import com.script.SimpleBindings +import com.script.rhino.RhinoScriptEngine +import io.legado.app.data.entities.BaseSource + +object JsEngine : JsExtensions { + + override fun getSource(): BaseSource? { + return null + } + + fun eval(js: String): Any? { + val bindings = SimpleBindings() + bindings["java"] = this + return RhinoScriptEngine.eval(js, bindings) + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/about/DonateFragment.kt b/app/src/main/java/io/legado/app/ui/about/DonateFragment.kt index fab642993..5548b40ed 100644 --- a/app/src/main/java/io/legado/app/ui/about/DonateFragment.kt +++ b/app/src/main/java/io/legado/app/ui/about/DonateFragment.kt @@ -4,10 +4,15 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View +import androidx.lifecycle.lifecycleScope import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import io.legado.app.R +import io.legado.app.help.JsEngine +import io.legado.app.help.coroutine.Coroutine import io.legado.app.utils.* +import org.intellij.lang.annotations.Language +import splitties.init.appCtx class DonateFragment : PreferenceFragmentCompat() { @@ -38,6 +43,7 @@ class DonateFragment : PreferenceFragmentCompat() { "qqSkRwm" -> requireContext().openUrl(qqSkRwmUrl) "zfbHbSsm" -> getZfbHb(requireContext()) "gzGzh" -> requireContext().sendToClip("开源阅读") + "ktt" -> openKtt() } return super.onPreferenceTreeClick(preference) } @@ -58,4 +64,19 @@ class DonateFragment : PreferenceFragmentCompat() { } } + private fun openKtt() { + Coroutine.async(lifecycleScope) { + @Language("js") + val js = """ + java.webViewGetOverrideUrl(null, "https://ktt.pinduoduo.com/t/tlQQsofbQM", null, "weixin:.*") + """.trimIndent() + JsEngine.eval(js).toString() + }.timeout(10000) + .onSuccess { + activity?.openUrl(it) + }.onError { + appCtx.toastOnUi(it.localizedMessage) + } + } + } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/utils/JsUtils.kt b/app/src/main/java/io/legado/app/utils/JsUtils.kt deleted file mode 100644 index 4219b87d6..000000000 --- a/app/src/main/java/io/legado/app/utils/JsUtils.kt +++ /dev/null @@ -1,34 +0,0 @@ -package io.legado.app.utils - -import com.script.SimpleBindings -import com.script.rhino.RhinoScriptEngine -import io.legado.app.constant.AppPattern.EXP_PATTERN - -object JsUtils { - - fun evalJs(js: String, bindingsFun: ((SimpleBindings) -> Unit)? = null): String { - val bindings = SimpleBindings() - bindingsFun?.invoke(bindings) - if (js.contains("{{") && js.contains("}}")) { - val sb = StringBuffer() - val expMatcher = EXP_PATTERN.matcher(js) - while (expMatcher.find()) { - val result = expMatcher.group(1)?.let { js1 -> - RhinoScriptEngine.eval(js1, bindings) - } ?: "" - if (result is String) { - expMatcher.appendReplacement(sb, result) - } else if (result is Double && result % 1.0 == 0.0) { - expMatcher.appendReplacement(sb, String.format("%.0f", result)) - } else { - expMatcher.appendReplacement(sb, result.toString()) - } - } - expMatcher.appendTail(sb) - return sb.toString() - } - return RhinoScriptEngine.eval(js, bindings).toString() - } - - -} \ No newline at end of file diff --git a/app/src/main/res/xml/donate.xml b/app/src/main/res/xml/donate.xml index 9b43609cb..705bf82ed 100644 --- a/app/src/main/res/xml/donate.xml +++ b/app/src/main/res/xml/donate.xml @@ -15,6 +15,12 @@ android:title="@string/follow_official_account" app:iconSpaceReserved="false" /> + +