You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.5 KiB
68 lines
2.5 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace NzbDrone.Core.SeriesStats
|
|
{
|
|
public interface ISeriesStatisticsService
|
|
{
|
|
List<SeriesStatistics> SeriesStatistics();
|
|
SeriesStatistics SeriesStatistics(int seriesId);
|
|
}
|
|
|
|
public class SeriesStatisticsService : ISeriesStatisticsService
|
|
{
|
|
private readonly ISeriesStatisticsRepository _seriesStatisticsRepository;
|
|
|
|
public SeriesStatisticsService(ISeriesStatisticsRepository seriesStatisticsRepository)
|
|
{
|
|
_seriesStatisticsRepository = seriesStatisticsRepository;
|
|
}
|
|
|
|
public List<SeriesStatistics> SeriesStatistics()
|
|
{
|
|
var seasonStatistics = _seriesStatisticsRepository.SeriesStatistics();
|
|
|
|
return seasonStatistics.GroupBy(s => s.SeriesId).Select(s => MapSeriesStatistics(s.ToList())).ToList();
|
|
}
|
|
|
|
public SeriesStatistics SeriesStatistics(int seriesId)
|
|
{
|
|
var stats = _seriesStatisticsRepository.SeriesStatistics(seriesId);
|
|
|
|
if (stats == null) return new SeriesStatistics();
|
|
|
|
return MapSeriesStatistics(new List<SeasonStatistics> { stats });
|
|
}
|
|
|
|
private SeriesStatistics MapSeriesStatistics(List<SeasonStatistics> seasonStatistics)
|
|
{
|
|
return new SeriesStatistics
|
|
{
|
|
SeasonStatistics = seasonStatistics,
|
|
SeriesId = seasonStatistics.First().SeriesId,
|
|
EpisodeFileCount = seasonStatistics.Sum(s => s.EpisodeFileCount),
|
|
EpisodeCount = seasonStatistics.Sum(s => s.EpisodeCount),
|
|
SizeOnDisk = seasonStatistics.Sum(s => s.SizeOnDisk),
|
|
NextAiringString = seasonStatistics.OrderBy(s =>
|
|
{
|
|
DateTime nextAiring;
|
|
|
|
if (!DateTime.TryParse(s.NextAiringString, out nextAiring)) return DateTime.MinValue;
|
|
|
|
return nextAiring;
|
|
}).First().NextAiringString,
|
|
|
|
PreviousAiringString = seasonStatistics.OrderBy(s =>
|
|
{
|
|
DateTime nextAiring;
|
|
|
|
if (!DateTime.TryParse(s.PreviousAiringString, out nextAiring)) return DateTime.MinValue;
|
|
|
|
return nextAiring;
|
|
}).Last().PreviousAiringString
|
|
};
|
|
}
|
|
}
|
|
}
|