Skip to content

Commit b5577df

Browse files
committed
#73 re-read flag change email before returning it
1 parent dd31382 commit b5577df

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

source/MailKitSimplified.Receiver/Services/MailFolderMonitor.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using MailKitSimplified.Receiver.Abstractions;
1515
using MailKitSimplified.Receiver.Extensions;
1616
using MailKitSimplified.Receiver.Models;
17+
using System.Linq;
1718

1819
namespace MailKitSimplified.Receiver.Services
1920
{
@@ -536,7 +537,14 @@ private async Task ProcessFlagChangeQueueAsync(Func<IMessageSummary, Task> messa
536537
try
537538
{
538539
if (_flagChangeQueue.TryDequeue(out messageSummary))
539-
await messageFlagChangedMethod(messageSummary).ConfigureAwait(false);
540+
{
541+
var filter = _folderMonitorOptions.MessageSummaryItems | MessageSummaryItems.UniqueId;
542+
var uniqueIds = new UniqueId[] { messageSummary.UniqueId };
543+
var fetched = await _fetchFolder.FetchAsync(uniqueIds, filter, cancellationToken).ConfigureAwait(false);
544+
messageSummary = fetched.FirstOrDefault();
545+
if (messageSummary != null)
546+
await messageFlagChangedMethod(messageSummary).ConfigureAwait(false);
547+
}
540548
else if (_flagChangeQueue.IsEmpty)
541549
await Task.Delay(_folderMonitorOptions.EmptyQueueMaxDelayMs, cancellationToken).ConfigureAwait(false);
542550
retryCount = 0;
@@ -602,15 +610,19 @@ private void OnFlagsChanged(object sender, MessageFlagsChangedEventArgs e)
602610
if (index < cachedCount)
603611
{
604612
messageSummary = _messageCache[index];
605-
_flagChangeQueue.Enqueue(messageSummary);
606613
}
607614
}
608615
using (_logger.BeginScope("OnFlagsChanged"))
609616
{
610617
if (messageSummary != null)
618+
{
619+
_flagChangeQueue.Enqueue(messageSummary);
611620
_logger.Log<MailFolderMonitor>($"{_imapReceiver}[{index}] flags have changed ({e.Flags}), item #{messageSummary.UniqueId}.", LogLevel.Trace);
621+
}
612622
else
623+
{
613624
_logger.Log<MailFolderMonitor>($"{_imapReceiver}[{index}] message flag change (count={cachedCount}) was out of range.", LogLevel.Warning);
625+
}
614626
}
615627
}
616628

@@ -631,15 +643,19 @@ private void OnMessageExpunged(object sender, MessageEventArgs e)
631643
{
632644
messageSummary = _messageCache[index];
633645
_messageCache.RemoveAt(index);
634-
_departureQueue.Enqueue(messageSummary);
635646
}
636647
}
637648
using (_logger.BeginScope("OnMessageExpunged"))
638649
{
639650
if (messageSummary != null)
651+
{
652+
_departureQueue.Enqueue(messageSummary);
640653
_logger.Log<MailFolderMonitor>($"{_imapReceiver}[{index}] (count={cachedCount}) expunged, item #{messageSummary.UniqueId}.", LogLevel.Trace);
654+
}
641655
else
656+
{
642657
_logger.Log<MailFolderMonitor>($"{_imapReceiver}[{index}] (count={cachedCount}) was out of range.", LogLevel.Warning);
658+
}
643659
}
644660
}
645661

0 commit comments

Comments
 (0)