RetryablePathStatusChecker
using System;
namespace Relativity.Transfer.Paths
{
internal class RetryablePathStatusChecker : IPathStatusChecker
{
private readonly ClientConfiguration configuration;
public RetryablePathStatusChecker(ClientConfiguration configuration)
{
if (configuration == null)
throw new ArgumentNullException("configuration");
this.configuration = configuration;
}
public bool IsCompleted(TransferPathStatus status)
{
switch (status) {
case TransferPathStatus.BadPathError:
if (!configuration.BadPathErrorsRetry)
break;
goto default;
default:
if (status != TransferPathStatus.FileNotFound || configuration.FileNotFoundErrorsRetry) {
if (status == TransferPathStatus.PermissionsError)
return !configuration.PermissionErrorsRetry;
return false;
}
break;
case TransferPathStatus.Skipped:
case TransferPathStatus.Successful:
break;
}
return true;
}
public bool IsRetrayable(TransferPathStatus status)
{
switch (status) {
case TransferPathStatus.BadPathError:
if (configuration.BadPathErrorsRetry)
break;
goto default;
default:
if (status != TransferPathStatus.FileNotFound || !configuration.FileNotFoundErrorsRetry) {
if (status == TransferPathStatus.PermissionsError)
return configuration.PermissionErrorsRetry;
return false;
}
break;
case TransferPathStatus.None:
case TransferPathStatus.Failed:
case TransferPathStatus.Started:
break;
}
return true;
}
}
}