From 130827cab5db4d4e0837f9b8066780fbe2e814ea Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sun, 7 Jan 2018 13:41:46 +0800 Subject: [PATCH] fix: files.cwd() --- .idea/modules.xml | 2 +- .../scriptdroid/external/ScriptIntents.java | 4 +-- .../scriptdroid/model/script/Scripts.java | 23 ++++++----------- .../scriptdroid/ui/edit/EditorView.java | 2 +- .../autojs/engine/RhinoJavaScriptEngine.java | 14 +++++++---- .../stardust/autojs/engine/ScriptEngine.java | 5 ++-- .../autojs/execution/ExecutionConfig.java | 25 ++++++++++++++++--- .../execution/RunnableScriptExecution.java | 3 ++- .../execution/ScriptExecuteActivity.java | 3 ++- 9 files changed, 49 insertions(+), 32 deletions(-) diff --git a/.idea/modules.xml b/.idea/modules.xml index 7e950955..4fac18b4 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,8 +2,8 @@ - + diff --git a/app/src/main/java/com/stardust/scriptdroid/external/ScriptIntents.java b/app/src/main/java/com/stardust/scriptdroid/external/ScriptIntents.java index 86046457..cab9269e 100644 --- a/app/src/main/java/com/stardust/scriptdroid/external/ScriptIntents.java +++ b/app/src/main/java/com/stardust/scriptdroid/external/ScriptIntents.java @@ -49,9 +49,9 @@ public class ScriptIntents { } else { source = fileScriptSource; } - config.path(new File(path).getParent(), StorageFileProvider.DEFAULT_DIRECTORY_PATH); + config.executePath(new File(path).getParent()); } else { - config.path(StorageFileProvider.DEFAULT_DIRECTORY_PATH); + config.executePath(StorageFileProvider.DEFAULT_DIRECTORY_PATH); } if (source == null) { return false; diff --git a/app/src/main/java/com/stardust/scriptdroid/model/script/Scripts.java b/app/src/main/java/com/stardust/scriptdroid/model/script/Scripts.java index 07a10f6d..afab52ad 100644 --- a/app/src/main/java/com/stardust/scriptdroid/model/script/Scripts.java +++ b/app/src/main/java/com/stardust/scriptdroid/model/script/Scripts.java @@ -9,6 +9,7 @@ import com.stardust.autojs.execution.ScriptExecution; import com.stardust.autojs.execution.ScriptExecutionListener; import com.stardust.autojs.execution.SimpleScriptExecutionListener; import com.stardust.autojs.runtime.exception.ScriptInterruptedException; +import com.stardust.autojs.script.JavaScriptFileSource; import com.stardust.autojs.script.ScriptSource; import com.stardust.scriptdroid.App; import com.stardust.scriptdroid.R; @@ -91,35 +92,27 @@ public class Scripts { } public static ScriptExecution run(ScriptFile file) { - return run(file.toSource(), file.getParent()); + return AutoJs.getInstance().getScriptEngineService().execute(new JavaScriptFileSource(file), new ExecutionConfig() + .executePath(file.getParent())); } - public static ScriptExecution run(ScriptSource source, String directoryPath) { - return AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig() - .path(directoryPath, StorageFileProvider.DEFAULT_DIRECTORY_PATH)); - } public static ScriptExecution run(ScriptSource source) { return AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig() - .path(StorageFileProvider.DEFAULT_DIRECTORY_PATH)); + .executePath(StorageFileProvider.DEFAULT_DIRECTORY_PATH)); } - public static ScriptExecution runWithBroadcastSender(ScriptSource scriptSource, String directoryPath) { - return AutoJs.getInstance().getScriptEngineService().execute(scriptSource, BROADCAST_SENDER_SCRIPT_EXECUTION_LISTENER, - new ExecutionConfig().path(directoryPath, StorageFileProvider.DEFAULT_DIRECTORY_PATH)); + public static ScriptExecution runWithBroadcastSender(File file) { + return AutoJs.getInstance().getScriptEngineService().execute(new JavaScriptFileSource(file), BROADCAST_SENDER_SCRIPT_EXECUTION_LISTENER, + new ExecutionConfig().executePath(file.getParent())); } - public static ScriptExecution runWithBroadcastSender(ScriptSource source) { - return AutoJs.getInstance().getScriptEngineService().execute(source, BROADCAST_SENDER_SCRIPT_EXECUTION_LISTENER, - new ExecutionConfig().path(StorageFileProvider.DEFAULT_DIRECTORY_PATH)); - } - public static ScriptExecution runRepeatedly(ScriptFile scriptFile, int loopTimes, long delay, long interval) { ScriptSource source = scriptFile.toSource(); String directoryPath = scriptFile.getParent(); return AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig() - .path(directoryPath, StorageFileProvider.DEFAULT_DIRECTORY_PATH) + .executePath(directoryPath) .loop(delay, loopTimes, interval)); } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditorView.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditorView.java index 56e89d0e..81a50878 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditorView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditorView.java @@ -278,7 +278,7 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC public void run() { Snackbar.make(this, R.string.text_start_running, Snackbar.LENGTH_SHORT).show(); - mScriptExecution = Scripts.runWithBroadcastSender(new JavaScriptFileSource(mName, mFile), mFile.getParent()); + mScriptExecution = Scripts.runWithBroadcastSender(mFile); setMenuItemStatus(R.id.run, false); } diff --git a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java index eddfa6cf..95e1b8de 100644 --- a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java +++ b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java @@ -25,6 +25,7 @@ import java.io.IOException; import java.io.Reader; import java.net.URI; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Locale; @@ -32,13 +33,13 @@ import java.util.Locale; * Created by Stardust on 2017/4/2. */ -public class RhinoJavaScriptEngine extends JavaScriptEngine { +public class RhinoJavaScriptEngine extends JavaScriptEngine { private static final String LOG_TAG = "RhinoJavaScriptEngine"; private static int contextCount = 0; private static StringScriptSource sInitScript; - private String[] mRequirePath = new String[0]; + private List mRequirePath = Collections.emptyList(); private Context mContext; private Scriptable mScriptable; @@ -93,11 +94,12 @@ public class RhinoJavaScriptEngine extends JavaScriptEngine { return mThread; } + @SuppressWarnings("unchecked") @Override public void init() { mThread = Thread.currentThread(); ScriptableObject.putProperty(mScriptable, "__engine__", this); - mRequirePath = (String[]) getTag(TAG_PATH); + mRequirePath = (List) getTag(TAG_ENV_PATH); initRequireBuilder(mContext, mScriptable); mContext.evaluateString(mScriptable, getInitScript().getScript(), "", 1, null); } @@ -118,8 +120,10 @@ public class RhinoJavaScriptEngine extends JavaScriptEngine { void initRequireBuilder(Context context, Scriptable scope) { List list = new ArrayList<>(); - for (String path : mRequirePath) { - list.add(new File(path).toURI()); + if (mRequirePath != null) { + for (String path : mRequirePath) { + list.add(new File(path).toURI()); + } } AssetAndUrlModuleSourceProvider provider = new AssetAndUrlModuleSourceProvider(mAndroidContext, list); new RequireBuilder() diff --git a/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java index 868ccb60..4245963a 100644 --- a/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java +++ b/autojs/src/main/java/com/stardust/autojs/engine/ScriptEngine.java @@ -23,8 +23,9 @@ import java.util.concurrent.ConcurrentHashMap; public interface ScriptEngine { - String TAG_PATH = "execute_path"; + String TAG_ENV_PATH = "env_path"; String TAG_SOURCE = "source"; + String TAG_EXECUTE_PATH = "execute_path"; void put(String name, Object value); @@ -87,7 +88,7 @@ public interface ScriptEngine { } public String cwd() { - return (String) getTag(TAG_PATH); + return (String) getTag(TAG_EXECUTE_PATH); } public void setOnDestroyListener(OnDestroyListener onDestroyListener) { diff --git a/autojs/src/main/java/com/stardust/autojs/execution/ExecutionConfig.java b/autojs/src/main/java/com/stardust/autojs/execution/ExecutionConfig.java index 251d97f3..dc18f98f 100644 --- a/autojs/src/main/java/com/stardust/autojs/execution/ExecutionConfig.java +++ b/autojs/src/main/java/com/stardust/autojs/execution/ExecutionConfig.java @@ -1,13 +1,18 @@ package com.stardust.autojs.execution; import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; /** * Created by Stardust on 2017/2/1. */ public class ExecutionConfig implements Serializable { - private String[] mRequirePath = new String[0]; + private List mRequirePath = Collections.emptyList(); + private String mExecutePath; private static final ExecutionConfig DEFAULT = new ExecutionConfig(); public long delay = 0; public long interval = 0; @@ -24,15 +29,27 @@ public class ExecutionConfig implements Serializable { return this; } - public ExecutionConfig path(String... requirePath) { - mRequirePath = requirePath; + public ExecutionConfig requirePath(String... requirePath) { + mRequirePath = new ArrayList<>(Arrays.asList(requirePath)); + if (mExecutePath != null) { + mRequirePath.add(mExecutePath); + } return this; } - public String[] getPath() { + public ExecutionConfig executePath(String executePath) { + mExecutePath = executePath; + return this; + } + + public List getRequirePath() { return mRequirePath; } + public String getExecutePath() { + return mExecutePath; + } + public ExecutionConfig loop(long delay, int loopTimes, long interval) { this.delay = delay; this.loopTimes = loopTimes; diff --git a/autojs/src/main/java/com/stardust/autojs/execution/RunnableScriptExecution.java b/autojs/src/main/java/com/stardust/autojs/execution/RunnableScriptExecution.java index 95f16234..a3bec15e 100644 --- a/autojs/src/main/java/com/stardust/autojs/execution/RunnableScriptExecution.java +++ b/autojs/src/main/java/com/stardust/autojs/execution/RunnableScriptExecution.java @@ -49,7 +49,8 @@ public class RunnableScriptExecution extends ScriptExecution.AbstractScriptExecu } private void prepare(ScriptEngine engine) { - engine.setTag(ScriptEngine.TAG_PATH, getConfig().getPath()); + engine.setTag(ScriptEngine.TAG_EXECUTE_PATH, getConfig().getExecutePath()); + engine.setTag(ScriptEngine.TAG_ENV_PATH, getConfig().getRequirePath()); engine.init(); } diff --git a/autojs/src/main/java/com/stardust/autojs/execution/ScriptExecuteActivity.java b/autojs/src/main/java/com/stardust/autojs/execution/ScriptExecuteActivity.java index da45ea72..9e8e43e7 100644 --- a/autojs/src/main/java/com/stardust/autojs/execution/ScriptExecuteActivity.java +++ b/autojs/src/main/java/com/stardust/autojs/execution/ScriptExecuteActivity.java @@ -86,7 +86,8 @@ public class ScriptExecuteActivity extends AppCompatActivity implements Thread.U private void prepare() { mScriptEngine.put("activity", this); - mScriptEngine.setTag(ScriptEngine.TAG_PATH, mScriptExecution.getConfig().getPath()); + mScriptEngine.setTag(ScriptEngine.TAG_ENV_PATH, mScriptExecution.getConfig().getRequirePath()); + mScriptEngine.setTag(ScriptEngine.TAG_EXECUTE_PATH, mScriptExecution.getConfig().getExecutePath()); mScriptEngine.init(); }