private void Sync() { var remoteFileList = _buildClient.GetFileList(_remoteDirectory).MakeReadableFileList(); var localFileList = FileMetadata.GenerateFileList(_localDirectory).MakeReadableFileList(); var filesToTransfer = new List <Tuple <string, FileTransmitDirection> >(); foreach (var remoteFile in remoteFileList) { if (CheckSkipFile(remoteFile.Key, _remoteIgnore)) { Logger.Log(LogType.Debug, $"[Sync] Skipping remote file => {remoteFile.Key}"); continue; } FileMetadata localFileMetadata; if (!localFileList.TryGetValue(remoteFile.Key, out localFileMetadata)) { Logger.Log(LogType.Warning, $"Local file missing '{remoteFile.Key}'"); filesToTransfer.Add(new Tuple <string, FileTransmitDirection>(remoteFile.Key, FileTransmitDirection.Receive)); continue; } var delta = Utilities.GetDateTimeDeltaSeconds( localFileMetadata.LastModifiedUtc, remoteFile.Value.LastModifiedUtc); if (delta > 0) { Logger.Log(LogType.Warning, $"Local file date old '{remoteFile.Key}' (L: {localFileMetadata.LastModifiedUtc}, R: {remoteFile.Value.LastModifiedUtc})"); filesToTransfer.Add(new Tuple <string, FileTransmitDirection>(remoteFile.Key, FileTransmitDirection.Receive)); } else if (delta < 0) { Logger.Log(LogType.Warning, $"Remote file date old '{remoteFile.Key}' (L: {localFileMetadata.LastModifiedUtc}, R: {remoteFile.Value.LastModifiedUtc})"); filesToTransfer.Add(new Tuple <string, FileTransmitDirection>(remoteFile.Key, FileTransmitDirection.Send)); } } foreach (var localFile in localFileList) { if (CheckSkipFile(localFile.Key, _localIgnore)) { Logger.Log(LogType.Debug, $"[Sync] Skipping local file => {localFile.Key}"); continue; } FileMetadata remoteFileMetadata; if (!remoteFileList.TryGetValue(localFile.Key, out remoteFileMetadata)) { Logger.Log(LogType.Warning, $"Remote file missing '{localFile.Key}'"); filesToTransfer.Add(new Tuple <string, FileTransmitDirection>(localFile.Key, FileTransmitDirection.Send)); continue; } } foreach (var tuple in filesToTransfer) { Logger.Log(LogType.Normal, $"{(tuple.Item2 == FileTransmitDirection.Send ? "Sending" : "Receiving")} {tuple.Item1} ..."); _buildClient.TransferFile( Path.Combine(_localDirectory, tuple.Item1), Path.Combine(_remoteDirectory, tuple.Item1), tuple.Item2, TimeSpan.FromSeconds(10)); } }