Example #1
0
        /// <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]));
        }
Example #2
0
        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;
            }
        }