diff --git a/OpaqueMail/Imap/ImapClient.Synchronous.cs b/OpaqueMail/Imap/ImapClient.Synchronous.cs
index be61ba2..fc8b510 100644
--- a/OpaqueMail/Imap/ImapClient.Synchronous.cs
+++ b/OpaqueMail/Imap/ImapClient.Synchronous.cs
@@ -697,9 +697,9 @@ public bool RenameMailbox(string currentMailboxName, string newMailboxName)
/// Perform a search in the current mailbox and return all matching messages.
///
/// Well-formatted IMAP search criteria.
- public List Search(string searchQuery)
+ public List Search(string searchQuery, bool headersOnly = false, bool setSeenFlag = false)
{
- return Task.Run(() => SearchAsync(searchQuery)).Result;
+ return Task.Run(() => SearchAsync(searchQuery, headersOnly, setSeenFlag)).Result;
}
///
diff --git a/OpaqueMail/Imap/ImapClient.cs b/OpaqueMail/Imap/ImapClient.cs
index 803cada..68acc90 100644
--- a/OpaqueMail/Imap/ImapClient.cs
+++ b/OpaqueMail/Imap/ImapClient.cs
@@ -1979,7 +1979,7 @@ public async Task RenameMailboxAsync(string currentMailboxName, string new
/// Perform a search in the current mailbox and return all matching messages.
///
/// Well-formatted IMAP search criteria.
- public async Task> SearchAsync(string searchQuery)
+ public async Task> SearchAsync(string searchQuery, bool headersOnly = false, bool setSeenFlag = false)
{
// Protect against commands being called out of order.
if (!IsAuthenticated)
@@ -2009,7 +2009,7 @@ public async Task> SearchAsync(string searchQuery)
int numericMessageID = -1;
if (int.TryParse(messageID, out numericMessageID))
{
- MailMessage message = await GetMessageAsync(int.Parse(messageID));
+ MailMessage message = await GetMessageAsync(CurrentMailboxName, int.Parse(messageID), headersOnly, setSeenFlag);
if (message != null)
messages.Add(message);
}
@@ -2299,6 +2299,8 @@ private async void CheckIdle(object idleInitializedTimeObject)
private async Task GetMessageHelper(string mailboxName, int id, bool headersOnly, bool setSeenFlag, bool isUid)
{
MessagePartialHelper helper = await GetMessagePartialHelper(mailboxName, id, headersOnly, setSeenFlag, -1, -1, isUid);
+ if (helper == null)
+ return null;
MailMessage message = new MailMessage(helper.MessageString, ProcessingFlags);
message.ImapUid = helper.ImapUid;
@@ -2376,14 +2378,17 @@ private async Task GetMessagePartialHelper(string mailboxN
{
// Read the message's UID and flags.
int uid = 0;
- if (!int.TryParse(Functions.ReturnBetween(response, "\r\n UID ", " "), out uid))
- {
+ int.TryParse(Functions.ReturnBetween(response, "\r\n UID ", " "), out uid);
+ if (uid == 0)
int.TryParse(Functions.ReturnBetween(response, "\r\n UID ", ")"), out uid);
- }
- else if (!int.TryParse(Functions.ReturnBetween(response, "\r\nUID ", " "), out uid))
- {
+ if (uid == 0)
+ int.TryParse(Functions.ReturnBetween(response, "\r\nUID ", " "), out uid);
+ if (uid == 0)
int.TryParse(Functions.ReturnBetween(response, "\r\nUID ", ")"), out uid);
- }
+ if (uid == 0)
+ int.TryParse(Functions.ReturnBetween(response, "UID ", " "), out uid);
+ if (uid == 0)
+ int.TryParse(Functions.ReturnBetween(response, "UID ", ")"), out uid);
string flagsString = Functions.ReturnBetween(response, "FLAGS (", ")");
// Strip IMAP response padding.