using System; using System.Collections.Generic; using System.Linq; using FluentValidation; using NzbDrone.Core.SeriesStats; using NzbDrone.Core.Tv; using NzbDrone.Api.Validation; namespace NzbDrone.Api.Series { public class SeriesModule : NzbDroneRestModule { private readonly ISeriesService _seriesService; private readonly ISeriesStatisticsService _seriesStatisticsService; public SeriesModule(ISeriesService seriesService, ISeriesStatisticsService seriesStatisticsService) : base("/Series") { _seriesService = seriesService; _seriesStatisticsService = seriesStatisticsService; GetResourceAll = AllSeries; GetResourceById = GetSeries; CreateResource = AddSeries; UpdateResource = UpdateSeries; DeleteResource = DeleteSeries; SharedValidator.RuleFor(s => s.RootFolderId).ValidId(); SharedValidator.RuleFor(s => s.QualityProfileId).ValidId(); PostValidator.RuleFor(s => s.Title).NotEmpty(); } private List AllSeries() { var seriesStats = _seriesStatisticsService.SeriesStatistics(); var seriesModels = ApplyToList(_seriesService.GetAllSeries); foreach (var s in seriesModels) { var stats = seriesStats.SingleOrDefault(ss => ss.SeriesId == s.Id); if (stats == null) continue; s.EpisodeCount = stats.EpisodeCount; s.EpisodeFileCount = stats.EpisodeFileCount; s.SeasonCount = stats.SeasonCount; s.NextAiring = stats.NextAiring; } return seriesModels; } private SeriesResource GetSeries(int id) { return Apply(_seriesService.GetSeries, id); } private SeriesResource AddSeries(SeriesResource seriesResource) { //Todo: Alert the user if this series already exists //Todo: We need to create the folder if the user is adding a new series //(we can just create the folder and it won't blow up if it already exists) //We also need to remove any special characters from the filename before attempting to create it return Apply(_seriesService.AddSeries, seriesResource); } private SeriesResource UpdateSeries(SeriesResource seriesResource) { return Apply(_seriesService.UpdateSeries, seriesResource); } private void DeleteSeries(int id) { var deleteFiles = Convert.ToBoolean(Request.Headers["deleteFiles"].FirstOrDefault()); _seriesService.DeleteSeries(id, deleteFiles); } } }