From 7e8d8500f28ef8f44560da4ce827745e12f9a346 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 9 May 2024 04:43:51 +0300 Subject: [PATCH] Fixed: Next/previous/last air dates with Postgres DB Closes #6790 --- .../SeriesStats/SeasonStatistics.cs | 7 +- .../SeriesStats/SeriesStatistics.cs | 75 +------------------ .../SeriesStats/SeriesStatisticsService.cs | 24 +++--- 3 files changed, 19 insertions(+), 87 deletions(-) diff --git a/src/NzbDrone.Core/SeriesStats/SeasonStatistics.cs b/src/NzbDrone.Core/SeriesStats/SeasonStatistics.cs index 5fe1507c269..793a56f85ce 100644 --- a/src/NzbDrone.Core/SeriesStats/SeasonStatistics.cs +++ b/src/NzbDrone.Core/SeriesStats/SeasonStatistics.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using NzbDrone.Common.Extensions; using NzbDrone.Core.Datastore; @@ -28,7 +29,7 @@ public class SeasonStatistics : ResultSet try { - if (!DateTime.TryParse(NextAiringString, out nextAiring)) + if (!DateTime.TryParse(NextAiringString, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeUniversal, out nextAiring)) { return null; } @@ -51,7 +52,7 @@ public class SeasonStatistics : ResultSet try { - if (!DateTime.TryParse(PreviousAiringString, out previousAiring)) + if (!DateTime.TryParse(PreviousAiringString, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeUniversal, out previousAiring)) { return null; } @@ -74,7 +75,7 @@ public class SeasonStatistics : ResultSet try { - if (!DateTime.TryParse(LastAiredString, out lastAired)) + if (!DateTime.TryParse(LastAiredString, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeUniversal, out lastAired)) { return null; } diff --git a/src/NzbDrone.Core/SeriesStats/SeriesStatistics.cs b/src/NzbDrone.Core/SeriesStats/SeriesStatistics.cs index cb054da7cae..030b04ee3b4 100644 --- a/src/NzbDrone.Core/SeriesStats/SeriesStatistics.cs +++ b/src/NzbDrone.Core/SeriesStats/SeriesStatistics.cs @@ -7,83 +7,14 @@ namespace NzbDrone.Core.SeriesStats public class SeriesStatistics : ResultSet { public int SeriesId { get; set; } - public string NextAiringString { get; set; } - public string PreviousAiringString { get; set; } - public string LastAiredString { get; set; } + public DateTime? NextAiring { get; set; } + public DateTime? PreviousAiring { get; set; } + public DateTime? LastAired { get; set; } public int EpisodeFileCount { get; set; } public int EpisodeCount { get; set; } public int TotalEpisodeCount { get; set; } public long SizeOnDisk { get; set; } public List ReleaseGroups { get; set; } public List SeasonStatistics { get; set; } - - public DateTime? NextAiring - { - get - { - DateTime nextAiring; - - try - { - if (!DateTime.TryParse(NextAiringString, out nextAiring)) - { - return null; - } - } - catch (ArgumentOutOfRangeException) - { - // GHI 3518: Can throw on mono (6.x?) despite being a Try* - return null; - } - - return nextAiring; - } - } - - public DateTime? PreviousAiring - { - get - { - DateTime previousAiring; - - try - { - if (!DateTime.TryParse(PreviousAiringString, out previousAiring)) - { - return null; - } - } - catch (ArgumentOutOfRangeException) - { - // GHI 3518: Can throw on mono (6.x?) despite being a Try* - return null; - } - - return previousAiring; - } - } - - public DateTime? LastAired - { - get - { - DateTime lastAired; - - try - { - if (!DateTime.TryParse(LastAiredString, out lastAired)) - { - return null; - } - } - catch (ArgumentOutOfRangeException) - { - // GHI 3518: Can throw on mono (6.x?) despite being a Try* - return null; - } - - return lastAired; - } - } } } diff --git a/src/NzbDrone.Core/SeriesStats/SeriesStatisticsService.cs b/src/NzbDrone.Core/SeriesStats/SeriesStatisticsService.cs index 5baef28f1f0..e9c05da9758 100644 --- a/src/NzbDrone.Core/SeriesStats/SeriesStatisticsService.cs +++ b/src/NzbDrone.Core/SeriesStats/SeriesStatisticsService.cs @@ -40,23 +40,23 @@ public SeriesStatistics SeriesStatistics(int seriesId) private SeriesStatistics MapSeriesStatistics(List seasonStatistics) { 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), - ReleaseGroups = seasonStatistics.SelectMany(s => s.ReleaseGroups).Distinct().ToList() - }; + { + 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), + ReleaseGroups = seasonStatistics.SelectMany(s => s.ReleaseGroups).Distinct().ToList() + }; var nextAiring = seasonStatistics.Where(s => s.NextAiring != null).MinBy(s => s.NextAiring); var previousAiring = seasonStatistics.Where(s => s.PreviousAiring != null).MaxBy(s => s.PreviousAiring); var lastAired = seasonStatistics.Where(s => s.SeasonNumber > 0 && s.LastAired != null).MaxBy(s => s.LastAired); - seriesStatistics.NextAiringString = nextAiring?.NextAiringString; - seriesStatistics.PreviousAiringString = previousAiring?.PreviousAiringString; - seriesStatistics.LastAiredString = lastAired?.LastAiredString; + seriesStatistics.NextAiring = nextAiring?.NextAiring; + seriesStatistics.PreviousAiring = previousAiring?.PreviousAiring; + seriesStatistics.LastAired = lastAired?.LastAired; return seriesStatistics; }