diff --git a/app/src/main/java/io/legado/app/model/SharedJsScope.kt b/app/src/main/java/io/legado/app/model/SharedJsScope.kt index e3f3d0ac4..ddecbc91a 100644 --- a/app/src/main/java/io/legado/app/model/SharedJsScope.kt +++ b/app/src/main/java/io/legado/app/model/SharedJsScope.kt @@ -1,24 +1,48 @@ package io.legado.app.model +import com.google.gson.reflect.TypeToken import com.script.SimpleBindings import io.legado.app.constant.SCRIPT_ENGINE import io.legado.app.help.rhino.RhinoScriptEngine +import io.legado.app.utils.GSON import io.legado.app.utils.MD5Utils +import io.legado.app.utils.isJsonObject import org.mozilla.javascript.Scriptable import java.lang.ref.WeakReference +import kotlin.collections.Map +import kotlin.collections.forEach +import kotlin.collections.hashMapOf +import kotlin.collections.set object SharedJsScope { private val scopeMap = hashMapOf>() - fun getScope(jsLib: String): Scriptable { + fun getScope(jsLib: String?): Scriptable? { + if (jsLib.isNullOrBlank()) { + return null + } val key = MD5Utils.md5Encode(jsLib) var scope = scopeMap[key]?.get() if (scope == null) { val context = SCRIPT_ENGINE.getScriptContext(SimpleBindings()) scope = SCRIPT_ENGINE.getRuntimeScope(context) RhinoScriptEngine.run { - it.evaluateString(scope, jsLib, "jsLib", 1, null) + if (jsLib.isJsonObject()) { + val jsMap: Map = 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) }