예제 #1
0
        // Token: 0x06001359 RID: 4953 RVA: 0x00077AAC File Offset: 0x00075CAC
        private static bool GetSearchFolderData(UserContext userContext, out int searchFolderItemCount, out SearchState searchState, out bool isRemoteSession)
        {
            searchFolderItemCount = -1;
            searchState           = SearchState.None;
            isRemoteSession       = false;
            bool result = false;

            if (userContext.SearchFolderId != null)
            {
                try
                {
                    using (SearchFolder searchFolder = SearchFolder.Bind(userContext.SearchFolderId.GetSession(userContext), userContext.SearchFolderId.StoreObjectId, SearchPerformanceData.searchFolderProperties))
                    {
                        object obj = searchFolder.TryGetProperty(FolderSchema.SearchFolderItemCount);
                        if (obj is int)
                        {
                            searchFolderItemCount = (int)obj;
                        }
                        searchState     = searchFolder.GetSearchCriteria().SearchState;
                        isRemoteSession = searchFolder.Session.IsRemote;
                    }
                    result = true;
                }
                catch (ObjectNotFoundException)
                {
                }
            }
            return(result);
        }
예제 #2
0
        private bool IsSearchFolderPopulated(SearchFolder folder, out SearchState state)
        {
            SearchFolderCriteria searchCriteria = folder.GetSearchCriteria();

            state = searchCriteria.SearchState;
            return((searchCriteria.SearchState & SearchState.Rebuild) != SearchState.Rebuild);
        }
예제 #3
0
        public virtual bool GetDidLastSearchFail()
        {
            if (!this.IsInSearch)
            {
                return(false);
            }
            if (this.didLastSearchFail != null)
            {
                return(this.didLastSearchFail.Value);
            }
            SearchFolder searchFolder = this.DataFolder as SearchFolder;

            if (searchFolder != null && this.UserContext.IsPushNotificationsEnabled)
            {
                bool flag2;
                bool flag = this.UserContext.MapiNotificationManager.HasCurrentSearchCompleted((MailboxSession)searchFolder.Session, searchFolder.StoreObjectId, out flag2);
                if (flag && flag2)
                {
                    this.didLastSearchFail = new bool?((searchFolder.GetSearchCriteria().SearchState & SearchState.Failed) != SearchState.None);
                }
                if (this.didLastSearchFail != null && this.didLastSearchFail == true)
                {
                    SearchPerformanceData searchPerformanceData = this.UserContext.MapiNotificationManager.GetSearchPerformanceData((MailboxSession)searchFolder.Session);
                    searchPerformanceData.SearchFailed();
                }
            }
            return(this.didLastSearchFail != null && this.didLastSearchFail.Value);
        }
예제 #4
0
            public IEnumerable <T> EndAuditLogQuery <T>(IAsyncResult asyncResult, IAuditQueryStrategy <T> queryStrategy)
            {
                SearchFolder searchFolder = this.folder as SearchFolder;

                if (searchFolder != null)
                {
                    SearchFolderCriteria searchCriteria = searchFolder.GetSearchCriteria();
                    if ((searchCriteria.SearchState & SearchState.FailNonContentIndexedSearch) == SearchState.FailNonContentIndexedSearch && (searchCriteria.SearchState & SearchState.Failed) == SearchState.Failed)
                    {
                        throw queryStrategy.GetQueryFailedException();
                    }
                }
                AuditLog.AuditLogQueryContext.QueryRecordStrategy <T> strategy = new AuditLog.AuditLogQueryContext.QueryRecordStrategy <T>(queryStrategy);
                return(AuditLog.InternalFindAuditRecords <T>(this.folder, strategy));
            }
예제 #5
0
        internal Folder GetNoArchiveTagSearchFolder()
        {
            bool         flag         = false;
            SearchFolder searchFolder = null;
            Folder       result;

            try
            {
                searchFolder = this.CreateSearchFolder("NoArchiveTagSearchFolder8534F96D-4183-41fb-8A05-9B7112AE2100");
                SearchFolderCriteria searchFolderCriteria = new SearchFolderCriteria(SearchFolderManager.NoArchiveTagFolderQuery, new StoreId[]
                {
                    this.mailboxSession.GetDefaultFolderId(DefaultFolderType.Root)
                });
                searchFolderCriteria.DeepTraversal = true;
                SearchFolderCriteria searchFolderCriteria2 = null;
                try
                {
                    searchFolderCriteria2 = searchFolder.GetSearchCriteria();
                }
                catch (ObjectNotInitializedException)
                {
                    SearchFolderManager.Tracer.TraceDebug((long)this.GetHashCode(), "{0}: SearchFolderCriteria could not be retrieved from search folder. Need to set it.");
                }
                if (searchFolderCriteria2 == null || !this.SearchCriterionMatches(searchFolderCriteria2, searchFolderCriteria))
                {
                    this.PopulateDynamicSearchFolder(searchFolder, searchFolderCriteria);
                }
                flag   = true;
                result = searchFolder;
            }
            finally
            {
                if (!flag && searchFolder != null)
                {
                    searchFolder.Dispose();
                }
            }
            return(result);
        }
