diff --git a/NzbDrone.Api/Series/SeriesModule.cs b/NzbDrone.Api/Series/SeriesModule.cs index bc761fa6e..c934ee62d 100644 --- a/NzbDrone.Api/Series/SeriesModule.cs +++ b/NzbDrone.Api/Series/SeriesModule.cs @@ -2,9 +2,11 @@ using System.Collections.Generic; using System.Linq; using FluentValidation; +using Nancy; using NzbDrone.Core.SeriesStats; using NzbDrone.Core.Tv; using NzbDrone.Api.Validation; +using NzbDrone.Api.Extensions; namespace NzbDrone.Api.Series { @@ -25,15 +27,30 @@ namespace NzbDrone.Api.Series UpdateResource = UpdateSeries; DeleteResource = DeleteSeries; + Get["/{slug}"] = o => GetSeries((string)o.slug.ToString()); SharedValidator.RuleFor(s => s.RootFolderId).ValidId(); SharedValidator.RuleFor(s => s.QualityProfileId).ValidId(); + + PostValidator.RuleFor(s => s.Title).NotEmpty(); } + private Response GetSeries(string slug) + { + var series = _seriesService.FindBySlug(slug); + + if (series == null) + { + return new NotFoundResponse(); + } + + return series.AsResponse(); + } + private List AllSeries() { var seriesStats = _seriesStatisticsService.SeriesStatistics(); diff --git a/NzbDrone.Core/Tv/SeriesRepository.cs b/NzbDrone.Core/Tv/SeriesRepository.cs index 182722563..7d9c1d3ce 100644 --- a/NzbDrone.Core/Tv/SeriesRepository.cs +++ b/NzbDrone.Core/Tv/SeriesRepository.cs @@ -13,6 +13,7 @@ namespace NzbDrone.Core.Tv Series FindByTitle(string cleanTitle); Series FindByTvdbId(int tvdbId); void SetSeriesType(int seriesId, SeriesTypes seriesTypes); + Series FindBySlug(string slug); } public class SeriesRepository : BasicRepository, ISeriesRepository @@ -47,5 +48,9 @@ namespace NzbDrone.Core.Tv SetFields(new Series { Id = seriesId, SeriesType = seriesType }, s => s.SeriesType); } + public Series FindBySlug(string slug) + { + return Query.SingleOrDefault(c => c.TitleSlug == slug.ToLower()); + } } } \ No newline at end of file diff --git a/NzbDrone.Core/Tv/SeriesService.cs b/NzbDrone.Core/Tv/SeriesService.cs index f51401ca3..379a96268 100644 --- a/NzbDrone.Core/Tv/SeriesService.cs +++ b/NzbDrone.Core/Tv/SeriesService.cs @@ -35,6 +35,7 @@ namespace NzbDrone.Core.Tv Series UpdateSeries(Series series); bool SeriesPathExists(string folder); List GetSeriesInList(IEnumerable seriesIds); + Series FindBySlug(string slug); } public class SeriesService : ISeriesService, IHandleAsync @@ -147,6 +148,13 @@ namespace NzbDrone.Core.Tv return _seriesRepository.FindByTvdbId(tvdbId); } + + public Series FindBySlug(string slug) + { + var series = _seriesRepository.FindBySlug(slug); + return series; + } + public Series FindByTitle(string title) { var tvdbId = _sceneMappingService.GetTvDbId(title);