Report size is now verified to ensure it is under the MaxSize for that quality type, with tests.

This commit is contained in:
Mark McDowall 2011-09-13 21:37:22 -07:00
commit 4b2427ade7
7 changed files with 479 additions and 3 deletions

View file

@ -14,15 +14,18 @@ namespace NzbDrone.Core.Providers
private readonly SeriesProvider _seriesProvider;
private readonly EpisodeProvider _episodeProvider;
private readonly HistoryProvider _historyProvider;
private readonly QualityTypeProvider _qualityTypeProvider;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
[Inject]
public InventoryProvider(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, HistoryProvider historyProvider)
public InventoryProvider(SeriesProvider seriesProvider, EpisodeProvider episodeProvider,
HistoryProvider historyProvider, QualityTypeProvider qualityTypeProvider)
{
_seriesProvider = seriesProvider;
_episodeProvider = episodeProvider;
_historyProvider = historyProvider;
_qualityTypeProvider = qualityTypeProvider;
}
public InventoryProvider()
@ -79,6 +82,9 @@ namespace NzbDrone.Core.Providers
var cutoff = parsedReport.Series.QualityProfile.Cutoff;
if (!IsAcceptableSize(parsedReport))
return false;
foreach (var episode in _episodeProvider.GetEpisodesByParseResult(parsedReport, true))
{
//Checking File
@ -132,5 +138,39 @@ namespace NzbDrone.Core.Providers
Logger.Debug("New item has better quality than existing item");
return true;
}
public virtual bool IsAcceptableSize(EpisodeParseResult parseResult)
{
var qualityType = _qualityTypeProvider.Get((int) parseResult.Quality.QualityType);
//Need to determine if this is a 30 or 60 minute episode
//Is it a multi-episode release?
//Is it the first or last series of a season?
var maxSize = qualityType.MaxSize;
var series = parseResult.Series;
//If this is an hour long episode (between 50 and 65 minutes) then multiply by 2
if (series.Runtime >= 50 && series.Runtime <= 65)
maxSize = maxSize * 2;
//Multiply maxSize by the number of episodes parsed
maxSize = maxSize * parseResult.EpisodeNumbers.Count;
//Check if there was only one episode parsed
//and it is the first or last episode of the season
if (parseResult.EpisodeNumbers.Count == 1 &&
_episodeProvider.IsFirstOrLastEpisodeOfSeason(series.SeriesId,
parseResult.SeasonNumber, parseResult.EpisodeNumbers[0]))
{
maxSize = maxSize * 2;
}
//If the parsed size is greater than maxSize we don't want it
if (parseResult.Size > maxSize)
return false;
return true;
}
}
}