Exemple #1
0
        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));
            }
        }