public void SyncElementStatusChanged(SyncElementInfo sei) { bool isFile = typeof(SyncFileInfo) == sei.GetType(); switch (sei.SyncStatus) { case SyncElementStatus.ElementFound: if (isFile) { _filesFoundCount++; DirTree.AddFile((MyFileInfo)sei.ElementInfo); } else { _dirsFoundCount++; DirTree.AddDir((MyDirInfo)sei.ElementInfo); } break; case SyncElementStatus.ChangeDetectingStarted: break; case SyncElementStatus.NoChangeFound: break; case SyncElementStatus.ChangeFound: if (isFile) { SyncFileExecutionInfos.Add((SyncFileExecutionInfo)sei.SyncExecutionInfo); if (sei.SyncExecutionInfo.Remove) { _filesToRemoveCount++; _filesTotalSizeToRemove += ((MyFileInfo)sei.ElementInfo).Size; } else { _filesToCopyCount++; _filesTotalSizeToCopy += ((MyFileInfo)sei.ElementInfo).Size; } } else { SyncDirExecutionInfos.Add((SyncDirExecutionInfo)sei.SyncExecutionInfo); if (sei.SyncExecutionInfo.Remove) { _dirsToRemoveCount++; } else { _dirsToCreateCount++; } } break; case SyncElementStatus.ChangeApplied: if (isFile) { if (sei.SyncExecutionInfo.Remove) { _fileSizeRemoved += ((SyncFileInfo)sei).FileInfo.Size; _filesRemovedCount++; } else { _fileSizeCopied += ((SyncFileInfo)sei).FileInfo.Size; _filesCopiedCount++; } } else { if (sei.SyncExecutionInfo.Remove) { _dirsRemovedCount++; } else { _dirsCreatedCount++; } } break; case SyncElementStatus.Conflicted: ConflictInfos.Add(sei.ConflictInfo); break; } _listener?.OnSyncElementStatusChanged(sei); }