Loading k9mail-library/src/main/java/com/fsck/k9/mail/BodyFactory.java 0 → 100644 +10 −0 Original line number Diff line number Diff line package com.fsck.k9.mail; import java.io.IOException; import java.io.InputStream; public interface BodyFactory { Body createBody(String contentTransferEncoding, String contentType, InputStream inputStream) throws IOException; } k9mail-library/src/main/java/com/fsck/k9/mail/DefaultBodyFactory.java 0 → 100644 +43 −0 Original line number Diff line number Diff line package com.fsck.k9.mail; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.fsck.k9.mail.internet.BinaryTempFileBody; import com.fsck.k9.mail.internet.BinaryTempFileMessageBody; import com.fsck.k9.mail.internet.MimeUtility; import org.apache.commons.io.IOUtils; import org.apache.james.mime4j.util.MimeUtil; public class DefaultBodyFactory implements BodyFactory { public Body createBody(String contentTransferEncoding, String contentType, InputStream inputStream) throws IOException { if (contentTransferEncoding != null) { contentTransferEncoding = MimeUtility.getHeaderParameter(contentTransferEncoding, null); } final BinaryTempFileBody tempBody; if (MimeUtil.isMessage(contentType)) { tempBody = new BinaryTempFileMessageBody(contentTransferEncoding); } else { tempBody = new BinaryTempFileBody(contentTransferEncoding); } OutputStream outputStream = tempBody.getOutputStream(); try { copyData(inputStream, outputStream); } finally { outputStream.close(); } return tempBody; } protected void copyData(InputStream inputStream, OutputStream outputStream) throws IOException { IOUtils.copy(inputStream, outputStream); } } k9mail-library/src/main/java/com/fsck/k9/mail/Folder.java +2 −2 Original line number Diff line number Diff line Loading @@ -127,8 +127,8 @@ public abstract class Folder<T extends Message> { public abstract void fetch(List<T> messages, FetchProfile fp, MessageRetrievalListener<T> listener) throws MessagingException; public void fetchPart(Message message, Part part, MessageRetrievalListener<Message> listener) throws MessagingException { public void fetchPart(Message message, Part part, MessageRetrievalListener<Message> listener, BodyFactory bodyFactory) throws MessagingException { // This is causing trouble. Disabled for now. See issue 1733 //throw new RuntimeException("fetchPart() not implemented."); Loading k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeMessage.java +7 −3 Original line number Diff line number Diff line Loading @@ -19,7 +19,9 @@ import android.support.annotation.NonNull; import com.fsck.k9.mail.Address; import com.fsck.k9.mail.Body; import com.fsck.k9.mail.BodyFactory; import com.fsck.k9.mail.BodyPart; import com.fsck.k9.mail.DefaultBodyFactory; import com.fsck.k9.mail.Message; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.Multipart; Loading Loading @@ -106,7 +108,7 @@ public class MimeMessage extends Message { // REALLY long References: headers parserConfig.setMaxHeaderCount(-1); // Disable the check for header count. MimeStreamParser parser = new MimeStreamParser(parserConfig); parser.setContentHandler(new MimeMessageBuilder()); parser.setContentHandler(new MimeMessageBuilder(new DefaultBodyFactory())); if (recurse) { parser.setRecurse(); } Loading Loading @@ -520,8 +522,10 @@ public class MimeMessage extends Message { private class MimeMessageBuilder implements ContentHandler { private final LinkedList<Object> stack = new LinkedList<>(); private final BodyFactory bodyFactory; public MimeMessageBuilder() { public MimeMessageBuilder(BodyFactory bodyFactory) { this.bodyFactory = bodyFactory; } private void expect(Class<?> c) { Loading Loading @@ -576,7 +580,7 @@ public class MimeMessage extends Message { @Override public void body(BodyDescriptor bd, InputStream in) throws IOException, MimeException { expect(Part.class); Body body = MimeUtility.createBody(in, bd.getTransferEncoding(), bd.getMimeType()); Body body = bodyFactory.createBody(bd.getTransferEncoding(), bd.getMimeType(), in); ((Part)stack.peek()).setBody(body); } Loading k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeUtility.java +1 −26 Original line number Diff line number Diff line Loading @@ -4,7 +4,6 @@ package com.fsck.k9.mail.internet; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Locale; import java.util.regex.Pattern; Loading @@ -16,7 +15,7 @@ import com.fsck.k9.mail.Message; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.Multipart; import com.fsck.k9.mail.Part; import org.apache.commons.io.IOUtils; import org.apache.james.mime4j.codec.Base64InputStream; import org.apache.james.mime4j.codec.QuotedPrintableInputStream; import org.apache.james.mime4j.util.MimeUtil; Loading Loading @@ -985,30 +984,6 @@ public class MimeUtility { return isSameMimeType(mimeType, DEFAULT_ATTACHMENT_MIME_TYPE); } public static Body createBody(InputStream in, String contentTransferEncoding, String contentType) throws IOException { if (contentTransferEncoding != null) { contentTransferEncoding = MimeUtility.getHeaderParameter(contentTransferEncoding, null); } BinaryTempFileBody tempBody; if (MimeUtil.isMessage(contentType)) { tempBody = new BinaryTempFileMessageBody(contentTransferEncoding); } else { tempBody = new BinaryTempFileBody(contentTransferEncoding); } OutputStream out = tempBody.getOutputStream(); try { IOUtils.copy(in, out); } finally { out.close(); } return tempBody; } /** * Get decoded contents of a body. * <p/> Loading Loading
k9mail-library/src/main/java/com/fsck/k9/mail/BodyFactory.java 0 → 100644 +10 −0 Original line number Diff line number Diff line package com.fsck.k9.mail; import java.io.IOException; import java.io.InputStream; public interface BodyFactory { Body createBody(String contentTransferEncoding, String contentType, InputStream inputStream) throws IOException; }
k9mail-library/src/main/java/com/fsck/k9/mail/DefaultBodyFactory.java 0 → 100644 +43 −0 Original line number Diff line number Diff line package com.fsck.k9.mail; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.fsck.k9.mail.internet.BinaryTempFileBody; import com.fsck.k9.mail.internet.BinaryTempFileMessageBody; import com.fsck.k9.mail.internet.MimeUtility; import org.apache.commons.io.IOUtils; import org.apache.james.mime4j.util.MimeUtil; public class DefaultBodyFactory implements BodyFactory { public Body createBody(String contentTransferEncoding, String contentType, InputStream inputStream) throws IOException { if (contentTransferEncoding != null) { contentTransferEncoding = MimeUtility.getHeaderParameter(contentTransferEncoding, null); } final BinaryTempFileBody tempBody; if (MimeUtil.isMessage(contentType)) { tempBody = new BinaryTempFileMessageBody(contentTransferEncoding); } else { tempBody = new BinaryTempFileBody(contentTransferEncoding); } OutputStream outputStream = tempBody.getOutputStream(); try { copyData(inputStream, outputStream); } finally { outputStream.close(); } return tempBody; } protected void copyData(InputStream inputStream, OutputStream outputStream) throws IOException { IOUtils.copy(inputStream, outputStream); } }
k9mail-library/src/main/java/com/fsck/k9/mail/Folder.java +2 −2 Original line number Diff line number Diff line Loading @@ -127,8 +127,8 @@ public abstract class Folder<T extends Message> { public abstract void fetch(List<T> messages, FetchProfile fp, MessageRetrievalListener<T> listener) throws MessagingException; public void fetchPart(Message message, Part part, MessageRetrievalListener<Message> listener) throws MessagingException { public void fetchPart(Message message, Part part, MessageRetrievalListener<Message> listener, BodyFactory bodyFactory) throws MessagingException { // This is causing trouble. Disabled for now. See issue 1733 //throw new RuntimeException("fetchPart() not implemented."); Loading
k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeMessage.java +7 −3 Original line number Diff line number Diff line Loading @@ -19,7 +19,9 @@ import android.support.annotation.NonNull; import com.fsck.k9.mail.Address; import com.fsck.k9.mail.Body; import com.fsck.k9.mail.BodyFactory; import com.fsck.k9.mail.BodyPart; import com.fsck.k9.mail.DefaultBodyFactory; import com.fsck.k9.mail.Message; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.Multipart; Loading Loading @@ -106,7 +108,7 @@ public class MimeMessage extends Message { // REALLY long References: headers parserConfig.setMaxHeaderCount(-1); // Disable the check for header count. MimeStreamParser parser = new MimeStreamParser(parserConfig); parser.setContentHandler(new MimeMessageBuilder()); parser.setContentHandler(new MimeMessageBuilder(new DefaultBodyFactory())); if (recurse) { parser.setRecurse(); } Loading Loading @@ -520,8 +522,10 @@ public class MimeMessage extends Message { private class MimeMessageBuilder implements ContentHandler { private final LinkedList<Object> stack = new LinkedList<>(); private final BodyFactory bodyFactory; public MimeMessageBuilder() { public MimeMessageBuilder(BodyFactory bodyFactory) { this.bodyFactory = bodyFactory; } private void expect(Class<?> c) { Loading Loading @@ -576,7 +580,7 @@ public class MimeMessage extends Message { @Override public void body(BodyDescriptor bd, InputStream in) throws IOException, MimeException { expect(Part.class); Body body = MimeUtility.createBody(in, bd.getTransferEncoding(), bd.getMimeType()); Body body = bodyFactory.createBody(bd.getTransferEncoding(), bd.getMimeType(), in); ((Part)stack.peek()).setBody(body); } Loading
k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeUtility.java +1 −26 Original line number Diff line number Diff line Loading @@ -4,7 +4,6 @@ package com.fsck.k9.mail.internet; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Locale; import java.util.regex.Pattern; Loading @@ -16,7 +15,7 @@ import com.fsck.k9.mail.Message; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.Multipart; import com.fsck.k9.mail.Part; import org.apache.commons.io.IOUtils; import org.apache.james.mime4j.codec.Base64InputStream; import org.apache.james.mime4j.codec.QuotedPrintableInputStream; import org.apache.james.mime4j.util.MimeUtil; Loading Loading @@ -985,30 +984,6 @@ public class MimeUtility { return isSameMimeType(mimeType, DEFAULT_ATTACHMENT_MIME_TYPE); } public static Body createBody(InputStream in, String contentTransferEncoding, String contentType) throws IOException { if (contentTransferEncoding != null) { contentTransferEncoding = MimeUtility.getHeaderParameter(contentTransferEncoding, null); } BinaryTempFileBody tempBody; if (MimeUtil.isMessage(contentType)) { tempBody = new BinaryTempFileMessageBody(contentTransferEncoding); } else { tempBody = new BinaryTempFileBody(contentTransferEncoding); } OutputStream out = tempBody.getOutputStream(); try { IOUtils.copy(in, out); } finally { out.close(); } return tempBody; } /** * Get decoded contents of a body. * <p/> Loading