源添加jsLib,未完成

This commit is contained in:
kunfei
2023-04-12 23:23:34 +08:00
parent 5006433437
commit 47e3fc2e09
@@ -1,24 +1,48 @@
package io.legado.app.model package io.legado.app.model
import com.google.gson.reflect.TypeToken
import com.script.SimpleBindings import com.script.SimpleBindings
import io.legado.app.constant.SCRIPT_ENGINE import io.legado.app.constant.SCRIPT_ENGINE
import io.legado.app.help.rhino.RhinoScriptEngine import io.legado.app.help.rhino.RhinoScriptEngine
import io.legado.app.utils.GSON
import io.legado.app.utils.MD5Utils import io.legado.app.utils.MD5Utils
import io.legado.app.utils.isJsonObject
import org.mozilla.javascript.Scriptable import org.mozilla.javascript.Scriptable
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
import kotlin.collections.Map
import kotlin.collections.forEach
import kotlin.collections.hashMapOf
import kotlin.collections.set
object SharedJsScope { object SharedJsScope {
private val scopeMap = hashMapOf<String, WeakReference<Scriptable>>() private val scopeMap = hashMapOf<String, WeakReference<Scriptable>>()
fun getScope(jsLib: String): Scriptable { fun getScope(jsLib: String?): Scriptable? {
if (jsLib.isNullOrBlank()) {
return null
}
val key = MD5Utils.md5Encode(jsLib) val key = MD5Utils.md5Encode(jsLib)
var scope = scopeMap[key]?.get() var scope = scopeMap[key]?.get()
if (scope == null) { if (scope == null) {
val context = SCRIPT_ENGINE.getScriptContext(SimpleBindings()) val context = SCRIPT_ENGINE.getScriptContext(SimpleBindings())
scope = SCRIPT_ENGINE.getRuntimeScope(context) scope = SCRIPT_ENGINE.getRuntimeScope(context)
RhinoScriptEngine.run { RhinoScriptEngine.run {
it.evaluateString(scope, jsLib, "jsLib", 1, null) if (jsLib.isJsonObject()) {
val jsMap: Map<String, String> = GSON.fromJson(
jsLib,
TypeToken.getParameterized(
Map::class.java,
String::class.java,
String::class.java
).type
)
jsMap.values.forEach { url ->
}
} else {
it.evaluateString(scope, jsLib, "jsLib", 1, null)
}
} }
scopeMap[key] = WeakReference(scope) scopeMap[key] = WeakReference(scope)
} }