mirror of https://github.com/Radarr/Radarr
45 lines
1.5 KiB
C#
45 lines
1.5 KiB
C#
using System.Linq;
|
|
using FluentValidation.Validators;
|
|
using NzbDrone.Common.Extensions;
|
|
|
|
namespace NzbDrone.Core.Movies
|
|
{
|
|
public class MovieTitleSlugValidator : PropertyValidator
|
|
{
|
|
private readonly IMovieService _movieService;
|
|
|
|
public MovieTitleSlugValidator(IMovieService movieService)
|
|
: base("Title slug '{slug}' is in use by movie '{movieTitle}'")
|
|
{
|
|
_movieService = movieService;
|
|
}
|
|
|
|
protected override bool IsValid(PropertyValidatorContext context)
|
|
{
|
|
if (context.PropertyValue == null)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
dynamic instance = context.ParentContext.InstanceToValidate;
|
|
var instanceId = (int)instance.Id;
|
|
var slug = context.PropertyValue.ToString();
|
|
|
|
var conflictingMovie = _movieService.GetAllMovies()
|
|
.FirstOrDefault(s => s.TitleSlug.IsNotNullOrWhiteSpace() &&
|
|
s.TitleSlug.Equals(context.PropertyValue.ToString()) &&
|
|
s.Id != instanceId);
|
|
|
|
if (conflictingMovie == null)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
context.MessageFormatter.AppendArgument("slug", slug);
|
|
context.MessageFormatter.AppendArgument("movieTitle", conflictingMovie.Title);
|
|
|
|
return false;
|
|
}
|
|
}
|
|
}
|