From e794712e63a14097d3b897a2ed9d18c4686096e8 Mon Sep 17 00:00:00 2001 From: SuperMonster003 Date: Fri, 28 Feb 2025 10:33:50 +0800 Subject: [PATCH] =?UTF-8?q?6.6.2=20-=20Alpha2=20-=20engines.execScript/exe?= =?UTF-8?q?cScriptFile=20=E7=AD=89=E6=96=B9=E6=B3=95=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E6=97=B6=E9=BB=98=E8=AE=A4=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changelog/lang_zh-Hans.json | 1 + .../runtime/api/augment/engines/Engines.kt | 36 +++++++++---------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/.changelog/lang_zh-Hans.json b/.changelog/lang_zh-Hans.json index 9b45d38c..ff417872 100644 --- a/.changelog/lang_zh-Hans.json +++ b/.changelog/lang_zh-Hans.json @@ -8,6 +8,7 @@ "ScriptRuntime 使用 require 引用内置模块时可能出现的同步状态异常 (试修) _[`issue #298`](http://issues.autojs6.com/298)_", "notice 模块缺失 getBuilder 等扩展方法的问题 _[`issue #301`](http://issues.autojs6.com/301)_", "shizuku/shell 等方法无法接受字符串参数的问题 _[`issue #310`](http://issues.autojs6.com/310)_", + "engines.execScript/execScriptFile 等方法执行脚本时默认工作路径异常", "floaty.window/floaty.rawWindow 无法在子线程执行的问题", "ui.inflate 返回值丢失 attr/on/click 等原型方法的问题", "代码编辑器跳转到行尾时可能跳转到下一行起始位置的问题" diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/engines/Engines.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/engines/Engines.kt index c98a40d9..b59f3bf7 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/engines/Engines.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/engines/Engines.kt @@ -9,7 +9,6 @@ import org.autojs.autojs.extension.AnyExtensions.isJsNullish import org.autojs.autojs.extension.AnyExtensions.jsBrief import org.autojs.autojs.extension.AnyExtensions.toRuntimePath import org.autojs.autojs.extension.FlexibleArray -import org.autojs.autojs.extension.ScriptableObjectExtensions.acquire import org.autojs.autojs.extension.ScriptableObjectExtensions.inquire import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.runtime.api.augment.Augmentable @@ -23,7 +22,7 @@ import org.mozilla.javascript.NativeArray import org.mozilla.javascript.NativeObject import org.mozilla.javascript.ScriptableObject -@Suppress("unused", "UNUSED_PARAMETER") +@Suppress("unused") class Engines(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) { override val selfAssignmentFunctions = listOf( @@ -108,30 +107,29 @@ class Engines(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRunt scriptRuntime.engines.execAutoFile(coerceString(path), fillConfig(scriptRuntime, config)) } - private fun fillConfig(scriptRuntime: ScriptRuntime, config: Any?): ExecutionConfig { - val c = ExecutionConfig() - when { - config.isJsNullish() -> Unit - config is ExecutionConfig -> { - c.workingDirectory = config.workingDirectory - c.delay = config.delay - c.interval = config.interval - c.loopTimes = config.loopTimes - config.arguments.entries.forEach { c.setArgument(it.key, it.value) } + private fun fillConfig(scriptRuntime: ScriptRuntime, o: Any?): ExecutionConfig { + val result = ExecutionConfig() + when (val config = if (o.isJsNullish()) newNativeObject() else o) { + is ExecutionConfig -> { + result.workingDirectory = config.workingDirectory.takeUnless { it.isEmpty() } ?: scriptRuntime.files.cwd() + result.delay = config.delay.takeUnless { it < 0 } ?: 0L + result.interval = config.interval.takeUnless { it < 0 } ?: 0L + result.loopTimes = config.loopTimes.takeUnless { it < 0 } ?: 1 + config.arguments.entries.forEach { result.setArgument(it.key, it.value) } } - config is ScriptableObject -> { - c.workingDirectory = config.acquire("path") { it.toRuntimePath(scriptRuntime) } - c.delay = config.inquire("delay", ::coerceLongNumber, 0L) - c.interval = config.inquire("interval", ::coerceLongNumber, 0L) - c.loopTimes = config.inquire("loopTimes", ::coerceIntNumber, 1) + is ScriptableObject -> { + result.workingDirectory = config.inquire(listOf("path", "workingDirectory"), { o, _ -> o.toRuntimePath(scriptRuntime) }, scriptRuntime.files.cwd()) + result.delay = config.inquire("delay", ::coerceLongNumber, 0L) + result.interval = config.inquire("interval", ::coerceLongNumber, 0L) + result.loopTimes = config.inquire("loopTimes", ::coerceIntNumber, 1) config.inquire("arguments") { require(it is NativeObject) { "Property \"arguments\" of config for Engines#fillConfig must be a JavaScript Object" } - it.entries.forEach { (key, value) -> c.setArgument(coerceString(key), value) } + it.entries.forEach { (key, value) -> result.setArgument(coerceString(key), value) } } } else -> throw WrappedIllegalArgumentException("Argument config ${config.jsBrief()} for Engines#fillConfig is invalid") } - return c + return result } }