2014-12-12 10:02:59 -05:00
|
|
|
package com.fsck.k9.local;
|
2014-09-07 08:54:02 -04:00
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.InputStream;
|
|
|
|
import java.io.OutputStream;
|
|
|
|
|
|
|
|
import org.apache.commons.io.IOUtils;
|
|
|
|
import org.apache.james.mime4j.codec.QuotedPrintableOutputStream;
|
|
|
|
import org.apache.james.mime4j.util.MimeUtil;
|
|
|
|
|
|
|
|
import com.fsck.k9.mail.Body;
|
|
|
|
import com.fsck.k9.mail.MessagingException;
|
|
|
|
import com.fsck.k9.mail.filter.Base64OutputStream;
|
|
|
|
|
2014-09-22 15:55:08 -04:00
|
|
|
/**
|
|
|
|
* Superclass for attachments that contain binary data.
|
|
|
|
* The source for the data differs for the subclasses.
|
|
|
|
*/
|
2014-12-11 18:32:38 -05:00
|
|
|
abstract class BinaryAttachmentBody implements Body {
|
2014-09-07 08:54:02 -04:00
|
|
|
protected String mEncoding;
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public abstract InputStream getInputStream() throws MessagingException;
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void writeTo(OutputStream out) throws IOException, MessagingException {
|
|
|
|
InputStream in = getInputStream();
|
|
|
|
try {
|
|
|
|
boolean closeStream = false;
|
|
|
|
if (MimeUtil.isBase64Encoding(mEncoding)) {
|
|
|
|
out = new Base64OutputStream(out);
|
|
|
|
closeStream = true;
|
|
|
|
} else if (MimeUtil.isQuotedPrintableEncoded(mEncoding)){
|
|
|
|
out = new QuotedPrintableOutputStream(out, false);
|
|
|
|
closeStream = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
IOUtils.copy(in, out);
|
|
|
|
} finally {
|
|
|
|
if (closeStream) {
|
|
|
|
out.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} finally {
|
|
|
|
in.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setEncoding(String encoding) throws MessagingException {
|
|
|
|
mEncoding = encoding;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getEncoding() {
|
|
|
|
return mEncoding;
|
|
|
|
}
|
2014-12-11 18:32:38 -05:00
|
|
|
}
|