AsperaPathStatusResolver
using Aspera.Transfer;
using Relativity.Transfer.Aspera.Resources;
using Relativity.Transfer.Paths;
namespace Relativity.Transfer.Aspera.Paths
{
internal class AsperaPathStatusResolver : IAsperaPathStatusResolver
{
private readonly IPathStatusResolver pathStatusResolver;
public AsperaPathStatusResolver(IPathStatusResolver pathStatusResolver)
{
this.pathStatusResolver = pathStatusResolver;
}
public TransferPathStatus Resolve(FileStats statistics)
{
TransferPathStatus pathStatus = ResolveBasedOfStatistics(statistics);
return pathStatusResolver.Resolve(pathStatus);
}
private static TransferPathStatus ResolveBasedOfStatistics(FileStats statistics)
{
switch (statistics.state) {
case FileState.FINISHED:
return TransferPathStatus.Successful;
case FileState.TRANSFERRING:
return TransferPathStatus.Started;
case FileState.SKIPPED:
return TransferPathStatus.Skipped;
case FileState.FAILED:
return ResolveBasedOnError(statistics);
default:
return TransferPathStatus.None;
}
}
private static TransferPathStatus ResolveBasedOnError(FileStats statistics)
{
int errCode = statistics.errCode;
if (errCode <= 19) {
switch (errCode) {
case 9:
case 19:
break;
case 4:
return TransferPathStatus.FileNotFound;
case 5:
goto IL_0052;
default:
goto IL_006b;
}
goto IL_004e;
}
if (errCode <= 30) {
if (errCode == 28)
return TransferPathStatus.Canceled;
if ((uint)(errCode - 29) <= 1)
goto IL_004e;
} else {
switch (errCode) {
case 38:
goto IL_004e;
case 41:
return TransferPathStatus.BadPathError;
}
if ((uint)(errCode - 55) <= 1)
goto IL_004e;
}
goto IL_006b;
IL_006b:
return TransferPathStatus.Failed;
IL_0052:
if (statistics.errDescription.Equals(AsperaStrings.ThereIsNotEnoughtSpaceError))
return TransferPathStatus.Fatal;
return TransferPathStatus.PermissionsError;
IL_004e:
return TransferPathStatus.Fatal;
}
}
}