From 0ed0ba88f9ce4647f77a823fdf218ce53b175c48 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 16 Sep 2015 01:34:21 +0200 Subject: mime: return one OpenPgpMetadata object per body part --- .../keychain/operations/InputDataOperation.java | 11 ++++++-- .../operations/results/InputDataResult.java | 31 ++++++++++++++++------ 2 files changed, 32 insertions(+), 10 deletions(-) (limited to 'OpenKeychain/src/main/java') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java index 7e93ad0d0..14f711df0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java @@ -37,6 +37,7 @@ import org.apache.james.mime4j.parser.MimeStreamParser; import org.apache.james.mime4j.stream.BodyDescriptor; import org.apache.james.mime4j.stream.Field; import org.apache.james.mime4j.stream.MimeConfig; +import org.openintents.openpgp.OpenPgpMetadata; import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult; import org.sufficientlysecure.keychain.operations.results.InputDataResult; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; @@ -106,9 +107,11 @@ public class InputDataOperation extends BaseOperation { ArrayList uris = new ArrayList<>(); uris.add(currentUri); + ArrayList metadatas = new ArrayList<>(); + metadatas.add(decryptResult.getDecryptionMetadata()); log.add(LogType.MSG_DATA_OK, 1); - return new InputDataResult(InputDataResult.RESULT_OK, log, decryptResult, uris); + return new InputDataResult(InputDataResult.RESULT_OK, log, decryptResult, uris, metadatas); } @@ -124,6 +127,7 @@ public class InputDataOperation extends BaseOperation { MimeStreamParser parser = new MimeStreamParser((MimeConfig) null); final ArrayList outputUris = new ArrayList<>(); + final ArrayList metadatas = new ArrayList<>(); parser.setContentDecoding(true); parser.setRecurse(); @@ -166,8 +170,11 @@ public class InputDataOperation extends BaseOperation { out.write(buf, 0, len); } + OpenPgpMetadata metadata = new OpenPgpMetadata(mFilename, bd.getMimeType(), 0L, bd.getContentLength()); + out.close(); outputUris.add(uri); + metadatas.add(metadata); } }); @@ -178,7 +185,7 @@ public class InputDataOperation extends BaseOperation { log.add(LogType.MSG_DATA_MIME_OK, 2); log.add(LogType.MSG_DATA_OK, 1); - return new InputDataResult(InputDataResult.RESULT_OK, log, decryptResult, outputUris); + return new InputDataResult(InputDataResult.RESULT_OK, log, decryptResult, outputUris, metadatas); } catch (IOException e) { e.printStackTrace(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/InputDataResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/InputDataResult.java index e3432e637..0e4bddb4c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/InputDataResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/InputDataResult.java @@ -17,38 +17,52 @@ package org.sufficientlysecure.keychain.operations.results; + +import java.util.ArrayList; + import android.net.Uri; import android.os.Parcel; +import android.support.annotation.NonNull; + +import org.openintents.openpgp.OpenPgpMetadata; -import java.util.ArrayList; public class InputDataResult extends InputPendingResult { public final ArrayList mOutputUris; final public DecryptVerifyResult mDecryptVerifyResult; + public final ArrayList mMetadata; - public InputDataResult(OperationLog log, InputPendingResult result) { + public InputDataResult(OperationLog log, @NonNull InputPendingResult result) { super(log, result); mOutputUris = null; mDecryptVerifyResult = null; - } - - public InputDataResult(int result, OperationLog log, DecryptVerifyResult decryptResult, ArrayList temporaryUris) { - super(result, log); - mOutputUris = temporaryUris; - mDecryptVerifyResult = decryptResult; + mMetadata = null; } public InputDataResult(int result, OperationLog log) { super(result, log); mOutputUris = null; mDecryptVerifyResult = null; + mMetadata = null; + } + + public InputDataResult(int result, OperationLog log, DecryptVerifyResult decryptResult, + @NonNull ArrayList outputUris, @NonNull ArrayList metadata) { + super(result, log); + mDecryptVerifyResult = decryptResult; + if (outputUris.size() == metadata.size()) { + throw new AssertionError("number of output URIs must match metadata!"); + } + mOutputUris = outputUris; + mMetadata = metadata; } protected InputDataResult(Parcel in) { super(in); mOutputUris = in.createTypedArrayList(Uri.CREATOR); mDecryptVerifyResult = in.readParcelable(DecryptVerifyResult.class.getClassLoader()); + mMetadata = in.createTypedArrayList(OpenPgpMetadata.CREATOR); } public ArrayList getOutputUris() { @@ -65,6 +79,7 @@ public class InputDataResult extends InputPendingResult { super.writeToParcel(dest, flags); dest.writeTypedList(mOutputUris); dest.writeParcelable(mDecryptVerifyResult, 0); + dest.writeTypedList(mMetadata); } public static final Creator CREATOR = new Creator() { -- cgit v1.2.3