internal MailboxSearchObject(SearchObject searchObject, SearchStatus searchStatus)
 {
     if (searchObject == null)
     {
         throw new ArgumentNullException("searchObject");
     }
     if (searchStatus == null)
     {
         throw new ArgumentException("searchStatus");
     }
     this.searchObject = searchObject;
     this.searchStatus = searchStatus;
 }
 public void AddSearchObject(SearchObject obj)
 {
     if (obj == null)
     {
         throw new ArgumentNullException("obj");
     }
     this.AddProperty(SearchObjectBaseSchema.Id.Name, obj.Id);
     this.AddProperty(SearchObjectSchema.Language.Name, obj.Language);
     this.AddProperty(SearchObjectSchema.StartDate.Name, obj.StartDate);
     this.AddProperty(SearchObjectSchema.EndDate.Name, obj.EndDate);
     this.AddProperty(SearchObjectSchema.MessageTypes.Name, obj.MessageTypes);
     this.AddProperty(SearchObjectSchema.SearchDumpster.Name, obj.SearchDumpster);
     this.AddProperty(SearchObjectSchema.LogLevel.Name, obj.LogLevel);
     this.AddProperty(SearchObjectSchema.IncludeUnsearchableItems.Name, obj.IncludeUnsearchableItems);
     this.AddProperty(SearchObjectSchema.IncludePersonalArchive.Name, obj.IncludePersonalArchive);
     this.AddProperty(SearchObjectSchema.IncludeRemoteAccounts.Name, obj.IncludeRemoteAccounts);
     this.AddProperty(SearchObjectSchema.StatusMailRecipients.Name, obj.StatusMailRecipients);
     this.AddProperty(SearchObjectSchema.EstimateOnly.Name, obj.EstimateOnly);
     this.AddProperty(SearchObjectSchema.ExcludeDuplicateMessages.Name, obj.ExcludeDuplicateMessages);
     this.AddProperty(SearchObjectSchema.Resume.Name, obj.Resume);
     this.AddProperty(SearchObjectSchema.SearchQuery.Name, obj.SearchQuery.Length);
     this.AddProperty(SearchObjectSchema.IncludeKeywordStatistics.Name, obj.IncludeKeywordStatistics);
 }
Exemple #3
0
        private void CacheSearchStatus(SearchObject searchObject)
        {
            SearchObjectId identity = new SearchObjectId(searchObject.Id, ObjectType.SearchStatus);

            searchObject.SearchStatus = (SearchStatus)this.Read <SearchStatus>(identity);
        }
