Sonarr/src/Sonarr.Api.V3/Series/SeriesFolderAsRootFolderVal...

55 lines
1.5 KiB
C#
Raw Normal View History

using System;
using System.IO;
using FluentValidation.Validators;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.Organizer;
namespace Sonarr.Api.V3.Series
{
public class SeriesFolderAsRootFolderValidator : PropertyValidator
{
private readonly IBuildFileNames _fileNameBuilder;
public SeriesFolderAsRootFolderValidator(IBuildFileNames fileNameBuilder)
: base("Root folder path contains series folder")
{
_fileNameBuilder = fileNameBuilder;
}
protected override bool IsValid(PropertyValidatorContext context)
{
2021-08-03 04:43:28 +00:00
if (context.PropertyValue == null)
{
return true;
}
var seriesResource = context.Instance as SeriesResource;
2021-08-03 04:43:28 +00:00
if (seriesResource == null)
{
return true;
}
var rootFolderPath = context.PropertyValue.ToString();
2021-08-03 04:43:28 +00:00
if (rootFolderPath.IsNullOrWhiteSpace())
{
return true;
}
var rootFolder = new DirectoryInfo(rootFolderPath).Name;
var series = seriesResource.ToModel();
var seriesFolder = _fileNameBuilder.GetSeriesFolder(series);
2021-08-03 04:43:28 +00:00
if (seriesFolder == rootFolder)
{
return false;
}
2019-08-04 15:38:36 +00:00
var distance = seriesFolder.LevenshteinDistance(rootFolder);
return distance >= Math.Max(1, seriesFolder.Length * 0.2);
}
}
}