public void TraceTree() { AirSyncDiagnostics.TraceError(ExTraceGlobals.AlgorithmTracer, this, "Inconsistency found in FolderTree. Dumping contents of tree:"); foreach (KeyValuePair <ISyncItemId, FolderTree.FolderInfo> keyValuePair in this.folderTree) { FolderTree.FolderInfo value = keyValuePair.Value; StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < value.Children.Count; i++) { stringBuilder.Append(value.Children[i]); if (i + 1 < value.Children.Count) { stringBuilder.Append(", "); } } AirSyncDiagnostics.TraceError(ExTraceGlobals.AlgorithmTracer, this, "FolderSyncId: {0}, ParentSyncId: {1}, Hidden: {2}, HiddenDueToParent: {3}, Children: {4}", new object[] { keyValuePair.Key, value.ParentId, value.Hidden, value.HiddenDueToParent, stringBuilder }); } }
public void SetPermissions(ISyncItemId folderId, SyncPermissions permissions) { FolderTree.FolderInfo folderInfo = this.GetFolderInfo(folderId); if (folderInfo.Permissions != permissions) { folderInfo.Permissions = permissions; this.isDirty = true; } }
public void SetOwner(ISyncItemId folderId, string owner) { FolderTree.FolderInfo folderInfo = this.GetFolderInfo(folderId); if (!string.Equals(folderInfo.Owner, owner)) { folderInfo.Owner = owner; this.isDirty = true; } }
public void UnlinkChild(ISyncItemId parentId, ISyncItemId childId) { FolderTree.FolderInfo folderInfo = this.GetFolderInfo(parentId); FolderTree.FolderInfo folderInfo2 = this.GetFolderInfo(childId); if (!parentId.Equals(folderInfo2.ParentId) || !folderInfo.Children.Contains(childId)) { AirSyncDiagnostics.TraceError <ISyncItemId, ISyncItemId, ISyncItemId>(ExTraceGlobals.AlgorithmTracer, this, "Tried to unlink a child folder from a folder that was not its parent. ChildSyncId: {0}, child's ParentSyncId: {1}, ParentSyncId passed in: {2}", childId, folderInfo2.ParentId, parentId); this.TraceTree(); return; } if (folderInfo.Children.Remove(childId)) { this.GetFolderInfo(childId).ParentId = null; this.isDirty = true; } }
private bool RemoveFolderAndChildren(ISyncItemId folderId, FolderIdMapping folderIdMapping, int foldersSeen, int numberOfFoldersInTree) { FolderTree.FolderInfo folderInfo = this.GetFolderInfo(folderId); foldersSeen++; if (foldersSeen > numberOfFoldersInTree) { AirSyncDiagnostics.TraceError <int>(ExTraceGlobals.AlgorithmTracer, this, "Error: Loop detected in folder tree. NumberOfFoldersInTree: {0}", numberOfFoldersInTree); this.TraceTree(); return(false); } int num = 0; while (folderInfo.Children.Count > num) { ISyncItemId syncItemId = folderInfo.Children[num]; if (this.folderTree.ContainsKey(syncItemId)) { if (!this.RemoveFolderAndChildren(syncItemId, folderIdMapping, foldersSeen, numberOfFoldersInTree)) { return(false); } } else { num++; MailboxSyncItemId mailboxSyncItemId = syncItemId as MailboxSyncItemId; AirSyncDiagnostics.TraceError <string>(ExTraceGlobals.AlgorithmTracer, this, "FolderTree.RemoveFolderAndChildren could not find child folder: {0} to remove.", (mailboxSyncItemId == null) ? "<folder is not a MailboxSyncItemId>" : mailboxSyncItemId.ToString()); } } if (folderIdMapping.Contains(folderId)) { folderIdMapping.Delete(new ISyncItemId[] { folderId }); } this.RemoveFolder(folderId); return(true); }