Changes to support cleaving sync out of ExchangeService.

Change-Id: Idbfff4ddc8fca4829228d04816d40a4ab9639382
This commit is contained in:
Yu Ping Hu 2013-05-08 17:34:58 -07:00
parent b8d7d8d31d
commit 7c3f85885c
3 changed files with 19 additions and 21 deletions

View File

@ -35,7 +35,6 @@ import org.apache.commons.io.IOUtils;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
@ -64,7 +63,7 @@ public class Rfc822Output {
private static final Pattern BODY_PATTERN = Pattern.compile( private static final Pattern BODY_PATTERN = Pattern.compile(
"(?:<\\s*body[^>]*>)(.*)(?:<\\s*/\\s*body\\s*>)", "(?:<\\s*body[^>]*>)(.*)(?:<\\s*/\\s*body\\s*>)",
Pattern.CASE_INSENSITIVE | Pattern.DOTALL); Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
/** Match group in {@code BODDY_PATTERN} for the body HTML */ /** Match group in {@code BODY_PATTERN} for the body HTML */
private static final int BODY_PATTERN_GROUP = 1; private static final int BODY_PATTERN_GROUP = 1;
/** Index of the plain text version of the message body */ /** Index of the plain text version of the message body */
private final static int INDEX_BODY_TEXT = 0; private final static int INDEX_BODY_TEXT = 0;
@ -110,20 +109,15 @@ public class Rfc822Output {
* not necessary to pass in a buffered output stream here. * not necessary to pass in a buffered output stream here.
* *
* @param context system context for accessing the provider * @param context system context for accessing the provider
* @param messageId the message to write out * @param message the message to write out
* @param out the output stream to write the message to * @param out the output stream to write the message to
* @param useSmartReply whether or not quoted text is appended to a reply/forward * @param useSmartReply whether or not quoted text is appended to a reply/forward
* @param a list of attachments to send (or null if retrieved from the message itself) * @param sendBcc Whether to add the bcc header
* @param attachments list of attachments to send (or null if retrieved from the message itself)
*/ */
public static void writeTo(Context context, long messageId, OutputStream out, public static void writeTo(Context context, Message message, OutputStream out,
boolean useSmartReply, boolean sendBcc) throws IOException, MessagingException {
writeTo(context, messageId, out, useSmartReply, sendBcc, null);
}
public static void writeTo(Context context, long messageId, OutputStream out,
boolean useSmartReply, boolean sendBcc, List<Attachment> attachments) boolean useSmartReply, boolean sendBcc, List<Attachment> attachments)
throws IOException, MessagingException { throws IOException, MessagingException {
Message message = Message.restoreMessageWithId(context, messageId);
if (message == null) { if (message == null) {
// throw something? // throw something?
return; return;
@ -160,7 +154,7 @@ public class Rfc822Output {
// If a list of attachments hasn't been passed in, build one from the message // If a list of attachments hasn't been passed in, build one from the message
if (attachments == null) { if (attachments == null) {
attachments = attachments =
Arrays.asList(Attachment.restoreAttachmentsWithMessageId(context, messageId)); Arrays.asList(Attachment.restoreAttachmentsWithMessageId(context, message.mId));
} }
boolean multipart = attachments.size() > 0; boolean multipart = attachments.size() > 0;

View File

@ -190,10 +190,11 @@ public class SmtpSender extends Sender {
} }
executeSimpleCommand("DATA"); executeSimpleCommand("DATA");
// TODO byte stuffing // TODO byte stuffing
Rfc822Output.writeTo(mContext, messageId, Rfc822Output.writeTo(mContext, message,
new EOLConvertingOutputStream(mTransport.getOutputStream()), new EOLConvertingOutputStream(mTransport.getOutputStream()),
false /* do not use smart reply */, false /* do not use smart reply */,
false /* do not send BCC */); false /* do not send BCC */,
null /* attachments are in the message itself */);
executeSimpleCommand("\r\n."); executeSimpleCommand("\r\n.");
} catch (IOException ioe) { } catch (IOException ioe) {
throw new MessagingException("Unable to send message", ioe); throw new MessagingException("Unable to send message", ioe);

View File

@ -3140,13 +3140,16 @@ public class EmailProvider extends ContentProvider {
final Uri uri = EmailContent.Message.CONTENT_URI; final Uri uri = EmailContent.Message.CONTENT_URI;
resolver.update(uri, contentValues, MessageColumns.MAILBOX_KEY + " = ?", resolver.update(uri, contentValues, MessageColumns.MAILBOX_KEY + " = ?",
new String[] {String.valueOf(mailbox.mId)}); new String[] {String.valueOf(mailbox.mId)});
// If it's been long enough, force sync this mailbox. // For non-push mailboxes, if it's stale (i.e. last sync was a while
final long timeSinceLastSync = // ago), force a sync.
System.currentTimeMillis() - mailbox.mSyncTime; if (mailbox.mSyncInterval > Mailbox.CHECK_INTERVAL_PUSH) {
if (timeSinceLastSync > AUTO_REFRESH_INTERVAL_MS) { final long timeSinceLastSync =
final Uri refreshUri = Uri.parse(EmailContent.CONTENT_URI + "/" + System.currentTimeMillis() - mailbox.mSyncTime;
QUERY_UIREFRESH + "/" + mailbox.mId); if (timeSinceLastSync > AUTO_REFRESH_INTERVAL_MS) {
resolver.query(refreshUri, null, null, null, null); final Uri refreshUri = Uri.parse(EmailContent.CONTENT_URI +
"/" + QUERY_UIREFRESH + "/" + mailbox.mId);
resolver.query(refreshUri, null, null, null, null);
}
} }
} }
} }