mirror of https://github.com/Radarr/Radarr
39 lines
1.2 KiB
C#
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);
|
|
}
|
|
}
|
|
} |