/// <summary> /// Updates the progress for the given segment /// </summary> /// <param name="segmentProgress">The segment progress.</param> internal void SetSegmentProgress(SegmentUploadProgress segmentProgress) { lock (_segmentProgress) { var previousProgress = _segmentProgress[segmentProgress.SegmentNumber]; //calculate how many additional bytes we have uploaded so far //the caveat here is that if a segment failed, we need to report it as 0 bytes uploaded (even though we did upload something; upon resume, we will reupload from scratch) long deltaLength = segmentProgress.IsFailed ? 0 : segmentProgress.UploadedByteCount; deltaLength -= previousProgress.IsFailed ? 0 : previousProgress.UploadedByteCount; this.UploadedByteCount += deltaLength; _segmentProgress[segmentProgress.SegmentNumber] = segmentProgress; } }