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); }
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; }
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); }