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;
 }
Example #3
0
        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);