From 4789993fb9556ab0e53d7dd5ee0d4c097197684f Mon Sep 17 00:00:00 2001 From: mguessan Date: Tue, 6 Apr 2010 08:31:53 +0000 Subject: [PATCH] IMAP: implement subparts partial fetch git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@989 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- src/java/davmail/imap/ImapConnection.java | 37 ++++++++++++----------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/java/davmail/imap/ImapConnection.java b/src/java/davmail/imap/ImapConnection.java index 8e17e1c2..3768ac38 100644 --- a/src/java/davmail/imap/ImapConnection.java +++ b/src/java/davmail/imap/ImapConnection.java @@ -596,26 +596,27 @@ public class ImapConnection extends AbstractConnection { // write headers only mimeMessage.writeTo(new PartOutputStream(baos, true, false, startIndex, maxSize)); } else { - int partIndex; - // try to parse part index - try { - partIndex = Integer.parseInt(partIndexString); - } catch (NumberFormatException e) { - throw new DavMailException("EXCEPTION_UNSUPPORTED_PARAMETER", param); + MimePart bodyPart = mimeMessage; + String[] partIndexStrings = partIndexString.split("\\."); + for (String subPartIndexString:partIndexStrings) { + int subPartIndex; + // try to parse part index + try { + subPartIndex = Integer.parseInt(subPartIndexString); + } catch (NumberFormatException e) { + throw new DavMailException("EXCEPTION_INVALID_PARAMETER", param); + } + + Object mimeBody = bodyPart.getContent(); + if (mimeBody instanceof MimeMultipart) { + MimeMultipart multiPart = (MimeMultipart) mimeBody; + bodyPart = (MimePart) multiPart.getBodyPart(subPartIndex - 1); + } else if (subPartIndex != 1) { + throw new DavMailException("EXCEPTION_INVALID_PARAMETER", param); + } } - Object mimeBody = mimeMessage.getContent(); - MimePart bodyPart; - if (mimeBody instanceof MimeMultipart) { - MimeMultipart multiPart = (MimeMultipart) mimeBody; - bodyPart = (MimePart) multiPart.getBodyPart(partIndex - 1); - } else if (partIndex == 1) { - // no multipart, single body - bodyPart = mimeMessage; - } else { - throw new DavMailException("EXCEPTION_INVALID_PARAMETER", param); - } - // write selected part + // write selected part, without headers bodyPart.getDataHandler().writeTo(new PartialOutputStream(baos, startIndex, maxSize)); }