diff --git a/k9mail/src/androidTest/java/com/fsck/k9/mailstore/MessagePreviewExtractorTest.java b/k9mail/src/androidTest/java/com/fsck/k9/mailstore/MessageInfoExtractorTest.java
similarity index 89%
rename from k9mail/src/androidTest/java/com/fsck/k9/mailstore/MessagePreviewExtractorTest.java
rename to k9mail/src/androidTest/java/com/fsck/k9/mailstore/MessageInfoExtractorTest.java
index dcbd437cc..3a7539240 100644
--- a/k9mail/src/androidTest/java/com/fsck/k9/mailstore/MessagePreviewExtractorTest.java
+++ b/k9mail/src/androidTest/java/com/fsck/k9/mailstore/MessageInfoExtractorTest.java
@@ -17,7 +17,7 @@ import static org.junit.Assert.assertEquals;
@RunWith(AndroidJUnit4.class)
-public class MessagePreviewExtractorTest {
+public class MessageInfoExtractorTest {
@Test
public void shouldExtractPreviewFromSinglePlainTextPart() throws MessagingException {
@@ -26,7 +26,7 @@ public class MessagePreviewExtractorTest {
TextBody body = new TextBody("Message text ");
message.setBody(body);
- String preview = MessagePreviewExtractor.extractPreview(getContext(), message);
+ String preview = new MessageInfoExtractor(getContext(), message).getMessageTextPreview();
assertEquals("Message text", preview);
}
@@ -49,7 +49,7 @@ public class MessagePreviewExtractorTest {
"560-------570-------580-------590-------600-------");
message.setBody(body);
- String preview = MessagePreviewExtractor.extractPreview(getContext(), message);
+ String preview = new MessageInfoExtractor(getContext(), message).getMessageTextPreview();
assertEquals(512, preview.length());
assertEquals('…', preview.charAt(511));
@@ -62,7 +62,7 @@ public class MessagePreviewExtractorTest {
TextBody body = new TextBody("
Message text
");
message.setBody(body);
- String preview = MessagePreviewExtractor.extractPreview(getContext(), message);
+ String preview = new MessageInfoExtractor(getContext(), message).getMessageTextPreview();
assertEquals("Message text", preview);
}
@@ -83,7 +83,7 @@ public class MessagePreviewExtractorTest {
MimeBodyPart htmlPart = new MimeBodyPart(htmlBody, "text/html");
multipart.addBodyPart(htmlPart);
- String preview = MessagePreviewExtractor.extractPreview(getContext(), message);
+ String preview = new MessageInfoExtractor(getContext(), message).getMessageTextPreview();
assertEquals("text", preview);
}
@@ -104,7 +104,7 @@ public class MessagePreviewExtractorTest {
MimeBodyPart htmlPart = new MimeBodyPart(htmlBody, "text/html");
multipart.addBodyPart(htmlPart);
- String preview = MessagePreviewExtractor.extractPreview(getContext(), message);
+ String preview = new MessageInfoExtractor(getContext(), message).getMessageTextPreview();
assertEquals("text / html", preview);
}
@@ -130,7 +130,7 @@ public class MessagePreviewExtractorTest {
MimeBodyPart messagePart = new MimeBodyPart(innerMessage, "message/rfc822");
multipart.addBodyPart(messagePart);
- String preview = MessagePreviewExtractor.extractPreview(getContext(), message);
+ String preview = new MessageInfoExtractor(getContext(), message).getMessageTextPreview();
assertEquals("text / Includes message titled \"inner message\" containing: html", preview);
}
diff --git a/k9mail/src/main/java/com/fsck/k9/mailstore/LocalFolder.java b/k9mail/src/main/java/com/fsck/k9/mailstore/LocalFolder.java
index df0f899bd..0ed6db404 100644
--- a/k9mail/src/main/java/com/fsck/k9/mailstore/LocalFolder.java
+++ b/k9mail/src/main/java/com/fsck/k9/mailstore/LocalFolder.java
@@ -1247,10 +1247,10 @@ public class LocalFolder extends Folder implements Serializable {
parentId = threadInfo.parentId;
}
- //TODO: get attachment count
-
try {
- String preview = MessagePreviewExtractor.extractPreview(localStore.context, message);
+ MessageInfoExtractor messageExtractor = new MessageInfoExtractor(localStore.context, message);
+ String preview = messageExtractor.getMessageTextPreview();
+ int attachmentCount = messageExtractor.getAttachmentCount();
long rootMessagePartId = saveMessageParts(db, message);
@@ -1273,7 +1273,7 @@ public class LocalFolder extends Folder implements Serializable {
cv.put("bcc_list", Address.pack(message.getRecipients(RecipientType.BCC)));
cv.put("preview", preview);
cv.put("reply_to_list", Address.pack(message.getReplyTo()));
- cv.put("attachment_count", 0); //FIXME
+ cv.put("attachment_count", attachmentCount);
cv.put("internal_date", message.getInternalDate() == null
? System.currentTimeMillis() : message.getInternalDate().getTime());
cv.put("mime_type", message.getMimeType());
diff --git a/k9mail/src/main/java/com/fsck/k9/mailstore/MessageInfoExtractor.java b/k9mail/src/main/java/com/fsck/k9/mailstore/MessageInfoExtractor.java
new file mode 100644
index 000000000..c0e5f66dc
--- /dev/null
+++ b/k9mail/src/main/java/com/fsck/k9/mailstore/MessageInfoExtractor.java
@@ -0,0 +1,43 @@
+package com.fsck.k9.mailstore;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.content.Context;
+
+import com.fsck.k9.mail.Message;
+import com.fsck.k9.mail.MessagingException;
+import com.fsck.k9.mail.Part;
+import com.fsck.k9.mail.internet.MessageExtractor;
+import com.fsck.k9.mail.internet.Viewable;
+
+
+class MessageInfoExtractor {
+ private final Context context;
+ private final Message message;
+ private List viewables;
+ private List attachments;
+
+ public MessageInfoExtractor(Context context, Message message) {
+ this.context = context;
+ this.message = message;
+ }
+
+ public String getMessageTextPreview() throws MessagingException {
+ getViewablesIfNecessary();
+ return MessagePreviewExtractor.extractPreview(context, viewables);
+ }
+
+ public int getAttachmentCount() throws MessagingException {
+ getViewablesIfNecessary();
+ return attachments.size();
+ }
+
+ private void getViewablesIfNecessary() throws MessagingException {
+ if (viewables == null) {
+ attachments = new ArrayList();
+ viewables = MessageExtractor.getViewables(message, attachments);
+ }
+ }
+}
diff --git a/k9mail/src/main/java/com/fsck/k9/mailstore/MessagePreviewExtractor.java b/k9mail/src/main/java/com/fsck/k9/mailstore/MessagePreviewExtractor.java
index 60be77618..bafa7c82f 100644
--- a/k9mail/src/main/java/com/fsck/k9/mailstore/MessagePreviewExtractor.java
+++ b/k9mail/src/main/java/com/fsck/k9/mailstore/MessagePreviewExtractor.java
@@ -1,7 +1,6 @@
package com.fsck.k9.mailstore;
-import java.util.ArrayList;
import java.util.List;
import android.content.Context;
@@ -9,8 +8,6 @@ import android.text.TextUtils;
import com.fsck.k9.R;
import com.fsck.k9.helper.HtmlConverter;
-import com.fsck.k9.mail.Message;
-import com.fsck.k9.mail.MessagingException;
import com.fsck.k9.mail.Part;
import com.fsck.k9.mail.internet.MessageExtractor;
import com.fsck.k9.mail.internet.Viewable;
@@ -20,22 +17,11 @@ import com.fsck.k9.mail.internet.Viewable.MessageHeader;
import com.fsck.k9.mail.internet.Viewable.Textual;
-public class MessagePreviewExtractor {
+class MessagePreviewExtractor {
private static final int MAX_PREVIEW_LENGTH = 512;
private static final int MAX_CHARACTERS_CHECKED_FOR_PREVIEW = 8192;
- public static String extractPreview(Context context, Message message) throws MessagingException {
- try {
- List attachments = new ArrayList();
- List viewables = MessageExtractor.getViewables(message, attachments);
-
- return buildPreview(context, viewables);
- } catch (Exception e) {
- throw new MessagingException("Couldn't extract viewable parts", e);
- }
- }
-
- private static String buildPreview(Context context, List viewables) throws MessagingException {
+ public static String extractPreview(Context context, List viewables) {
StringBuilder text = new StringBuilder();
boolean divider = false;