예제 #1
0
        public static void UpdateFolderScope(IXSOFactory xsoFactory, IMailboxSession mailboxSession, ISearchFolder searchFolder, StoreObjectId[] folderScope)
        {
            ArgumentValidator.ThrowIfNull("xsoFactory", xsoFactory);
            ArgumentValidator.ThrowIfNull("mailboxSession", mailboxSession);
            ArgumentValidator.ThrowIfNull("searchFolder", searchFolder);
            ArgumentValidator.ThrowIfNull("folderScope", folderScope);
            SearchFolderCriteria searchFolderCriteria;

            try
            {
                searchFolderCriteria = searchFolder.GetSearchCriteria();
            }
            catch (ObjectNotInitializedException)
            {
                searchFolderCriteria = null;
            }
            if (searchFolderCriteria != null && ContactsSearchFolderCriteria.MatchFolderScope(searchFolderCriteria.FolderScope, folderScope))
            {
                return;
            }
            SearchFolderCriteria searchFolderCriteria2 = ContactsSearchFolderCriteria.CreateSearchCriteria(folderScope);

            ContactsSearchFolderCriteria.Tracer.TraceDebug <SearchFolderCriteria, SearchFolderCriteria>((long)searchFolder.GetHashCode(), "Updating MyContactsFolder Search Criteria since it is different from the current one. Current:{0}, New:{1}.", searchFolderCriteria, searchFolderCriteria2);
            ContactsSearchFolderCriteria.ApplyContinuousSearchFolderCriteria(xsoFactory, mailboxSession, searchFolder, searchFolderCriteria2);
            ContactsSearchFolderCriteria.WaitForSearchFolderPopulation(xsoFactory, mailboxSession, searchFolder);
        }
예제 #2
0
        private StoreObjectId[] GetFolderIdsFromSearchFolder(DefaultFolderType searchFolderId)
        {
            SearchFolderCriteria searchFolderCriteria = null;

            try
            {
                using (ISearchFolder searchFolder = this.xsoFactory.BindToSearchFolder(this.mailboxSession, searchFolderId))
                {
                    searchFolderCriteria = searchFolder.GetSearchCriteria();
                }
            }
            catch (ObjectNotInitializedException arg)
            {
                MyContactFolders.Tracer.TraceError <DefaultFolderType, ObjectNotInitializedException>((long)this.GetHashCode(), "Unable to load folder ids from the search folder {0} due ObjectNotInitializedException: {1}", searchFolderId, arg);
                return(null);
            }
            catch (ObjectNotFoundException arg2)
            {
                MyContactFolders.Tracer.TraceError <DefaultFolderType, ObjectNotFoundException>((long)this.GetHashCode(), "Unable to load folder ids from the search folder {0} due ObjectNotFoundException: {1}", searchFolderId, arg2);
                return(null);
            }
            if (searchFolderCriteria == null)
            {
                MyContactFolders.Tracer.TraceError <DefaultFolderType>((long)this.GetHashCode(), "There is no search folder criteria in the search folder {0}", searchFolderId);
                return(null);
            }
            if (searchFolderCriteria.FolderScope == null)
            {
                MyContactFolders.Tracer.TraceError <DefaultFolderType>((long)this.GetHashCode(), "There is no folder scope in the search folder {0}", searchFolderId);
                return(null);
            }
            if (searchFolderCriteria.FolderScope.Length == 0)
            {
                MyContactFolders.Tracer.TraceError <DefaultFolderType>((long)this.GetHashCode(), "The folder scope in the search folder {0} is empty", searchFolderId);
                return(null);
            }
            StoreObjectId[] array = new StoreObjectId[searchFolderCriteria.FolderScope.Length];
            for (int i = 0; i < searchFolderCriteria.FolderScope.Length; i++)
            {
                array[i] = (StoreObjectId)searchFolderCriteria.FolderScope[i];
            }
            MyContactFolders.Tracer.TraceDebug <DefaultFolderType, ArrayTracer <StoreObjectId> >((long)this.GetHashCode(), "Loaded folder ids from the scope of search folder {0}: {1}", searchFolderId, new ArrayTracer <StoreObjectId>(array));
            return(array);
        }
예제 #3
0
        private static bool IsSearchFolderPopulated(ISearchFolder folder)
        {
            SearchFolderCriteria searchCriteria = folder.GetSearchCriteria();

            return((searchCriteria.SearchState & SearchState.Rebuild) != SearchState.Rebuild);
        }