aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/explorer/commands/shell/AsyncResultProgram.java
diff options
context:
space:
mode:
authorjruesga <jorge@ruesga.com>2012-10-12 02:19:52 +0200
committerjruesga <jorge@ruesga.com>2012-10-12 02:19:52 +0200
commit63dc579b45ded75b59330e5db9e55b4040d9ad5e (patch)
treea64daf38a91c6a9ace526841d4bd8382064ecb88 /src/com/cyanogenmod/explorer/commands/shell/AsyncResultProgram.java
parentc0a0acd87d57de98f6f342698c55ce5d45a45b07 (diff)
downloadandroid_packages_apps_CMFileManager-63dc579b45ded75b59330e5db9e55b4040d9ad5e.tar.gz
android_packages_apps_CMFileManager-63dc579b45ded75b59330e5db9e55b4040d9ad5e.tar.bz2
android_packages_apps_CMFileManager-63dc579b45ded75b59330e5db9e55b4040d9ad5e.zip
New command: ExecCommand (for execute commands)
Diffstat (limited to 'src/com/cyanogenmod/explorer/commands/shell/AsyncResultProgram.java')
-rw-r--r--src/com/cyanogenmod/explorer/commands/shell/AsyncResultProgram.java50
1 files changed, 49 insertions, 1 deletions
diff --git a/src/com/cyanogenmod/explorer/commands/shell/AsyncResultProgram.java b/src/com/cyanogenmod/explorer/commands/shell/AsyncResultProgram.java
index e765369a..480f7f14 100644
--- a/src/com/cyanogenmod/explorer/commands/shell/AsyncResultProgram.java
+++ b/src/com/cyanogenmod/explorer/commands/shell/AsyncResultProgram.java
@@ -31,12 +31,25 @@ import java.util.List;
public abstract class AsyncResultProgram
extends Program implements AsyncResultExecutable, AsyncResultProgramListener {
+ /**
+ * @hide
+ */
+ static final Byte STDIN = new Byte((byte)0);
+ /**
+ * @hide
+ */
+ static final Byte STDERR = new Byte((byte)1);
+
private final AsyncResultListener mAsyncResultListener;
private AsyncResultProgramThread mWorkerThread;
/**
* @hide
*/
final List<String> mPartialData;
+ /**
+ * @hide
+ */
+ final List<Byte> mPartialDataType;
private final Object mSync = new Object();
/**
* @hide
@@ -79,6 +92,7 @@ public abstract class AsyncResultProgram
super(id, prepare, args);
this.mAsyncResultListener = asyncResultListener;
this.mPartialData = Collections.synchronizedList(new ArrayList<String>());
+ this.mPartialDataType = Collections.synchronizedList(new ArrayList<Byte>());
this.mTempBuffer = new StringBuffer();
this.mOnCancelListener = null;
this.mCanceled = false;
@@ -158,6 +172,35 @@ public abstract class AsyncResultProgram
data = this.mTempBuffer.append(partialIn.substring(0, pos + 1)).toString();
}
+ this.mPartialDataType.add(STDIN);
+ this.mPartialData.add(data);
+ this.mTempBuffer = new StringBuffer();
+ this.mSync.notify();
+ }
+ }
+
+ /**
+ * Method that parse the error result of a program invocation.
+ *
+ * @param partialErr A partial standard err buffer (incremental buffer)
+ * @hide
+ */
+ public final void parsePartialErrResult(String partialErr) {
+ synchronized (this.mSync) {
+ String data = partialErr;
+ if (parseOnlyCompleteLines()) {
+ int pos = partialErr.lastIndexOf(FileHelper.NEWLINE);
+ if (pos == -1) {
+ //Save partial data
+ this.mTempBuffer.append(partialErr);
+ return;
+ }
+
+ //Retrieve the data
+ data = this.mTempBuffer.append(partialErr.substring(0, pos + 1)).toString();
+ }
+
+ this.mPartialDataType.add(STDERR);
this.mPartialData.add(data);
this.mTempBuffer = new StringBuffer();
this.mSync.notify();
@@ -265,9 +308,14 @@ public abstract class AsyncResultProgram
if (!this.mAlive) {
return;
}
+ Byte type = AsyncResultProgram.this.mPartialDataType.remove(0);
String data = AsyncResultProgram.this.mPartialData.remove(0);
try {
- AsyncResultProgram.this.onParsePartialResult(data);
+ if (type.compareTo(STDIN) == 0) {
+ AsyncResultProgram.this.onParsePartialResult(data);
+ } else {
+ AsyncResultProgram.this.onParseErrorPartialResult(data);
+ }
} catch (Throwable ex) {
/**NON BLOCK**/
}