/// <summary> /// Pick up Chunk count when Multipart ETag. /// </summary> /// <param name="source"></param> /// <returns></returns> public static int GetETagChunkCount(this S3Object source) { if (source == null) { throw new ArgumentNullException(); } var eTag = source.GetETag(); if (eTag.Length == 32) { return(0); } return(int.Parse(eTag.Split('-')[1])); }
public S3FileHashStatus(SlimFileInfo?fileInfo, string fileHashHexString, int chunkSize, S3Object s3Object) { FileInfo = fileInfo; FileHashHexString = fileHashHexString; ChunkSize = chunkSize; S3Object = s3Object; S3Etag = S3Object?.GetETag(); IsFileMatchS3ETag = FileHashHexString == S3Etag; // Local : Not exists. // S3 : Exists if (!FileInfo.HasValue && S3Object != null) { FileSyncStatus = FileSyncStatus.RemoteOnly; } // Local : Exsits // S3 : Not exsits else if (FileInfo.HasValue && S3Object == null) { FileSyncStatus = FileSyncStatus.LocalOnly; } // Unmatch Calculated Etag and S3Object ETag. // Possible : Rewritten on Remote OR rewriteten on Local else if (!IsFileMatchS3ETag) { FileSyncStatus = FileSyncStatus.DiffExists; } // Match Calculated Etag and S3Object ETag. else if (IsFileMatchS3ETag) { FileSyncStatus = FileSyncStatus.Sync; } // Status is invalid. Not expected at all. (May be new AWS Implementation?) else { FileSyncStatus = FileSyncStatus.Undefined; } }