private static bool ApplyOwaContinuousSearch(SearchFolder searchFolder, SearchFolderCriteria searchCriteria, MailboxSession mailboxSession, OwaSearchContext searchContext) { ExTraceGlobals.StorageTracer.TraceDebug <string>(0L, "[OwaFilterState::ApplyOwaContinuousSearch] Start for search folder: {0}", searchContext.ClientSearchFolderIdentity); StoreObjectId storeObjectId = searchFolder.StoreObjectId; bool flag = false; try { IAsyncResult asyncResult = searchFolder.BeginApplyContinuousSearch(searchCriteria, null, null); flag = asyncResult.AsyncWaitHandle.WaitOne(searchContext.SearchTimeoutInMilliseconds); if (flag) { searchFolder.EndApplyContinuousSearch(asyncResult); searchContext.ViewFilterActions |= ViewFilterActions.SearchCriteriaApplied; ExTraceGlobals.StorageTracer.TraceDebug <string>(0L, "[OwaFilterState::ApplyOwaContinuousSearch] Search completed for search folder: {0}", searchContext.ClientSearchFolderIdentity); } else { flag = true; searchContext.ViewFilterActions |= ViewFilterActions.PopulateSearchFolderTimedOut; ExTraceGlobals.StorageTracer.TraceDebug <string>(0L, "[OwaFilterState::ApplyOwaContinuousSearch] Search timed out for search folder: {0}", searchContext.ClientSearchFolderIdentity); } } catch (QueryInProgressException ex) { searchContext.ViewFilterActions |= ViewFilterActions.QueryInProgressException; string message = string.Format("[OwaFilterState::ApplyOwaContinuousSearch] Population of dynamic search folder: {0} failed due to QueryInProgressException: {1}. ViewFilterActions: {2}", searchContext.ClientSearchFolderIdentity, ex.ToString(), (int)searchContext.ViewFilterActions); ExTraceGlobals.StorageTracer.TraceError(0L, message); flag = OwaFilterState.EnsureSearchIsCompleted(searchFolder, mailboxSession, searchContext); } catch (CorruptDataException ex2) { searchContext.ViewFilterActions |= ViewFilterActions.CorruptDataException; string text = string.Format("[OwaFilterState::ApplyOwaContinuousSearch] Population of dynamic search folder: {0} failed due to CorruptDataException: {1}. ViewFilterActions = {2}.", searchContext.ClientSearchFolderIdentity, ex2.ToString(), (int)searchContext.ViewFilterActions); ExTraceGlobals.StorageTracer.TraceError(0L, text); OwaFilterState.SendWatsonWithoutDump(ex2, text); } catch (ObjectNotFoundException ex3) { searchContext.ViewFilterActions |= ViewFilterActions.ObjectNotFoundException; string message2 = string.Format("[OwaFilterState::ApplyOwaContinuousSearch] Population of dynamic search folder: {0} failed due to ObjectNotFoundException: {1}. ViewFilterActions = {2}.", searchContext.ClientSearchFolderIdentity, ex3.ToString(), (int)searchContext.ViewFilterActions); ExTraceGlobals.StorageTracer.TraceError(0L, message2); } catch (Exception ex4) { searchContext.ViewFilterActions |= ViewFilterActions.Exception; string text2 = string.Format("[OwaFilterState::ApplyOwaContinuousSearch] Population of dynamic search folder: {0} failed due to Exception: {1}. ViewFilterActions = {2}.", searchContext.ClientSearchFolderIdentity, ex4.ToString(), (int)searchContext.ViewFilterActions); ExTraceGlobals.StorageTracer.TraceError(0L, text2); OwaFilterState.SendWatsonWithoutDump(ex4, text2); } return(flag); }
private static SearchFolder BindAndUpdateExistingFilteredViewSearchFolder(MailboxSession mailboxSession, OwaSearchContext searchContext) { SearchFolder searchFolder = OwaFilterState.BindExistingFilteredViewSearchFolder(searchContext.SearchFolderId, mailboxSession, searchContext); if (searchFolder != null) { string folderProperty = OwaFilterState.GetFolderProperty <string>(searchFolder, FolderSchema.DisplayName, string.Empty); ExTraceGlobals.StorageTracer.TraceDebug <string>(0L, "[OwaFilterState::BindAndUpdateExistingFilteredViewSearchFolder] Re-using existing filtered view search folder: {0}", folderProperty); searchContext.IsSearchFailed = !OwaFilterState.EnsureSearchIsCompleted(searchFolder, mailboxSession, searchContext); if (!searchContext.IsSearchFailed) { searchFolder[OwaFilteredViewProperties.FilteredViewAccessTime] = ExDateTime.Now; searchFolder.Save(); searchFolder.Load(); if ((searchContext.ViewFilterActions & ViewFilterActions.BindToExisting) == ViewFilterActions.None && OwaFilterState.LinkViewFolder(mailboxSession, searchContext.FolderIdToSearch, searchFolder, searchContext.ViewFilter)) { searchContext.ViewFilterActions |= ViewFilterActions.LinkToSourceFolderSucceeded; } } } return(searchFolder); }