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 0;
return Math.Min(((double)totalTransferredFiles + (double)totalFailedFiles) / (double)totalSourcePaths * 100, 100);
}
public static double CalculateByteLevelProgress(long totalSourceBytes, long totalTransferredBytes)
{
if (totalTransferredBytes <= 0 || totalSourceBytes <= 0)
return 0;
return Math.Min((double)totalTransferredBytes / (double)totalSourceBytes * 100, 100);
}
public static double CalculateTransferRateMbps(long totalTransferredBytes, double totalSeconds)
{
if (!(totalSeconds <= 0)) {
double num = (double)totalTransferredBytes * 8 / 1048576;
return num / totalSeconds;
}
return 0;
}
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) {
long val = Convert.ToInt64(Math.Ceiling((double)totalRequestBytes / (double)chunkSize));
return Convert.ToInt32(Math.Min(val, 2147483647));
}
return 1;
}
}
}