internal static bool RemoveElcFolder(bool userIsOnRetentionPolcyTags, MailboxSession mailboxSession, StoreId folderId, Dictionary <Guid, AdTagData> allAdTags, out UpgradeStatus status) { status = UpgradeStatus.None; Stack <ElcMailboxHelper.FolderNode> stack = new Stack <ElcMailboxHelper.FolderNode>(50); ElcMailboxHelper.FolderNode folderNode = new ElcMailboxHelper.FolderNode(folderId, null); stack.Push(folderNode); while (stack.Count > 0) { ElcMailboxHelper.FolderNode folderNode2 = stack.Peek(); if (folderNode2.ChildCount == -1) { using (Folder folder = Folder.Bind(mailboxSession, folderNode2.FolderId, ProvisionedFolderReader.ElcFolderProps)) { folderNode2.ChildCount = folder.ItemCount + folder.SubfolderCount; using (QueryResult queryResult = folder.FolderQuery(FolderQueryFlags.None, null, null, ProvisionedFolderReader.ElcFolderProps)) { for (;;) { object[][] rows = queryResult.GetRows(100); if (rows.Length <= 0) { break; } foreach (object[] array in rows) { stack.Push(new ElcMailboxHelper.FolderNode((VersionedId)array[0], folderNode2)); } } } if (ElcMailboxHelper.IsElcFolder(folder)) { status |= ElcMailboxHelper.UpgradeElcFolder(userIsOnRetentionPolcyTags, mailboxSession, folder, allAdTags); ProvisionedFolderCreator.SaveELCFolder(folder, false); } continue; } } if (folderNode2.ChildCount == 0) { if (folderNode2.Parent != null) { folderNode2.Parent.ChildCount--; } mailboxSession.Delete(DeleteItemFlags.HardDelete, new StoreId[] { folderNode2.FolderId }); } stack.Pop(); } return(folderNode.ChildCount == 0); }
private static bool ScrubElcMailbox(bool userIsOnRetentionPolcyTags, MailboxSession mailboxSession, Dictionary <Guid, AdTagData> allAdTags, out UpgradeStatus status) { status = UpgradeStatus.None; bool result = true; StoreObjectId elcRootFolderId = ElcMailboxHelper.GetElcRootFolderId(mailboxSession); if (elcRootFolderId != null) { result = ElcMailboxHelper.RemoveElcFolder(userIsOnRetentionPolcyTags, mailboxSession, elcRootFolderId, allAdTags, out status); } object[] array = null; using (Folder folder = Folder.Bind(mailboxSession, DefaultFolderType.Root, ProvisionedFolderReader.ElcFolderProps)) { array = folder.GetProperties(ProvisionedFolderReader.ElcFolderProps); using (QueryResult queryResult = folder.FolderQuery(FolderQueryFlags.None, null, null, ProvisionedFolderReader.ElcFolderProps)) { for (;;) { object[][] rows = queryResult.GetRows(100); if (rows.Length <= 0) { break; } foreach (object[] array2 in rows) { if (ElcMailboxHelper.IsElcFolder(array2)) { ElcMailboxHelper.UpgradeElcFolder(userIsOnRetentionPolcyTags, mailboxSession, (VersionedId)array2[0], allAdTags); } } } } } if (ElcMailboxHelper.IsElcFolder(array)) { ElcMailboxHelper.UpgradeElcFolder(userIsOnRetentionPolcyTags, mailboxSession, (VersionedId)array[0], null); } StoreId defaultFolderId = mailboxSession.GetDefaultFolderId(DefaultFolderType.Inbox); mailboxSession.UserConfigurationManager.DeleteFolderConfigurations(defaultFolderId, new string[] { "ELC" }); return(result); }