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