diff options
author | jruesga <jorge@ruesga.com> | 2012-10-12 02:19:52 +0200 |
---|---|---|
committer | jruesga <jorge@ruesga.com> | 2012-10-12 02:19:52 +0200 |
commit | 63dc579b45ded75b59330e5db9e55b4040d9ad5e (patch) | |
tree | a64daf38a91c6a9ace526841d4bd8382064ecb88 /src/com/cyanogenmod/explorer/commands/shell/AsyncResultProgram.java | |
parent | c0a0acd87d57de98f6f342698c55ce5d45a45b07 (diff) | |
download | android_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.java | 50 |
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**/ } |