internal static async Task EstimateFileSizeAsync()

in src/Utilities.cs [121:157]


        internal static async Task<long> EstimateFileSizeAsync(IPersistentStorageFile cloudFile, double estimatedCompressionRatio)
        {
            if (cloudFile is IFileWithMetadata cloudFileWithMetadata)
            {
                IReadOnlyDictionary<string, string> metadata = await cloudFileWithMetadata.GetFileMetaDataAsync();
                long? estimatedSizeBytes = GetPositiveLongProperty(metadata,
#if !OPEN_SOURCE_COMPILATION
                    (cloudFile is S3PersistentStorageFile) ? Constants.AwsMetadataRawDataSize : 
#endif 
                    Constants.BlobMetadataRawDataSizeLegacy);
                if (estimatedSizeBytes.HasValue)
                {
                    return estimatedSizeBytes.Value;
                }

                estimatedSizeBytes = GetPositiveLongProperty(metadata,
#if !OPEN_SOURCE_COMPILATION
                    (cloudFile is S3PersistentStorageFile) ? Constants.AwsMetadataRawDataSize : 
#endif
                    Constants.BlobMetadataRawDataSize);
                if (estimatedSizeBytes.HasValue)
                {
                    return estimatedSizeBytes.Value;
                }
            }

            long blobSize = await cloudFile.GetLengthAsync();
            string blobName = cloudFile.GetFileName();

            // TODO: we need to add proper handling per format
            if (blobName.EndsWith(".zip", StringComparison.OrdinalIgnoreCase) || blobName.EndsWith(".gz", StringComparison.OrdinalIgnoreCase))
            {
                blobSize = (long)(blobSize * estimatedCompressionRatio);
            }

            return blobSize;
        }