1414using MailKitSimplified . Receiver . Abstractions ;
1515using MailKitSimplified . Receiver . Extensions ;
1616using MailKitSimplified . Receiver . Models ;
17+ using System . Linq ;
1718
1819namespace 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