TransferHelper
using System;
using System.IO;
namespace Relativity.Transfer
{
internal static class TransferHelper
{
private const string RelativityTransferFolder = "Relativity-Transfer";
public static double CalculateFileLevelProgress(long totalSourcePaths, long totalTransferredFiles, long totalFailedFiles)
{
if (totalTransferredFiles > 0 && totalSourcePaths > 0)
return Math.Min(((double)totalTransferredFiles + (double)totalFailedFiles) / (double)totalSourcePaths * 100, 100);
return 0;
}
public static double CalculateByteLevelProgress(long totalSourceBytes, long totalTransferredBytes)
{
if (totalTransferredBytes > 0 && totalSourceBytes > 0)
return Math.Min((double)totalTransferredBytes / (double)totalSourceBytes * 100, 100);
return 0;
}
public static double CalculateTransferRateMbps(long totalTransferredBytes, double totalSeconds)
{
if (totalSeconds <= 0)
return 0;
return (double)totalTransferredBytes * 8 / 1048576 / totalSeconds;
}
public static string CreateAppDataRootDirectory()
{
string text = Path.Combine(Path.GetTempPath(), "Relativity-Transfer");
if (!Directory.Exists(text))
Directory.CreateDirectory(text);
return text;
}
public static string CreateTransferLogDirectory(ITransferLog log, IFileSystemService fileSystemService, string transferLogDirectory, string logFolder)
{
try {
transferLogDirectory = Environment.ExpandEnvironmentVariables(transferLogDirectory);
if (string.IsNullOrWhiteSpace(transferLogDirectory))
transferLogDirectory = CreateAppDataRootDirectory();
transferLogDirectory = fileSystemService.Combine(transferLogDirectory, logFolder);
if (!string.IsNullOrEmpty(transferLogDirectory) && !fileSystemService.DirectoryExists(transferLogDirectory))
fileSystemService.CreateDirectory(transferLogDirectory);
return transferLogDirectory;
} catch (Exception exception) {
if (ExceptionHelper.IsFatalException(exception))
throw;
log.LogError(exception, "Failed to create the transfer log directory.", Array.Empty<object>());
return string.Empty;
}
}
public static int CalculateTotalChunks(long totalRequestBytes, long chunkSize)
{
if (totalRequestBytes == 0 || chunkSize == 0)
return 1;
return Convert.ToInt32(Math.Min(Convert.ToInt64(Math.Ceiling((double)totalRequestBytes / (double)chunkSize)), 2147483647));
}
}
}