2015-05-15 14:35:12 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
2013-04-20 23:36:23 +00:00
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.SeriesStats
|
|
|
|
|
{
|
|
|
|
|
public interface ISeriesStatisticsService
|
|
|
|
|
{
|
|
|
|
|
List<SeriesStatistics> SeriesStatistics();
|
2013-07-18 00:07:48 +00:00
|
|
|
|
SeriesStatistics SeriesStatistics(int seriesId);
|
2013-04-20 23:36:23 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class SeriesStatisticsService : ISeriesStatisticsService
|
|
|
|
|
{
|
2014-09-01 06:25:30 +00:00
|
|
|
|
private readonly ISeriesStatisticsRepository _seriesStatisticsRepository;
|
2013-04-20 23:36:23 +00:00
|
|
|
|
|
2014-09-01 06:25:30 +00:00
|
|
|
|
public SeriesStatisticsService(ISeriesStatisticsRepository seriesStatisticsRepository)
|
2013-04-20 23:36:23 +00:00
|
|
|
|
{
|
|
|
|
|
_seriesStatisticsRepository = seriesStatisticsRepository;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<SeriesStatistics> SeriesStatistics()
|
|
|
|
|
{
|
2015-05-15 14:35:12 +00:00
|
|
|
|
var seasonStatistics = _seriesStatisticsRepository.SeriesStatistics();
|
|
|
|
|
|
|
|
|
|
return seasonStatistics.GroupBy(s => s.SeriesId).Select(s => MapSeriesStatistics(s.ToList())).ToList();
|
2013-04-20 23:36:23 +00:00
|
|
|
|
}
|
2013-07-18 00:07:48 +00:00
|
|
|
|
|
|
|
|
|
public SeriesStatistics SeriesStatistics(int seriesId)
|
|
|
|
|
{
|
|
|
|
|
var stats = _seriesStatisticsRepository.SeriesStatistics(seriesId);
|
|
|
|
|
|
2015-05-27 18:28:57 +00:00
|
|
|
|
if (stats == null || stats.Count == 0) return new SeriesStatistics();
|
2013-07-18 00:07:48 +00:00
|
|
|
|
|
2015-05-27 18:28:57 +00:00
|
|
|
|
return MapSeriesStatistics(stats);
|
2015-05-15 14:35:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private SeriesStatistics MapSeriesStatistics(List<SeasonStatistics> seasonStatistics)
|
|
|
|
|
{
|
2015-06-09 07:32:17 +00:00
|
|
|
|
var seriesStatistics = new SeriesStatistics
|
|
|
|
|
{
|
|
|
|
|
SeasonStatistics = seasonStatistics,
|
|
|
|
|
SeriesId = seasonStatistics.First().SeriesId,
|
|
|
|
|
EpisodeFileCount = seasonStatistics.Sum(s => s.EpisodeFileCount),
|
|
|
|
|
EpisodeCount = seasonStatistics.Sum(s => s.EpisodeCount),
|
|
|
|
|
TotalEpisodeCount = seasonStatistics.Sum(s => s.TotalEpisodeCount),
|
|
|
|
|
SizeOnDisk = seasonStatistics.Sum(s => s.SizeOnDisk)
|
|
|
|
|
};
|
2015-05-15 14:35:12 +00:00
|
|
|
|
|
2015-06-09 07:32:17 +00:00
|
|
|
|
var nextAiring = seasonStatistics.Where(s => s.NextAiring != null)
|
|
|
|
|
.OrderBy(s => s.NextAiring)
|
|
|
|
|
.FirstOrDefault();
|
2015-05-15 14:35:12 +00:00
|
|
|
|
|
2015-06-09 07:32:17 +00:00
|
|
|
|
var previousAiring = seasonStatistics.Where(s => s.PreviousAiring != null)
|
|
|
|
|
.OrderBy(s => s.PreviousAiring)
|
|
|
|
|
.LastOrDefault();
|
2015-05-15 14:35:12 +00:00
|
|
|
|
|
2015-06-09 07:32:17 +00:00
|
|
|
|
seriesStatistics.NextAiringString = nextAiring != null ? nextAiring.NextAiringString : null;
|
|
|
|
|
seriesStatistics.PreviousAiringString = previousAiring != null ? previousAiring.PreviousAiringString : null;
|
2015-05-15 14:35:12 +00:00
|
|
|
|
|
2015-06-09 07:32:17 +00:00
|
|
|
|
return seriesStatistics;
|
2013-07-18 00:07:48 +00:00
|
|
|
|
}
|
2013-04-20 23:36:23 +00:00
|
|
|
|
}
|
|
|
|
|
}
|