Task <SMTPImpostorMessageStoreSearchResult> SearchAsync( SMTPImpostorMessageStoreSearchCriteria criteria) { var query = _messages.ToArray().AsEnumerable(); var totalCount = query.Count(); if (criteria.Ids?.Any() ?? false) { query = query.Where(info => criteria.Ids.Any(id => info.Id == id) ); } if (!string.IsNullOrWhiteSpace(criteria.Text)) { var text = Regex.Escape(SMTPImpostorMessage.TRIM.Replace(criteria.Text, "")); var containsText = new Regex($"^{text}|({SMTPImpostorMessage.BREAK_CHARS}){text}", RegexOptions.IgnoreCase); query = query.Where(info => containsText.IsMatch(info.Subject) || containsText.IsMatch(info.From.ToString()) ); } return(Task.FromResult( new SMTPImpostorMessageStoreSearchResult( criteria.Index, totalCount, query) )); }
public SearchHostMessages( Guid hostId, SMTPImpostorMessageStoreSearchCriteria criteria) { HostId = hostId; Criteria = criteria; }
Task <SMTPImpostorMessageStoreSearchResult> SearchAsync(SMTPImpostorMessageStoreSearchCriteria criteria) { if (criteria is null) { throw new ArgumentNullException(nameof(criteria)); } if (CheckMessagePath(out var path, false)) { var directory = new DirectoryInfo(path); var query = _index.ToArray().AsEnumerable(); var totalCount = query.Count(); if (criteria.Ids?.Any() ?? false) { query = query.Where(info => criteria.Ids.Any(id => info.Id == id) ); } if (!string.IsNullOrWhiteSpace(criteria.Text)) { var text = Regex.Escape(SMTPImpostorMessage.TRIM.Replace(criteria.Text, "")); var containsText = new Regex($"^{text}|({SMTPImpostorMessage.BREAK_CHARS}){text}", RegexOptions.IgnoreCase); query = query.Where(info => containsText.IsMatch(info.Subject) || containsText.IsMatch(info.From.ToString()) ); } return(Task.FromResult( new SMTPImpostorMessageStoreSearchResult( criteria.Index, totalCount, query) )); } return(Task.FromResult( SMTPImpostorMessageStoreSearchResult.Empty )); }
async Task <SMTPImpostorMessageStoreSearchResult> ISMTPImpostorMessagesStore .SearchAsync(SMTPImpostorMessageStoreSearchCriteria criteria) => await SearchAsync(criteria);