Esempio n. 1
0
 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
         });
     }
 }
Esempio n. 2
0
 public void SetPermissions(ISyncItemId folderId, SyncPermissions permissions)
 {
     FolderTree.FolderInfo folderInfo = this.GetFolderInfo(folderId);
     if (folderInfo.Permissions != permissions)
     {
         folderInfo.Permissions = permissions;
         this.isDirty           = true;
     }
 }
Esempio n. 3
0
 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;
     }
 }
Esempio n. 4
0
 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;
     }
 }
Esempio n. 5
0
        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);
        }