Add: Task manager
This commit is contained in:
@@ -26,8 +26,8 @@ dependencies {
|
||||
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
|
||||
exclude group: 'com.android.support', module: 'support-annotations'
|
||||
})
|
||||
compile 'com.android.support:appcompat-v7:25.3.0'
|
||||
testCompile 'junit:junit:4.12'
|
||||
compile 'com.android.support:appcompat-v7:25.3.0'
|
||||
compile 'com.github.hyb1996:node-android-lib:1.0.13'
|
||||
compile project(path: ':common')
|
||||
compile project(path: ':automator')
|
||||
|
||||
@@ -7,12 +7,10 @@ import java.io.Serializable;
|
||||
*/
|
||||
public class ExecutionConfig implements Serializable {
|
||||
|
||||
private static final ExecutionConfig RUNNING_CONFIG = new ExecutionConfig();
|
||||
public String path;
|
||||
public String prepareScript = "";
|
||||
private static final ExecutionConfig DEFAULT = new ExecutionConfig();
|
||||
|
||||
public static ExecutionConfig getDefault() {
|
||||
return RUNNING_CONFIG;
|
||||
return DEFAULT;
|
||||
}
|
||||
|
||||
public boolean runInNewThread = true;
|
||||
@@ -22,13 +20,4 @@ public class ExecutionConfig implements Serializable {
|
||||
return this;
|
||||
}
|
||||
|
||||
public ExecutionConfig path(String path) {
|
||||
this.path = path;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ExecutionConfig prepareScript(String script) {
|
||||
this.prepareScript = script;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,17 +3,16 @@ package com.stardust.autojs;
|
||||
import android.content.Context;
|
||||
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.engine.JavaScriptEngineManager;
|
||||
import com.stardust.autojs.engine.ScriptExecuteActivity;
|
||||
import com.stardust.autojs.engine.ScriptExecutionListener;
|
||||
import com.stardust.autojs.engine.ScriptExecutionTask;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.autojs.engine.SimpleScriptExecutionListener;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.runtime.api.Console;
|
||||
import com.stardust.autojs.engine.JavaScriptEngineManager;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/1/23.
|
||||
@@ -31,10 +30,11 @@ public class ScriptEngineService {
|
||||
instance = service;
|
||||
}
|
||||
|
||||
private ScriptRuntime mRuntime;
|
||||
private Context mContext;
|
||||
private Console mConsole;
|
||||
private final ScriptRuntime mRuntime;
|
||||
private final Context mContext;
|
||||
private final Console mConsole;
|
||||
private final JavaScriptEngineManager mJavaScriptEngineManager;
|
||||
private final EngineLifecycleObserver mEngineLifecycleObserver = new EngineLifecycleObserver();
|
||||
private final ScriptExecutionListener mDefaultListener = new SimpleScriptExecutionListener() {
|
||||
|
||||
@Override
|
||||
@@ -57,16 +57,13 @@ public class ScriptEngineService {
|
||||
mContext = builder.mContext;
|
||||
mJavaScriptEngineManager = builder.mJavaScriptEngineManager;
|
||||
mConsole = builder.mConsole;
|
||||
mJavaScriptEngineManager.setEngineLifecycleCallback(mEngineLifecycleObserver);
|
||||
}
|
||||
|
||||
public ScriptRuntime getRuntime() {
|
||||
return mRuntime;
|
||||
}
|
||||
|
||||
public JavaScriptEngineManager getJavaScriptEngineManager() {
|
||||
return mJavaScriptEngineManager;
|
||||
}
|
||||
|
||||
public Console getConsole() {
|
||||
return mConsole;
|
||||
}
|
||||
@@ -79,6 +76,14 @@ public class ScriptEngineService {
|
||||
return mJavaScriptEngineManager.createEngine();
|
||||
}
|
||||
|
||||
public void registerEngineLifecycleCallback(JavaScriptEngineManager.EngineLifecycleCallback engineLifecycleCallback) {
|
||||
mEngineLifecycleObserver.registerCallback(engineLifecycleCallback);
|
||||
}
|
||||
|
||||
public void unregisterEngineLifecycleCallback(JavaScriptEngineManager.EngineLifecycleCallback engineLifecycleCallback) {
|
||||
mEngineLifecycleObserver.unregisterCallback(engineLifecycleCallback);
|
||||
}
|
||||
|
||||
public static boolean causedByInterruptedException(Throwable e) {
|
||||
while (e != null) {
|
||||
if (e instanceof InterruptedException) {
|
||||
@@ -89,19 +94,34 @@ public class ScriptEngineService {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void execute(ScriptExecutionTask task) {
|
||||
public ScriptExecution execute(ScriptExecutionTask task) {
|
||||
ScriptExecutionListener listener = task.getExecutionListenerOrDefault(mDefaultListener);
|
||||
ScriptSource source = task.getScriptSource();
|
||||
ScriptSource source = task.getSource();
|
||||
int mode = source.getExecutionMode();
|
||||
if ((mode & ScriptSource.EXECUTION_MODE_UI) != 0) {
|
||||
ScriptExecuteActivity.execute(mContext, task);
|
||||
return null;
|
||||
} else {
|
||||
new Thread(new ScriptExecution(source, listener, task.getExecutionConfig())).start();
|
||||
RunnableScriptExecution scriptExecution = new RunnableScriptExecution(source, listener, task.getConfig());
|
||||
if (task.getConfig().runInNewThread) {
|
||||
new Thread(scriptExecution).start();
|
||||
} else {
|
||||
scriptExecution.run();
|
||||
}
|
||||
return scriptExecution;
|
||||
}
|
||||
}
|
||||
|
||||
public void execute(ScriptSource source, ScriptExecutionListener listener, ExecutionConfig config) {
|
||||
execute(new ScriptExecutionTask(source, listener, config));
|
||||
public ScriptExecution execute(ScriptSource source, ScriptExecutionListener listener, ExecutionConfig config) {
|
||||
return execute(new ScriptExecutionTask(source, listener, config));
|
||||
}
|
||||
|
||||
public ScriptExecution execute(ScriptSource source, ScriptExecutionListener listener) {
|
||||
return execute(source, listener, ExecutionConfig.getDefault());
|
||||
}
|
||||
|
||||
public ScriptExecution execute(ScriptSource source) {
|
||||
return execute(source, mDefaultListener, ExecutionConfig.getDefault());
|
||||
}
|
||||
|
||||
public int stopAll() {
|
||||
@@ -117,24 +137,71 @@ public class ScriptEngineService {
|
||||
mRuntime.toast(mContext.getString(R.string.text_no_running_script));
|
||||
}
|
||||
|
||||
public void execute(ScriptSource source, ScriptExecutionListener listener) {
|
||||
execute(source, listener, ExecutionConfig.getDefault());
|
||||
public String[] getGlobalFunctions() {
|
||||
return mJavaScriptEngineManager.getGlobalFunctions();
|
||||
}
|
||||
|
||||
public void execute(ScriptSource source) {
|
||||
execute(source, mDefaultListener, ExecutionConfig.getDefault());
|
||||
public Set<JavaScriptEngine> getEngines() {
|
||||
return mJavaScriptEngineManager.getEngines();
|
||||
}
|
||||
|
||||
private class ScriptExecution extends ScriptExecutionTask implements Runnable {
|
||||
private class RunnableScriptExecution extends ScriptExecutionTask implements ScriptExecution, Runnable {
|
||||
|
||||
public ScriptExecution(ScriptSource source, ScriptExecutionListener listener, ExecutionConfig config) {
|
||||
private JavaScriptEngine mJavaScriptEngine;
|
||||
|
||||
RunnableScriptExecution(ScriptSource source, ScriptExecutionListener listener, ExecutionConfig config) {
|
||||
super(source, listener, config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
execute(mRuntime, mJavaScriptEngineManager.createEngine());
|
||||
mJavaScriptEngine = createScriptEngine();
|
||||
execute(mRuntime, mJavaScriptEngine);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JavaScriptEngine getEngine() {
|
||||
return mJavaScriptEngine;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ScriptRuntime getRuntime() {
|
||||
return mRuntime;
|
||||
}
|
||||
}
|
||||
|
||||
private static class EngineLifecycleObserver implements JavaScriptEngineManager.EngineLifecycleCallback {
|
||||
|
||||
private final Set<JavaScriptEngineManager.EngineLifecycleCallback> mEngineLifecycleCallbacks = new LinkedHashSet<>();
|
||||
|
||||
@Override
|
||||
public void onEngineCreate(JavaScriptEngine engine) {
|
||||
synchronized (mEngineLifecycleCallbacks) {
|
||||
for (JavaScriptEngineManager.EngineLifecycleCallback callback : mEngineLifecycleCallbacks) {
|
||||
callback.onEngineCreate(engine);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEngineRemove(JavaScriptEngine engine) {
|
||||
synchronized (mEngineLifecycleCallbacks) {
|
||||
for (JavaScriptEngineManager.EngineLifecycleCallback callback : mEngineLifecycleCallbacks) {
|
||||
callback.onEngineRemove(engine);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void registerCallback(JavaScriptEngineManager.EngineLifecycleCallback callback) {
|
||||
synchronized (mEngineLifecycleCallbacks) {
|
||||
mEngineLifecycleCallbacks.add(callback);
|
||||
}
|
||||
}
|
||||
|
||||
void unregisterCallback(JavaScriptEngineManager.EngineLifecycleCallback callback) {
|
||||
synchronized (mEngineLifecycleCallbacks) {
|
||||
mEngineLifecycleCallbacks.remove(callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.stardust.autojs;
|
||||
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/3.
|
||||
*/
|
||||
|
||||
public interface ScriptExecution {
|
||||
|
||||
JavaScriptEngine getEngine();
|
||||
|
||||
ScriptRuntime getRuntime();
|
||||
|
||||
ScriptSource getSource();
|
||||
|
||||
ScriptExecutionListener getListener();
|
||||
|
||||
ExecutionConfig getConfig();
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.stardust.autojs.engine;
|
||||
package com.stardust.autojs;
|
||||
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
import java.io.Serializable;
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.stardust.autojs.engine;
|
||||
package com.stardust.autojs;
|
||||
|
||||
import com.stardust.autojs.ExecutionConfig;
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
@@ -22,15 +22,15 @@ public class ScriptExecutionTask implements Serializable {
|
||||
mExecutionConfig = config;
|
||||
}
|
||||
|
||||
public ScriptSource getScriptSource() {
|
||||
public ScriptSource getSource() {
|
||||
return mScriptSource;
|
||||
}
|
||||
|
||||
public ScriptExecutionListener getExecutionListener() {
|
||||
public ScriptExecutionListener getListener() {
|
||||
return mExecutionListener;
|
||||
}
|
||||
|
||||
public ExecutionConfig getExecutionConfig() {
|
||||
public ExecutionConfig getConfig() {
|
||||
return mExecutionConfig;
|
||||
}
|
||||
|
||||
@@ -41,9 +41,10 @@ public class ScriptExecutionTask implements Serializable {
|
||||
}
|
||||
mExecutionListener.onStart(engine, mScriptSource);
|
||||
mExecutionListener.onSuccess(engine, mScriptSource, engine.execute(mScriptSource));
|
||||
engine.stop();
|
||||
} catch (Exception e) {
|
||||
mExecutionListener.onException(engine, mScriptSource, e);
|
||||
} finally {
|
||||
engine.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.stardust.autojs.engine;
|
||||
package com.stardust.autojs;
|
||||
|
||||
import com.stardust.autojs.ScriptExecutionListener;
|
||||
import com.stardust.autojs.engine.JavaScriptEngine;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
/**
|
||||
@@ -4,19 +4,31 @@ import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/2.
|
||||
* <p>
|
||||
* <p>
|
||||
* A JavaScriptEngine is created by {@link JavaScriptEngineManager#createEngine()}, and then can be
|
||||
* used to execute script with {@link JavaScriptEngine#execute(ScriptSource)} in the **same** thread.
|
||||
* When the execution finish successfully, the engine should be destroy in the thread that created it.
|
||||
* <p>
|
||||
* If you want to stop the engine in other threads, you should call {@link JavaScriptEngine#forceStop()}.
|
||||
* It will throw a {@link com.stardust.autojs.runtime.ScriptStopException}.
|
||||
*/
|
||||
|
||||
public interface JavaScriptEngine {
|
||||
|
||||
|
||||
void put(String name, Object value);
|
||||
|
||||
Object execute(ScriptSource scriptSource);
|
||||
|
||||
void stop();
|
||||
ScriptSource getExecutedScript();
|
||||
|
||||
void stopNotRemoveFromManager();
|
||||
void forceStop();
|
||||
|
||||
void destroy();
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
void init();
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.stardust.autojs.engine;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import com.stardust.autojs.BuildConfig;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.autojs.script.StringScriptSource;
|
||||
import com.stardust.pio.PFile;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -19,19 +19,26 @@ import java.util.Set;
|
||||
|
||||
public abstract class JavaScriptEngineManager {
|
||||
|
||||
public interface EngineLifecycleCallback {
|
||||
|
||||
void onEngineCreate(JavaScriptEngine engine);
|
||||
|
||||
void onEngineRemove(JavaScriptEngine engine);
|
||||
}
|
||||
|
||||
private static final String TAG = "JavaScriptEngineManager";
|
||||
|
||||
private Map<String, Object> mGlobalVariableMap = new HashMap<>();
|
||||
private final Set<JavaScriptEngine> mEngines = new HashSet<>();
|
||||
private boolean mIsStopping = false;
|
||||
|
||||
private EngineLifecycleCallback mEngineLifecycleCallback;
|
||||
private final ScriptSource INIT_SCRIPT;
|
||||
|
||||
private android.content.Context mContext;
|
||||
|
||||
public JavaScriptEngineManager(Context context) {
|
||||
mContext = context;
|
||||
INIT_SCRIPT = ScriptSource.of(readInitScript());
|
||||
INIT_SCRIPT = new StringScriptSource(readInitScript());
|
||||
}
|
||||
|
||||
public JavaScriptEngine createEngine() {
|
||||
@@ -40,6 +47,9 @@ public abstract class JavaScriptEngineManager {
|
||||
engine.init();
|
||||
synchronized (mEngines) {
|
||||
mEngines.add(engine);
|
||||
if(mEngineLifecycleCallback != null){
|
||||
mEngineLifecycleCallback.onEngineCreate(engine);
|
||||
}
|
||||
}
|
||||
return engine;
|
||||
}
|
||||
@@ -48,6 +58,14 @@ public abstract class JavaScriptEngineManager {
|
||||
mGlobalVariableMap.put(varName, value);
|
||||
}
|
||||
|
||||
public void setEngineLifecycleCallback(EngineLifecycleCallback engineLifecycleCallback) {
|
||||
mEngineLifecycleCallback = engineLifecycleCallback;
|
||||
}
|
||||
|
||||
public Set<JavaScriptEngine> getEngines() {
|
||||
return mEngines;
|
||||
}
|
||||
|
||||
protected abstract JavaScriptEngine createEngineInner();
|
||||
|
||||
public abstract String[] getGlobalFunctions();
|
||||
@@ -62,11 +80,14 @@ public abstract class JavaScriptEngineManager {
|
||||
}
|
||||
}
|
||||
|
||||
void removeEngine(RhinoJavaScriptEngine rhinoJavaScriptEngine) {
|
||||
void removeEngine(JavaScriptEngine engine) {
|
||||
synchronized (mEngines) {
|
||||
if (mIsStopping)
|
||||
return;
|
||||
mEngines.remove(rhinoJavaScriptEngine);
|
||||
mEngines.remove(engine);
|
||||
if(mEngineLifecycleCallback != null){
|
||||
mEngineLifecycleCallback.onEngineRemove(engine);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,7 +102,7 @@ public abstract class JavaScriptEngineManager {
|
||||
public ScriptSource getInitScript() {
|
||||
if (BuildConfig.DEBUG) {
|
||||
// 调试时不缓存INIT_SCRIPT否则修改javascript_engine_init.js后不会更新
|
||||
return ScriptSource.of(readInitScript());
|
||||
return new StringScriptSource(readInitScript());
|
||||
} else {
|
||||
return INIT_SCRIPT;
|
||||
}
|
||||
@@ -93,7 +114,10 @@ public abstract class JavaScriptEngineManager {
|
||||
mIsStopping = true;
|
||||
int n = mEngines.size();
|
||||
for (JavaScriptEngine engine : mEngines) {
|
||||
engine.stopNotRemoveFromManager();
|
||||
engine.forceStop();
|
||||
if(mEngineLifecycleCallback != null){
|
||||
mEngineLifecycleCallback.onEngineRemove(engine);
|
||||
}
|
||||
}
|
||||
mEngines.clear();
|
||||
mIsStopping = false;
|
||||
|
||||
@@ -23,6 +23,7 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
|
||||
private Scriptable mScriptable;
|
||||
private Thread mThread;
|
||||
private RhinoJavaScriptEngineManager mEngineManager;
|
||||
private ScriptSource mScriptSource;
|
||||
|
||||
public RhinoJavaScriptEngine(RhinoJavaScriptEngineManager engineManager) {
|
||||
mEngineManager = engineManager;
|
||||
@@ -38,22 +39,17 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
|
||||
|
||||
@Override
|
||||
public Object execute(ScriptSource source) {
|
||||
try {
|
||||
return mContext.evaluateString(mScriptable, source.getScript(), "<script>", 1, null);
|
||||
} catch (Exception e) {
|
||||
stop();
|
||||
throw e;
|
||||
}
|
||||
mScriptSource = source;
|
||||
return mContext.evaluateString(mScriptable, source.getScript(), "<script>", 1, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
mEngineManager.removeEngine(this);
|
||||
stopNotRemoveFromManager();
|
||||
public ScriptSource getExecutedScript() {
|
||||
return mScriptSource;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopNotRemoveFromManager() {
|
||||
public void forceStop() {
|
||||
mThread.interrupt();
|
||||
}
|
||||
|
||||
@@ -63,7 +59,8 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
|
||||
Context.exit();
|
||||
mEngineManager.removeEngine(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -99,8 +96,7 @@ public class RhinoJavaScriptEngine implements JavaScriptEngine {
|
||||
@Override
|
||||
protected void observeInstructionCount(Context cx, int instructionCount) {
|
||||
if (Thread.currentThread().isInterrupted()) {
|
||||
Context.exit();
|
||||
throw new ScriptStopException();
|
||||
throw new ScriptStopException(new InterruptedException());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.stardust.autojs.engine;
|
||||
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
import com.stardust.autojs.script.StringScriptSource;
|
||||
|
||||
import org.mozilla.javascript.Context;
|
||||
import org.mozilla.javascript.Scriptable;
|
||||
@@ -64,13 +65,13 @@ public class RhinoJavaScriptEngineManager extends JavaScriptEngineManager {
|
||||
|
||||
private String[] getGlobalFunctionsInner() {
|
||||
JavaScriptEngine engine = createEngine();
|
||||
Scriptable scriptable = (Scriptable) engine.execute(ScriptSource.of("this"));
|
||||
Scriptable scriptable = (Scriptable) engine.execute(new StringScriptSource("this"));
|
||||
Object[] ids = scriptable.getIds();
|
||||
String[] functions = new String[ids.length];
|
||||
for (int i = 0; i < ids.length; i++) {
|
||||
functions[i] = ids[i].toString();
|
||||
}
|
||||
engine.stop();
|
||||
engine.destroy();
|
||||
return functions;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.stardust.autojs.ScriptEngineService;
|
||||
import com.stardust.autojs.ScriptExecutionListener;
|
||||
import com.stardust.autojs.ScriptExecutionTask;
|
||||
import com.stardust.autojs.script.ScriptSource;
|
||||
|
||||
/**
|
||||
@@ -37,8 +39,8 @@ public class ScriptExecuteActivity extends Activity {
|
||||
|
||||
private void handleIntent(Intent intent) {
|
||||
ScriptExecutionTask scriptExecutionTask = (ScriptExecutionTask) intent.getSerializableExtra(EXTRA_TASK);
|
||||
mExecutionListener = scriptExecutionTask.getExecutionListener();
|
||||
mScriptSource = scriptExecutionTask.getScriptSource();
|
||||
mExecutionListener = scriptExecutionTask.getListener();
|
||||
mScriptSource = scriptExecutionTask.getSource();
|
||||
}
|
||||
|
||||
private void runScript() {
|
||||
@@ -61,7 +63,7 @@ public class ScriptExecuteActivity extends Activity {
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
mJavaScriptEngine.put("activity", null);
|
||||
mJavaScriptEngine.stop();
|
||||
mJavaScriptEngine.destroy();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ public class FileScriptSource extends ScriptSource {
|
||||
private String mScript;
|
||||
|
||||
public FileScriptSource(File file) {
|
||||
super(PFile.getNameWithoutExtension(file.getName()));
|
||||
mFile = file;
|
||||
}
|
||||
|
||||
@@ -22,6 +23,11 @@ public class FileScriptSource extends ScriptSource {
|
||||
this(new File(path));
|
||||
}
|
||||
|
||||
public FileScriptSource(String name, File file) {
|
||||
super(name);
|
||||
mFile = file;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getScript() {
|
||||
if (mScript == null)
|
||||
|
||||
@@ -7,14 +7,16 @@ package com.stardust.autojs.script;
|
||||
public class MultiScriptSource extends ScriptSource {
|
||||
|
||||
private String mScript;
|
||||
private FileScriptSource mFileScriptSource;
|
||||
|
||||
public MultiScriptSource(ScriptSource... sources) {
|
||||
|
||||
public MultiScriptSource(StringScriptSource stringScriptSource, FileScriptSource fileScriptSource) {
|
||||
super(fileScriptSource.getName());
|
||||
mFileScriptSource = fileScriptSource;
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
for (ScriptSource source : sources) {
|
||||
String script = source.getScript();
|
||||
if (script != null)
|
||||
stringBuilder.append(script).append("\n");
|
||||
}
|
||||
if (stringScriptSource.getScript() != null)
|
||||
stringBuilder.append(stringScriptSource.getScript()).append("\n");
|
||||
stringBuilder.append(fileScriptSource.getScript());
|
||||
mScript = stringBuilder.toString();
|
||||
}
|
||||
|
||||
@@ -22,4 +24,10 @@ public class MultiScriptSource extends ScriptSource {
|
||||
public String getScript() {
|
||||
return mScript;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return mFileScriptSource.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -26,7 +26,15 @@ public abstract class ScriptSource implements Serializable {
|
||||
private static final int EXECUTION_MODE_STRING_MAX_LENGTH = 7;
|
||||
|
||||
private int mExecutionMode = -1;
|
||||
private String mName;
|
||||
|
||||
public ScriptSource(String name) {
|
||||
mName = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return mName;
|
||||
}
|
||||
|
||||
public abstract String getScript();
|
||||
|
||||
@@ -38,7 +46,7 @@ public abstract class ScriptSource implements Serializable {
|
||||
}
|
||||
|
||||
private int parseExecutionMode(String script) {
|
||||
if (script.charAt(0) != '"')
|
||||
if (script == null || script.length() == 0 || script.charAt(0) != '"')
|
||||
return EXECUTION_MODE_NORMAL;
|
||||
int i = script.lastIndexOf("\";", EXECUTION_MODE_STRING_MAX_LENGTH + 2);
|
||||
if (i == -1)
|
||||
@@ -58,7 +66,4 @@ public abstract class ScriptSource implements Serializable {
|
||||
return mode;
|
||||
}
|
||||
|
||||
public static ScriptSource of(String script) {
|
||||
return new StringScriptSource(script);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,12 @@ public class StringScriptSource extends ScriptSource {
|
||||
private String mScript;
|
||||
|
||||
public StringScriptSource(String script) {
|
||||
super("Tmp");
|
||||
mScript = script;
|
||||
}
|
||||
|
||||
public StringScriptSource(String name, String script) {
|
||||
super(name);
|
||||
mScript = script;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user