/sitebricks-mail/src/main/java/com/google/sitebricks/mail/imap/MessageExtractor.java
http://github.com/dhanji/sitebricks · Java · 68 lines · 46 code · 8 blank · 14 comment · 6 complexity · f2ca6af994011c30821c74670be66ace MD5 · raw file
- package com.google.sitebricks.mail.imap;
- import com.google.common.collect.Lists;
- import java.util.List;
- /**
- * Extracts a Message from a complete IMAP fetch. Specifically
- * a "fetch full" command which comes back with subject, sender, uid
- * internaldate and rfc822.size (length) and all body parts.
- * <p>
- * This is the more robust form of {@link MessageStatus}, which should
- * be preferred for fetching just subjects/status info as this extraction
- * mechanism can be slower for messages with large bodies.
- *
- * @author dhanji@gmail.com (Dhanji R. Prasanna)
- */
- class MessageExtractor implements Extractor<List<MessageStatus>> {
- private static final String ENVELOPE_PREFIX = "(ENVELOPE ";
- private static final String INTERNALDATE = "INTERNALDATE";
- @Override
- public List<MessageStatus> extract(List<String> messages) {
- List<MessageStatus> statuses = Lists.newArrayList();
- for (String message : messages) {
- String[] split = message.split("[ ]+", 3);
- // Only parse Fetch responses.
- if (split.length > 1 && "FETCH".equalsIgnoreCase(split[1])) {
- // Strip the "XX FETCH" sequence prefix first.
- // statuses.add(parseEnvelope(split[2]));
- }
- }
- return statuses;
- }
- private static List<String> tokenize(String message) {
- List<String> pieces = Lists.newArrayList();
- char[] chars = message.toCharArray();
- boolean inString = false;
- StringBuilder token = new StringBuilder();
- for (int i = 0; i < chars.length; i++) {
- char c = chars[i];
- if (c == '"') {
- // Close of string, bake this token.
- if (inString) {
- pieces.add(token.toString().trim());
- token = new StringBuilder();
- inString = false;
- } else
- inString = true;
- continue;
- }
- // Skip parentheticals
- if (!inString && (c == '(' || c == ')')) {
- continue;
- }
- token.append(c);
- }
- return pieces;
- }
- }