1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-11-27 19:52:17 -05:00

Defer creation of a MessageId until we actually need it. This was ~75% of our message load-from-db time

This commit is contained in:
Jesse Vincent 2009-12-08 04:58:10 +00:00
parent 4117175b0f
commit 95159d8121
2 changed files with 38 additions and 27 deletions

View File

@ -54,23 +54,8 @@ public class MimeMessage extends Message
public MimeMessage() public MimeMessage()
{ {
addHeader("Message-ID", generateMessageId());
} }
private String generateMessageId()
{
StringBuffer sb = new StringBuffer();
sb.append("<");
for (int i = 0; i < 24; i++)
{
sb.append(Integer.toString((int)(Math.random() * 35), 36));
}
sb.append(".");
sb.append(Long.toString(System.currentTimeMillis()));
sb.append("@email.android.com>");
return sb.toString();
}
/** /**
* Parse the given InputStream using Apache Mime4J to build a MimeMessage. * Parse the given InputStream using Apache Mime4J to build a MimeMessage.
@ -349,10 +334,29 @@ public class MimeMessage extends Message
{ {
mMessageId = getFirstHeader("Message-ID"); mMessageId = getFirstHeader("Message-ID");
} }
if (mMessageId == null) // even after checking the header
{
setMessageId(generateMessageId());
}
return mMessageId; return mMessageId;
} }
public void setMessageId(String messageId) throws MessagingException private String generateMessageId()
{
StringBuffer sb = new StringBuffer();
sb.append("<");
for (int i = 0; i < 24; i++)
{
sb.append(Integer.toString((int)(Math.random() * 35), 36));
}
sb.append(".");
sb.append(Long.toString(System.currentTimeMillis()));
sb.append("@email.android.com>");
return sb.toString();
}
public void setMessageId(String messageId)
{ {
setHeader("Message-ID", messageId); setHeader("Message-ID", messageId);
mMessageId = messageId; mMessageId = messageId;
@ -437,6 +441,7 @@ public class MimeMessage extends Message
public void writeTo(OutputStream out) throws IOException, MessagingException public void writeTo(OutputStream out) throws IOException, MessagingException
{ {
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out), 1024); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out), 1024);
mHeader.writeTo(out); mHeader.writeTo(out);
writer.write("\r\n"); writer.write("\r\n");

View File

@ -1457,11 +1457,12 @@ public class LocalStore extends Store implements Serializable
String uid = message.getUid(); String uid = message.getUid();
if (uid == null) if (uid == null)
{ {
message.setUid(Email.LOCAL_UID_PREFIX + UUID.randomUUID().toString()); uid = Email.LOCAL_UID_PREFIX + UUID.randomUUID().toString();
message.setUid(uid);
} }
else else
{ {
Message oldMessage = getMessage(message.getUid()); Message oldMessage = getMessage(uid);
if (oldMessage != null && oldMessage.isSet(Flag.SEEN) == false) if (oldMessage != null && oldMessage.isSet(Flag.SEEN) == false)
{ {
setUnreadMessageCount(getUnreadMessageCount() - 1); setUnreadMessageCount(getUnreadMessageCount() - 1);
@ -1510,7 +1511,7 @@ public class LocalStore extends Store implements Serializable
try try
{ {
ContentValues cv = new ContentValues(); ContentValues cv = new ContentValues();
cv.put("uid", message.getUid()); cv.put("uid", uid);
cv.put("subject", message.getSubject()); cv.put("subject", message.getSubject());
cv.put("sender_list", Address.pack(message.getFrom())); cv.put("sender_list", Address.pack(message.getFrom()));
cv.put("date", message.getSentDate() == null cv.put("date", message.getSentDate() == null
@ -1527,17 +1528,19 @@ public class LocalStore extends Store implements Serializable
cv.put("attachment_count", attachments.size()); cv.put("attachment_count", attachments.size());
cv.put("internal_date", message.getInternalDate() == null cv.put("internal_date", message.getInternalDate() == null
? System.currentTimeMillis() : message.getInternalDate().getTime()); ? System.currentTimeMillis() : message.getInternalDate().getTime());
String[] mHeaders = message.getHeader("Message-ID"); String messageId = message.getMessageId();
if (mHeaders != null && mHeaders.length > 0) Log.e(Email.LOG_TAG, "saving a messag");
if (messageId != null )
{ {
cv.put("message_id", mHeaders[0]); Log.e(Email.LOG_TAG, "saving a message messasgeid is "+messageId);
cv.put("message_id", messageId);
} }
long messageId = mDb.insert("messages", "uid", cv); long messageUid = mDb.insert("messages", "uid", cv);
for (Part attachment : attachments) for (Part attachment : attachments)
{ {
saveAttachment(messageId, attachment, copy); saveAttachment(messageUid, attachment, copy);
} }
saveHeaders(messageId, (MimeMessage)message); saveHeaders(messageUid, (MimeMessage)message);
if (message.isSet(Flag.SEEN) == false) if (message.isSet(Flag.SEEN) == false)
{ {
setUnreadMessageCount(getUnreadMessageCount() + 1); setUnreadMessageCount(getUnreadMessageCount() + 1);
@ -1565,6 +1568,9 @@ public class LocalStore extends Store implements Serializable
open(OpenMode.READ_WRITE); open(OpenMode.READ_WRITE);
ArrayList<Part> viewables = new ArrayList<Part>(); ArrayList<Part> viewables = new ArrayList<Part>();
ArrayList<Part> attachments = new ArrayList<Part>(); ArrayList<Part> attachments = new ArrayList<Part>();
message.buildMimeRepresentation();
MimeUtility.collectParts(message, viewables, attachments); MimeUtility.collectParts(message, viewables, attachments);
StringBuffer sbHtml = new StringBuffer(); StringBuffer sbHtml = new StringBuffer();
@ -2124,7 +2130,7 @@ public class LocalStore extends Store implements Serializable
super.setRecipients(RecipientType.TO, mTo); super.setRecipients(RecipientType.TO, mTo);
super.setRecipients(RecipientType.CC, mCc); super.setRecipients(RecipientType.CC, mCc);
super.setRecipients(RecipientType.BCC, mBcc); super.setRecipients(RecipientType.BCC, mBcc);
if (mMessageId != null) super.setMessageId(mMessageId);
mMessageDirty = false; mMessageDirty = false;
return; return;
@ -2146,7 +2152,7 @@ public class LocalStore extends Store implements Serializable
} }
public void setMessageId(String messageId) throws MessagingException public void setMessageId(String messageId)
{ {
mMessageId = messageId; mMessageId = messageId;
mMessageDirty = true; mMessageDirty = true;