mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-14 02:37:08 -07:00
Report size is now verified to ensure it is under the MaxSize for that quality type, with tests.
This commit is contained in:
parent
e4f01ae0d4
commit
4b2427ade7
7 changed files with 479 additions and 3 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue