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

LocalMessage doesn't bother to populate the headers of the MimeMessage backing it until writeTo is called

This commit is contained in:
Jesse Vincent 2009-12-07 04:46:42 +00:00
parent 08588779f7
commit 3ffc447302

View File

@ -1169,7 +1169,7 @@ public class LocalStore extends Store implements Serializable
{ {
message.setFrom(from[0]); message.setFrom(from[0]);
} }
message.addSentDate(new Date(cursor.getLong(2))); message.setInternalSentDate(new Date(cursor.getLong(2)));
message.setUid(cursor.getString(3)); message.setUid(cursor.getString(3));
String flagList = cursor.getString(4); String flagList = cursor.getString(4);
if (flagList != null && flagList.length() > 0) if (flagList != null && flagList.length() > 0)
@ -1193,7 +1193,7 @@ public class LocalStore extends Store implements Serializable
message.setReplyTo(Address.unpack(cursor.getString(9))); message.setReplyTo(Address.unpack(cursor.getString(9)));
message.mAttachmentCount = cursor.getInt(10); message.mAttachmentCount = cursor.getInt(10);
message.setInternalDate(new Date(cursor.getLong(11))); message.setInternalDate(new Date(cursor.getLong(11)));
message.setHeader("Message-ID", cursor.getString(12)); message.setMessageId(cursor.getString(12));
} }
@Override @Override
@ -2083,28 +2083,8 @@ public class LocalStore extends Store implements Serializable
private int mAttachmentCount; private int mAttachmentCount;
private String mSubject; private String mSubject;
@Override
public String getSubject() throws MessagingException
{
if (mSubject != null)
{
return mSubject;
}
else
{
return super.getSubject();
}
}
@Override
public void setSubject(String subject) throws MessagingException
{
mSubject = subject;
super.setSubject(subject);
}
private boolean mMessageDirty = false;
public LocalMessage() public LocalMessage()
{ {
@ -2116,32 +2096,90 @@ public class LocalStore extends Store implements Serializable
this.mFolder = folder; this.mFolder = folder;
} }
/* Custom version of writeTo that updates the MIME message based on localMessage
* changes.
*/
public void writeTo(OutputStream out) throws IOException, MessagingException
{
if (mMessageDirty) buildMimeRepresentation();
super.writeTo(out);
}
private void buildMimeRepresentation() throws MessagingException
{
if (!mMessageDirty)
{
return;
}
super.setSubject(mSubject);
if (this.mFrom != null && this.mFrom.length > 0)
{
super.setFrom(this.mFrom[0]);
}
super.setReplyTo(mReplyTo);
super.setSentDate(this.getSentDate());
super.setRecipients(RecipientType.TO, mTo);
super.setRecipients(RecipientType.CC, mCc);
super.setRecipients(RecipientType.BCC, mBcc);
mMessageDirty = false;
return;
}
@Override
public String getSubject() throws MessagingException
{
return mSubject;
}
@Override
public void setSubject(String subject) throws MessagingException
{
mSubject = subject;
mMessageDirty = true;
}
public void setMessageId(String messageId) throws MessagingException
{
mMessageId = messageId;
mMessageDirty = true;
}
public int getAttachmentCount() public int getAttachmentCount()
{ {
return mAttachmentCount; return mAttachmentCount;
} }
public void parse(InputStream in) throws IOException, MessagingException
{
super.parse(in);
}
public void setFrom(Address from) throws MessagingException public void setFrom(Address from) throws MessagingException
{ {
if (from != null) this.mFrom = new Address[] { from };
mMessageDirty = true;
}
public void setReplyTo(Address[] replyTo) throws MessagingException
{
if (replyTo == null || replyTo.length == 0)
{ {
addHeader("From", from.toEncodedString()); mReplyTo = null;
this.mFrom = new Address[]
{
from
};
} }
else else
{ {
this.mFrom = null; mReplyTo = replyTo;
} }
mMessageDirty = true;
} }
/* /*
* For performance reasons, we add headers instead of setting them (see super implementation) * For performance reasons, we add headers instead of setting them (see super implementation)
* which removes (expensive) them before adding them * which removes (expensive) them before adding them
@ -2153,12 +2191,10 @@ public class LocalStore extends Store implements Serializable
{ {
if (addresses == null || addresses.length == 0) if (addresses == null || addresses.length == 0)
{ {
removeHeader("To");
this.mTo = null; this.mTo = null;
} }
else else
{ {
addHeader("To", Address.toEncodedString(addresses));
this.mTo = addresses; this.mTo = addresses;
} }
} }
@ -2166,12 +2202,10 @@ public class LocalStore extends Store implements Serializable
{ {
if (addresses == null || addresses.length == 0) if (addresses == null || addresses.length == 0)
{ {
removeHeader("CC");
this.mCc = null; this.mCc = null;
} }
else else
{ {
addHeader("CC", Address.toEncodedString(addresses));
this.mCc = addresses; this.mCc = addresses;
} }
} }
@ -2179,12 +2213,10 @@ public class LocalStore extends Store implements Serializable
{ {
if (addresses == null || addresses.length == 0) if (addresses == null || addresses.length == 0)
{ {
removeHeader("BCC");
this.mBcc = null; this.mBcc = null;
} }
else else
{ {
addHeader("BCC", Address.toEncodedString(addresses));
this.mBcc = addresses; this.mBcc = addresses;
} }
} }
@ -2192,8 +2224,11 @@ public class LocalStore extends Store implements Serializable
{ {
throw new MessagingException("Unrecognized recipient type."); throw new MessagingException("Unrecognized recipient type.");
} }
mMessageDirty = true;
} }
public void setFlagInternal(Flag flag, boolean set) throws MessagingException public void setFlagInternal(Flag flag, boolean set) throws MessagingException
{ {
super.setFlag(flag, set); super.setFlag(flag, set);