示例#1
0
        private bool IsDeletedFolder(IStorePropertyBag folder, ContactFoldersEnumerator.DeletedItemsFolderEnumerationState deletedItemsFolderEnumerationState)
        {
            if (deletedItemsFolderEnumerationState.IsAlreadyEnumerated)
            {
                return(false);
            }
            object obj = folder.TryGetProperty(FolderSchema.FolderHierarchyDepth);

            if (!(obj is int) || (int)obj < 0)
            {
                return(false);
            }
            int           num      = (int)obj;
            StoreObjectId objectId = ((VersionedId)folder.TryGetProperty(FolderSchema.Id)).ObjectId;

            if (deletedItemsFolderEnumerationState.NotEnumeratedYet)
            {
                if (objectId.Equals(this.DeletedItemsFolderId))
                {
                    deletedItemsFolderEnumerationState.MarkDeletedItemsFolderEncountered(num);
                }
                return(false);
            }
            if (num == deletedItemsFolderEnumerationState.DeletedItemsFolderDepth)
            {
                deletedItemsFolderEnumerationState.MarkDeletedItemsFolderEnumerationDone();
                return(false);
            }
            return(true);
        }
示例#2
0
 public IEnumerator <IStorePropertyBag> GetEnumerator()
 {
     ContactFoldersEnumerator.DeletedItemsFolderEnumerationState deletedItemsFolderEnumerationState = new ContactFoldersEnumerator.DeletedItemsFolderEnumerationState();
     using (IFolder rootFolder = this.xsoFactory.BindToFolder(this.session, this.session.GetDefaultFolderId(this.parentFolderScope)))
     {
         if (this.ShouldIncludeParentFolder)
         {
             rootFolder.Load(this.FolderPropertiesToBeLoaded);
             if (this.ShouldEnumerateFolder(rootFolder, deletedItemsFolderEnumerationState))
             {
                 yield return(rootFolder);
             }
         }
         using (IQueryResult subFoldersQuery = rootFolder.IFolderQuery(FolderQueryFlags.DeepTraversal, null, null, this.FolderPropertiesToBeLoaded))
         {
             IStorePropertyBag[] folders = subFoldersQuery.GetPropertyBags(100);
             while (folders.Length > 0)
             {
                 foreach (IStorePropertyBag folder in folders)
                 {
                     if (this.ShouldEnumerateFolder(folder, deletedItemsFolderEnumerationState))
                     {
                         yield return(folder);
                     }
                 }
                 folders = subFoldersQuery.GetPropertyBags(100);
             }
         }
     }
     yield break;
 }
示例#3
0
        private bool ShouldEnumerateFolder(IStorePropertyBag folder, ContactFoldersEnumerator.DeletedItemsFolderEnumerationState deletedItemsFolderEnumerationState)
        {
            object obj            = folder.TryGetProperty(FolderSchema.Id);
            object obj2           = folder.TryGetProperty(StoreObjectSchema.ContainerClass);
            string valueOrDefault = folder.GetValueOrDefault <string>(FolderSchema.DisplayName, string.Empty);

            if (obj is PropertyError || obj2 is PropertyError)
            {
                ContactFoldersEnumerator.Tracer.TraceDebug <string, object, object>((long)this.GetHashCode(), "Skiping bogus folder (DisplayName:{0}) without ID ({1}) or container class ({2})", valueOrDefault, obj, obj2);
                return(false);
            }
            if (this.ShouldSkipDeletedFolders && this.IsDeletedFolder(folder, deletedItemsFolderEnumerationState))
            {
                ContactFoldersEnumerator.Tracer.TraceDebug <object, string>((long)this.GetHashCode(), "Skiping deleted folder - ID:{0}, DisplayName:{1}.", obj, valueOrDefault);
                return(false);
            }
            if (!ObjectClass.IsContactsFolder((string)obj2))
            {
                ContactFoldersEnumerator.Tracer.TraceDebug <object, object, string>((long)this.GetHashCode(), "Skiping non-contact folder - ID:{0}, ContainerClass:{1}, DisplayName:{2}.", obj, obj2, valueOrDefault);
                return(false);
            }
            if (this.ShouldSkipHiddenFolders && folder.TryGetProperty(FolderSchema.IsHidden) is bool && (bool)folder.TryGetProperty(FolderSchema.IsHidden))
            {
                ContactFoldersEnumerator.Tracer.TraceDebug <object, string>((long)this.GetHashCode(), "Skiping hidden folder - ID:{0}, DisplayName:{1}.", obj, valueOrDefault);
                return(false);
            }
            ContactFoldersEnumerator.Tracer.TraceDebug <object, string>((long)this.GetHashCode(), "Enumerating folder - ID:{0}, DisplayName:{1}.", obj, valueOrDefault);
            return(true);
        }