diff --git a/src/NzbDrone.Api/Extensions/RequestExtensions.cs b/src/NzbDrone.Api/Extensions/RequestExtensions.cs index 925070036..f08c0c075 100644 --- a/src/NzbDrone.Api/Extensions/RequestExtensions.cs +++ b/src/NzbDrone.Api/Extensions/RequestExtensions.cs @@ -1,4 +1,4 @@ -using System; +using System; using Nancy; namespace NzbDrone.Api.Extensions @@ -42,5 +42,17 @@ namespace NzbDrone.Api.Extensions return request.Path.StartsWith("/MediaCover/", StringComparison.InvariantCultureIgnoreCase) || request.Path.StartsWith("/Content/Images/", StringComparison.InvariantCultureIgnoreCase); } + + public static bool GetBooleanQueryParameter(this Request request, string parameter, bool defaultValue = false) + { + var parameterValue = request.Query[parameter]; + + if (parameterValue.HasValue) + { + return bool.Parse(parameterValue.Value); + } + + return defaultValue; + } } } diff --git a/src/NzbDrone.Api/Series/SeasonResource.cs b/src/NzbDrone.Api/Series/SeasonResource.cs index 4c20d8865..6115b8ab8 100644 --- a/src/NzbDrone.Api/Series/SeasonResource.cs +++ b/src/NzbDrone.Api/Series/SeasonResource.cs @@ -1,5 +1,6 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; +using NzbDrone.Core.MediaCover; using NzbDrone.Core.Tv; namespace NzbDrone.Api.Series { @@ -8,18 +9,20 @@ namespace NzbDrone.Api.Series public int SeasonNumber { get; set; } public bool Monitored { get; set; } public SeasonStatisticsResource Statistics { get; set; } + public List Images { get; set; } } public static class SeasonResourceMapper { - public static SeasonResource ToResource(this Season model) + public static SeasonResource ToResource(this Season model, bool includeImages = false) { if (model == null) return null; return new SeasonResource { SeasonNumber = model.SeasonNumber, - Monitored = model.Monitored + Monitored = model.Monitored, + Images = includeImages ? model.Images : null }; } @@ -30,13 +33,14 @@ namespace NzbDrone.Api.Series return new Season { SeasonNumber = resource.SeasonNumber, - Monitored = resource.Monitored + Monitored = resource.Monitored, + Images = resource.Images }; } - public static List ToResource(this IEnumerable models) + public static List ToResource(this IEnumerable models, bool includeImages = false) { - return models.Select(ToResource).ToList(); + return models.Select(s => ToResource(s, includeImages)).ToList(); } public static List ToModel(this IEnumerable resources) diff --git a/src/NzbDrone.Api/Series/SeriesEditorModule.cs b/src/NzbDrone.Api/Series/SeriesEditorModule.cs index 87cd53113..d68fa7aa4 100644 --- a/src/NzbDrone.Api/Series/SeriesEditorModule.cs +++ b/src/NzbDrone.Api/Series/SeriesEditorModule.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Nancy; using NzbDrone.Api.Extensions; @@ -24,7 +24,7 @@ namespace NzbDrone.Api.Series var series = resources.Select(seriesResource => seriesResource.ToModel(_seriesService.GetSeries(seriesResource.Id))).ToList(); return _seriesService.UpdateSeries(series) - .ToResource() + .ToResource(false) .AsResponse(HttpStatusCode.Accepted); } } diff --git a/src/NzbDrone.Api/Series/SeriesModule.cs b/src/NzbDrone.Api/Series/SeriesModule.cs index 20c5d8ecb..f69f44d00 100644 --- a/src/NzbDrone.Api/Series/SeriesModule.cs +++ b/src/NzbDrone.Api/Series/SeriesModule.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using FluentValidation; +using NzbDrone.Api.Extensions; using NzbDrone.Common.Extensions; using NzbDrone.Core.Datastore.Events; using NzbDrone.Core.MediaCover; @@ -86,26 +87,17 @@ namespace NzbDrone.Api.Series private SeriesResource GetSeries(int id) { - var series = _seriesService.GetSeries(id); - return MapToResource(series); - } - - private SeriesResource MapToResource(Core.Tv.Series series) - { - if (series == null) return null; + var includeSeasonImages = Request.GetBooleanQueryParameter("includeSeasonImages"); - var resource = series.ToResource(); - MapCoversToLocal(resource); - FetchAndLinkSeriesStatistics(resource); - PopulateAlternateTitles(resource); - - return resource; + var series = _seriesService.GetSeries(id); + return MapToResource(series, includeSeasonImages); } private List AllSeries() { + var includeSeasonImages = Request.GetBooleanQueryParameter("includeSeasonImages"); var seriesStats = _seriesStatisticsService.SeriesStatistics(); - var seriesResources = _seriesService.GetAllSeries().ToResource(); + var seriesResources = _seriesService.GetAllSeries().Select(s => s.ToResource(includeSeasonImages)).ToList(); MapCoversToLocal(seriesResources.ToArray()); LinkSeriesStatistics(seriesResources, seriesStats); @@ -143,6 +135,18 @@ namespace NzbDrone.Api.Series _seriesService.DeleteSeries(id, deleteFiles); } + private SeriesResource MapToResource(Core.Tv.Series series, bool includeSeasonImages) + { + if (series == null) return null; + + var resource = series.ToResource(includeSeasonImages); + MapCoversToLocal(resource); + FetchAndLinkSeriesStatistics(resource); + PopulateAlternateTitles(resource); + + return resource; + } + private void MapCoversToLocal(params SeriesResource[] series) { foreach (var seriesResource in series) diff --git a/src/NzbDrone.Api/Series/SeriesResource.cs b/src/NzbDrone.Api/Series/SeriesResource.cs index 86de03eb7..b973ad30d 100644 --- a/src/NzbDrone.Api/Series/SeriesResource.cs +++ b/src/NzbDrone.Api/Series/SeriesResource.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using NzbDrone.Api.REST; @@ -97,7 +97,7 @@ namespace NzbDrone.Api.Series public static class SeriesResourceMapper { - public static SeriesResource ToResource(this Core.Tv.Series model) + public static SeriesResource ToResource(this Core.Tv.Series model, bool includeSeasonImages = false) { if (model == null) return null; @@ -121,7 +121,7 @@ namespace NzbDrone.Api.Series AirTime = model.AirTime, Images = model.Images, - Seasons = model.Seasons.ToResource(), + Seasons = model.Seasons.ToResource(includeSeasonImages), Year = model.Year, Path = model.Path, @@ -214,9 +214,9 @@ namespace NzbDrone.Api.Series return series; } - public static List ToResource(this IEnumerable series) + public static List ToResource(this IEnumerable series, bool includeSeasonImages) { - return series.Select(ToResource).ToList(); + return series.Select(s => ToResource(s, includeSeasonImages)).ToList(); } } }