/// <summary>
        /// process a status-changed-event
        /// </summary>
        /// <param name="sce">status-changed-event</param>
        public void ProcessStatusChangedEventAsync(StatusChangedEvent sce)
        {
            SyncElementInfo sei    = sce.SyncElementInfo;
            bool            isFile = typeof(SyncFileInfo) == sei.GetType();

            switch (sce.CreateStatus)
            {
            case SyncElementStatus.ElementFound:
                UpdateTreeNodeIfVisible(sei.ElementInfo, true);
                break;

            case SyncElementStatus.ChangeDetectingStarted:
                break;

            case SyncElementStatus.NoChangeFound:
                UpdateTreeNodeIfVisible(sei.ElementInfo, true);
                break;

            case SyncElementStatus.ChangeFound:
                UpdateTreeNodeIfVisible(sei.ElementInfo, true);
                break;

            case SyncElementStatus.ChangeApplied:
                UpdateTreeNodeIfVisible(sei.ElementInfo, true);
                break;

            case SyncElementStatus.Conflicted:
                string elementType  = isFile ? "file" : "dir";
                string conflictType = "";
                switch (sei.ConflictInfo.Type)
                {
                case ConflictType.IO:
                    conflictType = "IO";
                    break;

                case ConflictType.UA:
                    conflictType = "Access Denied";
                    break;

                case ConflictType.DirNotEmpty:
                    conflictType = "Dir Not Empty";
                    break;

                case ConflictType.Unknown:
                    conflictType = "Unknown";
                    break;
                }

                Invoke(new Action(() =>
                                  AddLogLine($"Conflict ({conflictType}) at {elementType} in {sei.ConflictInfo.Context}: {sei.ConflictInfo.GetAbsolutePath()}")
                                  ));

                UpdateTreeNodeIfVisible(sei.ElementInfo, true);

                break;
            }
        }
        /// <summary>
        /// is called when the status of a sync-element has changed
        /// </summary>
        /// <param name="sei"></param>
        public void OnSyncElementStatusChanged(SyncElementInfo sei)
        {
            //parallel access management
            _statusChangedEventsSetAccessRequested = true;
            if (_statusChangedEventsGetAccessRequested && _statusChangedEvents.Count >= maxPendingStatusChangedEventsToProcess)
            {
                _statusChangedEventsGetAccess = true;
            }
            while (_statusChangedEventsGetAccess)
            {
                Thread.Sleep(1);
            }
            _statusChangedEventsSetAccessRequested = false;

            // Add events to list, in order to process them in another thread.
            // So the sync execution is not delayed.
            _statusChangedEvents.Add(new StatusChangedEvent(sei, sei.SyncStatus));
        }
 /// <summary>
 /// create StatusChangedEvent
 /// </summary>
 /// <param name="syncElementInfo">reference to the element, whose status has been changed</param>
 /// <param name="createStatus">the status of the element, which should be preserved</param>
 public StatusChangedEvent(SyncElementInfo syncElementInfo, SyncElementStatus createStatus)
 {
     SyncElementInfo = syncElementInfo;
     CreateStatus    = createStatus;
 }
Exemple #4
0
        public void OnSyncElementStatusChanged(SyncElementInfo sei)
        {
            bool isFile = typeof(SyncFileInfo) == sei.GetType();

            switch (sei.SyncStatus)
            {
            case SyncElementStatus.ElementFound:

                //update treeview
                TreeNodeCollection tnc = treeView1.Nodes;
                TreeNode           treeNode;
                for (int i = 0; i < sei.ElementInfo.TreePath.Count; i++)
                {
                    treeNode = tnc[sei.ElementInfo.TreePath[i].Info.Name];
                    if (treeNode == null)
                    {
                        return;
                    }

                    tnc = treeNode.Nodes;
                }
                treeView1.Invoke(new Action(() =>
                {
                    if (isFile)
                    {
                        AddFileTreeNode(tnc, (MyFileInfo)sei.ElementInfo);
                    }
                    else
                    {
                        AddDirTreeNode(tnc, (MyDirInfo)sei.ElementInfo);
                    }
                }));

                break;

            case SyncElementStatus.ChangeDetectingStarted:
                Console.WriteLine("Start detecting file:" + sei.ElementInfo.FullPath);
                break;

            case SyncElementStatus.NoChangeFound:

                break;

            case SyncElementStatus.ChangeFound:
                TreeNode tn1 = getTreeNode(sei.ElementInfo);
                if (tn1 == null)
                {
                    break;
                }
                tn1.ForeColor = Color.Blue;

                if (tn1 != null)
                {
                    treeView1.Invoke(new Action(() => {
                        foreach (TreeNode ptn in NextParentNode(tn1))
                        {
                            ptn.Text = ptn.Text + " - #cf";
                        }
                    }));
                }

                if (isFile)
                {
                    Console.WriteLine("file change detected:" + sei.SyncExecutionInfo.AbsoluteDestPath);
                }
                else
                {
                    Console.WriteLine("directory change detected:" + sei.SyncExecutionInfo.AbsoluteDestPath);
                }
                break;

            case SyncElementStatus.ChangeApplied:
                TreeNode tn2 = getTreeNode(sei.ElementInfo);
                if (tn2 != null)
                {
                    treeView1.Invoke(new Action(() => {
                        foreach (TreeNode ptn in NextParentNode(tn2))
                        {
                            ptn.Text = ptn.Text + " - #ca";
                        }
                    }));
                }

                if (isFile)
                {
                    if (sei.SyncExecutionInfo.Remove)
                    {
                        Console.WriteLine("file deleted:" + sei.SyncExecutionInfo.AbsoluteDestPath);
                    }
                    else
                    {
                        Console.WriteLine("file copied:" + sei.SyncExecutionInfo.AbsoluteDestPath);
                    }
                }
                else
                {
                    if (sei.SyncExecutionInfo.Remove)
                    {
                        Console.WriteLine("directory removed:" + sei.SyncExecutionInfo.AbsoluteDestPath);
                    }
                    else
                    {
                        Console.WriteLine("Directory created:" + sei.SyncExecutionInfo.AbsoluteDestPath);
                    }
                }
                break;

            case SyncElementStatus.Conflicted:
                string elementType  = isFile ? "file" : "dir";
                string conflictType = "";
                switch (sei.ConflictInfo.Type)
                {
                case ConflictType.IO:
                    conflictType = "IO";
                    break;

                case ConflictType.UA:
                    conflictType = "Access Denied";
                    break;

                case ConflictType.Unknown:
                    conflictType = "Unknown";
                    break;
                }

                AddLogLine($"Conflict ({conflictType}) at {elementType}: {sei.ConflictInfo.GetAbsolutePath()}");
                break;
            }
        }