Exemple #4
0
        internal static object AqsQueryGetter(IPropertyBag propertyBag)
        {
            StringBuilder stringBuilder = new StringBuilder(64);
            int           num           = 0;

            foreach (string text in ((MultiValuedProperty <string>)propertyBag[SearchObjectSchema.Senders]))
            {
                stringBuilder.Append("\"");
                stringBuilder.Append(text.Replace("\\", "\\\\"));
                stringBuilder.Append("\"*");
                num = stringBuilder.Length;
                stringBuilder.Append(" OR ");
            }
            if (num > 0)
            {
                stringBuilder.Length = num;
            }
            StringBuilder stringBuilder2 = new StringBuilder(64);

            num = 0;
            foreach (string text2 in ((MultiValuedProperty <string>)propertyBag[SearchObjectSchema.Recipients]))
            {
                stringBuilder2.Append("\"");
                stringBuilder2.Append(text2.Replace("\\", "\\\\"));
                stringBuilder2.Append("\"*");
                num = stringBuilder2.Length;
                stringBuilder2.Append(" OR ");
            }
            if (num > 0)
            {
                stringBuilder2.Length = num;
            }
            string     text3       = string.Empty;
            ExDateTime?exDateTime  = (ExDateTime?)propertyBag[SearchObjectSchema.StartDate];
            ExDateTime?exDateTime2 = SearchObject.RoundEndDate((ExDateTime?)propertyBag[SearchObjectSchema.EndDate]);

            if (exDateTime != null && exDateTime != null)
            {
                text3 = text3 + " >=" + exDateTime.Value.ToString();
            }
            if (exDateTime2 != null && exDateTime2 != null)
            {
                text3 = text3 + " <=" + exDateTime2.Value.ToString();
            }
            StringBuilder stringBuilder3 = new StringBuilder(64);

            num = 0;
            foreach (KindKeyword key in ((MultiValuedProperty <KindKeyword>)propertyBag[SearchObjectSchema.MessageTypes]))
            {
                stringBuilder3.Append(AqsParser.CanonicalKindKeys[key]);
                num = stringBuilder3.Length;
                stringBuilder3.Append(" OR ");
            }
            if (num > 0)
            {
                stringBuilder3.Length = num;
            }
            string text4 = stringBuilder.ToString();
            string text5 = stringBuilder2.ToString();
            string text6 = stringBuilder3.ToString();
            string str   = string.Empty;

            text4 = (string.IsNullOrEmpty(text4) ? string.Empty : string.Format("{0}:({1}) ", AqsParser.CanonicalKeywords[PropertyKeyword.From], text4));
            text5 = (string.IsNullOrEmpty(text5) ? string.Empty : string.Format("{0}:({1}) ", AqsParser.CanonicalKeywords[PropertyKeyword.Participants], text5));
            if (!string.IsNullOrEmpty(text4) && !string.IsNullOrEmpty(text5))
            {
                str = string.Format("({0} OR {1}) ", text4, text5);
            }
            else if (!string.IsNullOrEmpty(text4))
            {
                str = text4;
            }
            else if (!string.IsNullOrEmpty(text5))
            {
                str = text5;
            }
            return(str + (string.IsNullOrEmpty(text3) ? string.Empty : (AqsParser.CanonicalKeywords[PropertyKeyword.Received] + ":(" + text3 + ") ")) + (string.IsNullOrEmpty(text6) ? string.Empty : (AqsParser.CanonicalKeywords[PropertyKeyword.Kind] + ":(" + text6 + ") ")) + (string)propertyBag[SearchObjectSchema.SearchQuery]);
        }
        public IList <KeywordHit> FindMailboxStatisticsByKeywords(ExchangePrincipal principal, SearchObject searchObject)
        {
            FindMailboxStatisticsByKeywordsType findMailboxStatisticsByKeywordsType = new FindMailboxStatisticsByKeywordsType
            {
                Mailboxes = new UserMailboxType[]
                {
                    new UserMailboxType
                    {
                        Id        = (principal.MailboxInfo.IsArchive ? principal.MailboxInfo.MailboxGuid.ToString() : principal.MailboxInfo.RemoteIdentity.Value.ToString()),
                        IsArchive = principal.MailboxInfo.IsArchive
                    }
                },
                Keywords = new string[]
                {
                    searchObject.SearchQuery
                }
            };

            if (searchObject.Language != null)
            {
                findMailboxStatisticsByKeywordsType.Language = searchObject.Language.ToString();
            }
            if (searchObject.Senders != null && searchObject.Senders.Count > 0)
            {
                findMailboxStatisticsByKeywordsType.Senders = searchObject.Senders.ToArray();
            }
            if (searchObject.Recipients != null && searchObject.Recipients.Count > 0)
            {
                findMailboxStatisticsByKeywordsType.Recipients = searchObject.Recipients.ToArray();
            }
            if (searchObject.StartDate != null)
            {
                findMailboxStatisticsByKeywordsType.FromDate          = (DateTime)searchObject.StartDate.Value.ToUtc();
                findMailboxStatisticsByKeywordsType.FromDateSpecified = true;
            }
            if (searchObject.EndDate != null)
            {
                findMailboxStatisticsByKeywordsType.ToDate          = (DateTime)searchObject.EndDate.Value.ToUtc();
                findMailboxStatisticsByKeywordsType.ToDateSpecified = true;
            }
            if (searchObject.SearchDumpster)
            {
                findMailboxStatisticsByKeywordsType.SearchDumpster          = true;
                findMailboxStatisticsByKeywordsType.SearchDumpsterSpecified = true;
            }
            if (searchObject.IncludePersonalArchive)
            {
                findMailboxStatisticsByKeywordsType.IncludePersonalArchive          = true;
                findMailboxStatisticsByKeywordsType.IncludePersonalArchiveSpecified = true;
            }
            if (searchObject.IncludeUnsearchableItems)
            {
                findMailboxStatisticsByKeywordsType.IncludeUnsearchableItems          = true;
                findMailboxStatisticsByKeywordsType.IncludeUnsearchableItemsSpecified = true;
            }
            if (searchObject.MessageTypes != null && searchObject.MessageTypes.Count > 0)
            {
                List <SearchItemKindType> list = new List <SearchItemKindType>(searchObject.MessageTypes.Count);
                foreach (KindKeyword kindKeyword in searchObject.MessageTypes)
                {
                    list.Add((SearchItemKindType)Enum.Parse(typeof(SearchItemKindType), kindKeyword.ToString(), true));
                }
                findMailboxStatisticsByKeywordsType.MessageTypes = list.ToArray();
            }
            FindMailboxStatisticsByKeywordsResponseType findMailboxStatisticsByKeywordsResponseType = null;
            int       num = 0;
            Exception ex  = null;

            do
            {
                try
                {
                    ex = null;
                    findMailboxStatisticsByKeywordsResponseType = this.binding.FindMailboxStatisticsByKeywords(findMailboxStatisticsByKeywordsType);
                    break;
                }
                catch (SoapException ex2)
                {
                    ex = ex2;
                }
                catch (WebException ex3)
                {
                    ex = ex3;
                }
                catch (IOException ex4)
                {
                    ex = ex4;
                }
                catch (InvalidOperationException ex5)
                {
                    ex = ex5;
                }
            }while (++num < 3);
            if (ex != null)
            {
                ExTraceGlobals.SessionTracer.TraceError((long)this.GetHashCode(), ex.ToString());
                throw new MailboxSearchEwsFailedException(ex.Message);
            }
            if (findMailboxStatisticsByKeywordsResponseType != null && findMailboxStatisticsByKeywordsResponseType.ResponseMessages != null && findMailboxStatisticsByKeywordsResponseType.ResponseMessages.Items != null && findMailboxStatisticsByKeywordsResponseType.ResponseMessages.Items.Length > 0)
            {
                List <KeywordHit> list2 = new List <KeywordHit>(findMailboxStatisticsByKeywordsResponseType.ResponseMessages.Items.Length);
                foreach (FindMailboxStatisticsByKeywordsResponseMessageType findMailboxStatisticsByKeywordsResponseMessageType in findMailboxStatisticsByKeywordsResponseType.ResponseMessages.Items)
                {
                    if (findMailboxStatisticsByKeywordsResponseMessageType.ResponseClass != ResponseClassType.Success)
                    {
                        ExTraceGlobals.SessionTracer.TraceError <ResponseClassType, ResponseCodeType, string>((long)this.GetHashCode(), "FindMailboxStatisticsByKeywords EWS call failed with response. ResponseClass={0}, ResponseCode={1}, MessageText={2}", findMailboxStatisticsByKeywordsResponseMessageType.ResponseClass, findMailboxStatisticsByKeywordsResponseMessageType.ResponseCode, findMailboxStatisticsByKeywordsResponseMessageType.MessageText);
                        throw new MailboxSearchEwsFailedException(findMailboxStatisticsByKeywordsResponseMessageType.MessageText);
                    }
                    MailboxStatisticsSearchResultType mailboxStatisticsSearchResult = findMailboxStatisticsByKeywordsResponseMessageType.MailboxStatisticsSearchResult;
                    KeywordStatisticsSearchResultType keywordStatisticsSearchResult = mailboxStatisticsSearchResult.KeywordStatisticsSearchResult;
                    list2.Add(new KeywordHit
                    {
                        Phrase       = keywordStatisticsSearchResult.Keyword,
                        Count        = keywordStatisticsSearchResult.ItemHits,
                        MailboxCount = ((keywordStatisticsSearchResult.ItemHits > 0) ? 1 : 0),
                        Size         = new ByteQuantifiedSize((ulong)keywordStatisticsSearchResult.Size)
                    });
                }
                return(list2);
            }
            ExTraceGlobals.SessionTracer.TraceError((long)this.GetHashCode(), "Response of FindMailboxStatisticsByKeywords is empty");
            throw new MailboxSearchEwsFailedException(ServerStrings.MailboxSearchEwsEmptyResponse);
        }
 internal MailboxSearchObject(SearchObject searchObject) : this(searchObject, new SearchStatus())
 {
 }