예제 #6
0
        // Token: 0x060005CD RID: 1485 RVA: 0x0002BC64 File Offset: 0x00029E64
        private StoreId SubmitSearch(QueryFilter searchCriteriaFilter)
        {
            StoreId        result         = null;
            MailboxSession mailboxSession = base.MailboxDataForTags.MailboxSession;

            if (searchCriteriaFilter != null)
            {
                if (!mailboxSession.Mailbox.IsContentIndexingEnabled)
                {
                    DiscoveryHoldEnforcer.Tracer.TraceError <DiscoveryHoldEnforcer, string>((long)this.GetHashCode(), "{0}: CI search failed on the mailbox {1}. CI is not enabled on the mailbox database", this, mailboxSession.ToString());
                    throw new DiscoveryHoldSearchException(Strings.ErrorDiscoveryHoldsCIIndexDisabledOnDatabase(searchCriteriaFilter.ToString(), mailboxSession.ToString()));
                }
                DiscoveryHoldEnforcer.Tracer.TraceDebug <DiscoveryHoldEnforcer, string>((long)this.GetHashCode(), "{0} : Creating search folder for hold queries for mailbox {1}", this, mailboxSession.ToString());
                using (SearchFolder searchFolder = SearchFolder.Create(mailboxSession, this.discoveryHoldsFolderId, DiscoveryHoldEnforcer.SearchDiscoveryHoldsFolderName, CreateMode.OpenIfExists))
                {
                    searchFolder.Save();
                    searchFolder.Load();
                    result = searchFolder.Id;
                    QueryFilter          searchQuery          = new CountFilter(10000U, searchCriteriaFilter);
                    SearchFolderCriteria searchFolderCriteria = new SearchFolderCriteria(searchQuery, new StoreId[]
                    {
                        this.discoveryHoldsFolderId
                    });
                    searchFolderCriteria.DeepTraversal               = true;
                    searchFolderCriteria.UseCiForComplexQueries      = true;
                    searchFolderCriteria.FailNonContentIndexedSearch = true;
                    int  num  = 0;
                    bool flag = true;
                    while (flag)
                    {
                        DiscoveryHoldEnforcer.Tracer.TraceDebug <DiscoveryHoldEnforcer, string, int>((long)this.GetHashCode(), "{0} : Begin search folder execution for mailbox {1}. Attempt#: {2}", this, mailboxSession.ToString(), num);
                        IAsyncResult asyncResult = searchFolder.BeginApplyOneTimeSearch(searchFolderCriteria, null, null);
                        bool         flag2       = asyncResult.AsyncWaitHandle.WaitOne(60000, false);
                        if (flag2)
                        {
                            DiscoveryHoldEnforcer.Tracer.TraceDebug <DiscoveryHoldEnforcer, string>((long)this.GetHashCode(), "{0} : Search folder execution completed for mailbox {1}", this, mailboxSession.ToString());
                            searchFolder.EndApplyOneTimeSearch(asyncResult);
                            SearchFolderCriteria searchCriteria = searchFolder.GetSearchCriteria();
                            if ((searchCriteria.SearchState & SearchState.FailNonContentIndexedSearch) == SearchState.FailNonContentIndexedSearch && (searchCriteria.SearchState & SearchState.Failed) == SearchState.Failed)
                            {
                                DiscoveryHoldEnforcer.Tracer.TraceDebug <DiscoveryHoldEnforcer, string>((long)this.GetHashCode(), "{0} :  Discovery Hold search failed because CI is not running, search query was not served by CI for mailbox {1}", this, mailboxSession.ToString());
                                throw new DiscoveryHoldSearchException(Strings.ErrorDiscoveryHoldsCIIndexNotRunning(searchCriteriaFilter.ToString(), mailboxSession.ToString()));
                            }
                            flag = false;
                        }
                        else
                        {
                            DiscoveryHoldEnforcer.Tracer.TraceDebug <DiscoveryHoldEnforcer, string>((long)this.GetHashCode(), "{0} :  Discovery Hold Search folder execution has timed out for mailbox {1}", this, mailboxSession.ToString());
                            if (num >= 3)
                            {
                                DiscoveryHoldEnforcer.Tracer.TraceDebug <DiscoveryHoldEnforcer, string, int>((long)this.GetHashCode(), "{0} :  Discovery Hold Search folder execution has timed out for mailbox {1} and exceeded max retry count {2}. Give up.", this, mailboxSession.ToString(), 3);
                                throw new DiscoveryHoldSearchException(Strings.ErrorDiscoverySearchTimeout(60.ToString(), searchCriteriaFilter.ToString(), mailboxSession.ToString()));
                            }
                            flag = true;
                            num++;
                        }
                    }
                    searchFolder.Save();
                    searchFolder.Load();
                }
            }
            return(result);
        }