void ReloadHeader (HeaderId id)
{
if (id == HeaderId.Unknown)
return;
switch (id) {
case HeaderId.ResentMessageId:
resentMessageId = null;
break;
case HeaderId.ResentSender:
resentSender = null;
break;
case HeaderId.ResentDate:
resentDate = DateTimeOffset.MinValue;
break;
case HeaderId.References:
references.Changed -= ReferencesChanged;
references.Clear ();
references.Changed += ReferencesChanged;
break;
case HeaderId.InReplyTo:
inreplyto = null;
break;
case HeaderId.MessageId:
messageId = null;
break;
case HeaderId.Sender:
sender = null;
break;
case HeaderId.Importance:
importance = MessageImportance.Normal;
break;
case HeaderId.XPriority:
xpriority = XMessagePriority.Normal;
break;
case HeaderId.Priority:
priority = MessagePriority.Normal;
break;
case HeaderId.Date:
date = DateTimeOffset.MinValue;
break;
}
foreach (var header in Headers) {
if (header.Id != id)
continue;
var rawValue = header.RawValue;
int number, index = 0;
switch (id) {
case HeaderId.MimeVersion:
if (MimeUtils.TryParse (rawValue, 0, rawValue.Length, out version))
return;
break;
case HeaderId.References:
references.Changed -= ReferencesChanged;
foreach (var msgid in MimeUtils.EnumerateReferences (rawValue, 0, rawValue.Length))
references.Add (msgid);
references.Changed += ReferencesChanged;
break;
case HeaderId.InReplyTo:
inreplyto = MimeUtils.EnumerateReferences (rawValue, 0, rawValue.Length).FirstOrDefault ();
break;
case HeaderId.ResentMessageId:
resentMessageId = MimeUtils.ParseMessageId (rawValue, 0, rawValue.Length);
if (resentMessageId != null)
return;
break;
case HeaderId.MessageId:
messageId = MimeUtils.ParseMessageId (rawValue, 0, rawValue.Length);
if (messageId != null)
return;
break;
case HeaderId.ResentSender:
MailboxAddress.TryParse (Headers.Options, rawValue, ref index, rawValue.Length, false, out resentSender);
if (resentSender != null)
return;
break;
case HeaderId.Sender:
MailboxAddress.TryParse (Headers.Options, rawValue, ref index, rawValue.Length, false, out sender);
if (sender != null)
return;
break;
case HeaderId.ResentDate:
if (DateUtils.TryParse (rawValue, 0, rawValue.Length, out resentDate))
return;
break;
case HeaderId.Importance:
switch (header.Value.ToLowerInvariant ().Trim ()) {
case "high": importance = MessageImportance.High; break;
case "low": importance = MessageImportance.Low; break;
default: importance = MessageImportance.Normal; break;
}
break;
case HeaderId.Priority:
switch (header.Value.ToLowerInvariant ().Trim ()) {
case "non-urgent": priority = MessagePriority.NonUrgent; break;
case "urgent": priority = MessagePriority.Urgent; break;
default: priority = MessagePriority.Normal; break;
}
break;
case HeaderId.XPriority:
ParseUtils.SkipWhiteSpace (rawValue, ref index, rawValue.Length);
if (ParseUtils.TryParseInt32 (rawValue, ref index, rawValue.Length, out number)) {
xpriority = (XMessagePriority) Math.Min (Math.Max (number, 1), 5);
} else {
xpriority = XMessagePriority.Normal;
}
break;
case HeaderId.Date:
if (DateUtils.TryParse (rawValue, 0, rawValue.Length, out date))
return;
break;
}
}
}