Radarr/src/Radarr.Api.V3/Movies/MovieFolderAsRootFolderVali...

39 lines
1.2 KiB
C#

using System;
using System.IO;
using FluentValidation.Validators;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.Organizer;
namespace Radarr.Api.V3.Movies
{
public class MovieFolderAsRootFolderValidator : PropertyValidator
{
private readonly IBuildFileNames _fileNameBuilder;
public MovieFolderAsRootFolderValidator(IBuildFileNames fileNameBuilder)
: base("Root folder path contains movie folder")
{
_fileNameBuilder = fileNameBuilder;
}
protected override bool IsValid(PropertyValidatorContext context)
{
if (context.PropertyValue == null) return true;
var movieResource = context.Instance as MovieResource;
if (movieResource == null) return true;
var rootFolderPath = context.PropertyValue.ToString();
var rootFolder = new DirectoryInfo(rootFolderPath).Name;
var movie = movieResource.ToModel();
var movieFolder = _fileNameBuilder.GetMovieFolder(movie);
if (movieFolder == rootFolder) return false;
var distance = movieFolder.LevenshteinDistance(rootFolder);
return distance >= Math.Max(1, movieFolder.Length * 0.2);
}
}
}