mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-20 21:43:33 -07:00
Cleanup RootFolderService and Validation
This commit is contained in:
parent
1d120be466
commit
7d045d5c54
9 changed files with 40 additions and 99 deletions
|
@ -47,7 +47,7 @@ namespace Lidarr.Api.V3.Artist
|
||||||
RootFolderValidator rootFolderValidator,
|
RootFolderValidator rootFolderValidator,
|
||||||
ArtistPathValidator artistPathValidator,
|
ArtistPathValidator artistPathValidator,
|
||||||
ArtistExistsValidator artistExistsValidator,
|
ArtistExistsValidator artistExistsValidator,
|
||||||
SeriesAncestorValidator seriesAncestorValidator,
|
ArtistAncestorValidator artistAncestorValidator,
|
||||||
ProfileExistsValidator profileExistsValidator,
|
ProfileExistsValidator profileExistsValidator,
|
||||||
LanguageProfileExistsValidator languageProfileExistsValidator
|
LanguageProfileExistsValidator languageProfileExistsValidator
|
||||||
)
|
)
|
||||||
|
@ -73,7 +73,7 @@ namespace Lidarr.Api.V3.Artist
|
||||||
.IsValidPath()
|
.IsValidPath()
|
||||||
.SetValidator(rootFolderValidator)
|
.SetValidator(rootFolderValidator)
|
||||||
.SetValidator(artistPathValidator)
|
.SetValidator(artistPathValidator)
|
||||||
.SetValidator(seriesAncestorValidator)
|
.SetValidator(artistAncestorValidator)
|
||||||
.When(s => !s.Path.IsNullOrWhiteSpace());
|
.When(s => !s.Path.IsNullOrWhiteSpace());
|
||||||
|
|
||||||
SharedValidator.RuleFor(s => s.QualityProfileId).SetValidator(profileExistsValidator);
|
SharedValidator.RuleFor(s => s.QualityProfileId).SetValidator(profileExistsValidator);
|
||||||
|
|
|
@ -16,15 +16,15 @@ namespace NzbDrone.Core.Music
|
||||||
public class AddArtistValidator : AbstractValidator<Artist>, IAddArtistValidator
|
public class AddArtistValidator : AbstractValidator<Artist>, IAddArtistValidator
|
||||||
{
|
{
|
||||||
public AddArtistValidator(RootFolderValidator rootFolderValidator,
|
public AddArtistValidator(RootFolderValidator rootFolderValidator,
|
||||||
SeriesPathValidator seriesPathValidator,
|
ArtistPathValidator artistPathValidator,
|
||||||
SeriesAncestorValidator seriesAncestorValidator,
|
ArtistAncestorValidator artistAncestorValidator,
|
||||||
ArtistSlugValidator artistTitleSlugValidator)
|
ArtistSlugValidator artistTitleSlugValidator)
|
||||||
{
|
{
|
||||||
RuleFor(c => c.Path).Cascade(CascadeMode.StopOnFirstFailure)
|
RuleFor(c => c.Path).Cascade(CascadeMode.StopOnFirstFailure)
|
||||||
.IsValidPath()
|
.IsValidPath()
|
||||||
.SetValidator(rootFolderValidator)
|
.SetValidator(rootFolderValidator)
|
||||||
.SetValidator(seriesPathValidator)
|
.SetValidator(artistPathValidator)
|
||||||
.SetValidator(seriesAncestorValidator);
|
.SetValidator(artistAncestorValidator);
|
||||||
|
|
||||||
RuleFor(c => c.NameSlug).SetValidator(artistTitleSlugValidator);// TODO: Check if we are going to use a slug or artistName
|
RuleFor(c => c.NameSlug).SetValidator(artistTitleSlugValidator);// TODO: Check if we are going to use a slug or artistName
|
||||||
}
|
}
|
||||||
|
|
|
@ -1216,9 +1216,7 @@
|
||||||
<Compile Include="Validation\Paths\PathValidator.cs" />
|
<Compile Include="Validation\Paths\PathValidator.cs" />
|
||||||
<Compile Include="Validation\Paths\StartupFolderValidator.cs" />
|
<Compile Include="Validation\Paths\StartupFolderValidator.cs" />
|
||||||
<Compile Include="Validation\Paths\RootFolderValidator.cs" />
|
<Compile Include="Validation\Paths\RootFolderValidator.cs" />
|
||||||
<Compile Include="Validation\Paths\SeriesAncestorValidator.cs" />
|
<Compile Include="Validation\Paths\ArtistAncestorValidator.cs" />
|
||||||
<Compile Include="Validation\Paths\SeriesExistsValidator.cs" />
|
|
||||||
<Compile Include="Validation\Paths\SeriesPathValidator.cs" />
|
|
||||||
<Compile Include="Validation\ProfileExistsValidator.cs" />
|
<Compile Include="Validation\ProfileExistsValidator.cs" />
|
||||||
<Compile Include="Validation\RuleBuilderExtensions.cs" />
|
<Compile Include="Validation\RuleBuilderExtensions.cs" />
|
||||||
<Compile Include="Validation\UrlValidator.cs" />
|
<Compile Include="Validation\UrlValidator.cs" />
|
||||||
|
|
|
@ -7,7 +7,7 @@ using NzbDrone.Common;
|
||||||
using NzbDrone.Common.Disk;
|
using NzbDrone.Common.Disk;
|
||||||
using NzbDrone.Common.Extensions;
|
using NzbDrone.Common.Extensions;
|
||||||
using NzbDrone.Core.Configuration;
|
using NzbDrone.Core.Configuration;
|
||||||
using NzbDrone.Core.Tv;
|
using NzbDrone.Core.Music;
|
||||||
|
|
||||||
namespace NzbDrone.Core.RootFolders
|
namespace NzbDrone.Core.RootFolders
|
||||||
{
|
{
|
||||||
|
@ -24,7 +24,7 @@ namespace NzbDrone.Core.RootFolders
|
||||||
{
|
{
|
||||||
private readonly IRootFolderRepository _rootFolderRepository;
|
private readonly IRootFolderRepository _rootFolderRepository;
|
||||||
private readonly IDiskProvider _diskProvider;
|
private readonly IDiskProvider _diskProvider;
|
||||||
private readonly ISeriesRepository _seriesRepository;
|
private readonly IArtistRepository _artistRepository;
|
||||||
private readonly IConfigService _configService;
|
private readonly IConfigService _configService;
|
||||||
private readonly Logger _logger;
|
private readonly Logger _logger;
|
||||||
|
|
||||||
|
@ -44,13 +44,13 @@ namespace NzbDrone.Core.RootFolders
|
||||||
|
|
||||||
public RootFolderService(IRootFolderRepository rootFolderRepository,
|
public RootFolderService(IRootFolderRepository rootFolderRepository,
|
||||||
IDiskProvider diskProvider,
|
IDiskProvider diskProvider,
|
||||||
ISeriesRepository seriesRepository,
|
IArtistRepository artistRepository,
|
||||||
IConfigService configService,
|
IConfigService configService,
|
||||||
Logger logger)
|
Logger logger)
|
||||||
{
|
{
|
||||||
_rootFolderRepository = rootFolderRepository;
|
_rootFolderRepository = rootFolderRepository;
|
||||||
_diskProvider = diskProvider;
|
_diskProvider = diskProvider;
|
||||||
_seriesRepository = seriesRepository;
|
_artistRepository = artistRepository;
|
||||||
_configService = configService;
|
_configService = configService;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,7 @@ namespace NzbDrone.Core.RootFolders
|
||||||
}
|
}
|
||||||
|
|
||||||
var results = new List<UnmappedFolder>();
|
var results = new List<UnmappedFolder>();
|
||||||
var series = _seriesRepository.All().ToList();
|
var artist = _artistRepository.All().ToList();
|
||||||
|
|
||||||
if (!_diskProvider.FolderExists(path))
|
if (!_diskProvider.FolderExists(path))
|
||||||
{
|
{
|
||||||
|
@ -142,8 +142,8 @@ namespace NzbDrone.Core.RootFolders
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
var possibleSeriesFolders = _diskProvider.GetDirectories(path).ToList();
|
var possibleArtistFolders = _diskProvider.GetDirectories(path).ToList();
|
||||||
var unmappedFolders = possibleSeriesFolders.Except(series.Select(s => s.Path), PathEqualityComparer.Instance).ToList();
|
var unmappedFolders = possibleArtistFolders.Except(artist.Select(s => s.Path), PathEqualityComparer.Instance).ToList();
|
||||||
|
|
||||||
foreach (string unmappedFolder in unmappedFolders)
|
foreach (string unmappedFolder in unmappedFolders)
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,15 +12,11 @@ namespace NzbDrone.Core.Tv
|
||||||
public class AddSeriesValidator : AbstractValidator<Series>, IAddSeriesValidator
|
public class AddSeriesValidator : AbstractValidator<Series>, IAddSeriesValidator
|
||||||
{
|
{
|
||||||
public AddSeriesValidator(RootFolderValidator rootFolderValidator,
|
public AddSeriesValidator(RootFolderValidator rootFolderValidator,
|
||||||
SeriesPathValidator seriesPathValidator,
|
|
||||||
SeriesAncestorValidator seriesAncestorValidator,
|
|
||||||
SeriesTitleSlugValidator seriesTitleSlugValidator)
|
SeriesTitleSlugValidator seriesTitleSlugValidator)
|
||||||
{
|
{
|
||||||
RuleFor(c => c.Path).Cascade(CascadeMode.StopOnFirstFailure)
|
RuleFor(c => c.Path).Cascade(CascadeMode.StopOnFirstFailure)
|
||||||
.IsValidPath()
|
.IsValidPath()
|
||||||
.SetValidator(rootFolderValidator)
|
.SetValidator(rootFolderValidator);
|
||||||
.SetValidator(seriesPathValidator)
|
|
||||||
.SetValidator(seriesAncestorValidator);
|
|
||||||
|
|
||||||
RuleFor(c => c.TitleSlug).SetValidator(seriesTitleSlugValidator);
|
RuleFor(c => c.TitleSlug).SetValidator(seriesTitleSlugValidator);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
using System.Linq;
|
||||||
|
using FluentValidation.Validators;
|
||||||
|
using NzbDrone.Common.Extensions;
|
||||||
|
using NzbDrone.Core.Music;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Validation.Paths
|
||||||
|
{
|
||||||
|
public class ArtistAncestorValidator : PropertyValidator
|
||||||
|
{
|
||||||
|
private readonly IArtistService _artistService;
|
||||||
|
|
||||||
|
public ArtistAncestorValidator(IArtistService artistService)
|
||||||
|
: base("Path is an ancestor of an existing path")
|
||||||
|
{
|
||||||
|
_artistService = artistService;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool IsValid(PropertyValidatorContext context)
|
||||||
|
{
|
||||||
|
if (context.PropertyValue == null) return true;
|
||||||
|
|
||||||
|
return !_artistService.GetAllArtists().Any(s => context.PropertyValue.ToString().IsParentPath(s.Path));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,25 +0,0 @@
|
||||||
using System.Linq;
|
|
||||||
using FluentValidation.Validators;
|
|
||||||
using NzbDrone.Common.Extensions;
|
|
||||||
using NzbDrone.Core.Tv;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.Validation.Paths
|
|
||||||
{
|
|
||||||
public class SeriesAncestorValidator : PropertyValidator
|
|
||||||
{
|
|
||||||
private readonly ISeriesService _seriesService;
|
|
||||||
|
|
||||||
public SeriesAncestorValidator(ISeriesService seriesService)
|
|
||||||
: base("Path is an ancestor of an existing path")
|
|
||||||
{
|
|
||||||
_seriesService = seriesService;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool IsValid(PropertyValidatorContext context)
|
|
||||||
{
|
|
||||||
if (context.PropertyValue == null) return true;
|
|
||||||
|
|
||||||
return !_seriesService.GetAllSeries().Any(s => context.PropertyValue.ToString().IsParentPath(s.Path));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
using System;
|
|
||||||
using FluentValidation.Validators;
|
|
||||||
using NzbDrone.Core.Tv;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.Validation.Paths
|
|
||||||
{
|
|
||||||
public class SeriesExistsValidator : PropertyValidator
|
|
||||||
{
|
|
||||||
private readonly ISeriesService _seriesService;
|
|
||||||
|
|
||||||
public SeriesExistsValidator(ISeriesService seriesService)
|
|
||||||
: base("This series has already been added")
|
|
||||||
{
|
|
||||||
_seriesService = seriesService;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool IsValid(PropertyValidatorContext context)
|
|
||||||
{
|
|
||||||
if (context.PropertyValue == null) return true;
|
|
||||||
|
|
||||||
var tvdbId = Convert.ToInt32(context.PropertyValue.ToString());
|
|
||||||
|
|
||||||
return (!_seriesService.GetAllSeries().Exists(s => s.TvdbId == tvdbId));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
using FluentValidation.Validators;
|
|
||||||
using NzbDrone.Common.Extensions;
|
|
||||||
using NzbDrone.Core.Tv;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.Validation.Paths
|
|
||||||
{
|
|
||||||
public class SeriesPathValidator : PropertyValidator
|
|
||||||
{
|
|
||||||
private readonly ISeriesService _seriesService;
|
|
||||||
|
|
||||||
public SeriesPathValidator(ISeriesService seriesService)
|
|
||||||
: base("Path is already configured for another series")
|
|
||||||
{
|
|
||||||
_seriesService = seriesService;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool IsValid(PropertyValidatorContext context)
|
|
||||||
{
|
|
||||||
if (context.PropertyValue == null) return true;
|
|
||||||
|
|
||||||
dynamic instance = context.ParentContext.InstanceToValidate;
|
|
||||||
var instanceId = (int)instance.Id;
|
|
||||||
|
|
||||||
return (!_seriesService.GetAllSeries().Exists(s => s.Path.PathEquals(context.PropertyValue.ToString()) && s.Id != instanceId));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue