From 57335c6d3a4f486001b8384b4aeef1f146c34e10 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 26 Jul 2020 11:51:21 -0700 Subject: [PATCH] Fixed: Parsing of article title leading to error loading Interactive Search Fixes #3851 --- src/NzbDrone.Api/Indexers/ReleaseResource.cs | 28 +++++++++---------- .../ParserTests/QualityParserFixture.cs | 3 ++ src/NzbDrone.Core/Parser/QualityParser.cs | 19 +++++++++---- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/NzbDrone.Api/Indexers/ReleaseResource.cs b/src/NzbDrone.Api/Indexers/ReleaseResource.cs index 85d3d7ada..17656f4f0 100644 --- a/src/NzbDrone.Api/Indexers/ReleaseResource.cs +++ b/src/NzbDrone.Api/Indexers/ReleaseResource.cs @@ -92,7 +92,7 @@ namespace NzbDrone.Api.Indexers return new ReleaseResource { Guid = releaseInfo.Guid, - Quality = parsedEpisodeInfo.Quality, + Quality = parsedEpisodeInfo?.Quality, //QualityWeight Age = releaseInfo.Age, AgeHours = releaseInfo.AgeHours, @@ -100,16 +100,16 @@ namespace NzbDrone.Api.Indexers Size = releaseInfo.Size, IndexerId = releaseInfo.IndexerId, Indexer = releaseInfo.Indexer, - ReleaseGroup = parsedEpisodeInfo.ReleaseGroup, - ReleaseHash = parsedEpisodeInfo.ReleaseHash, + ReleaseGroup = parsedEpisodeInfo?.ReleaseGroup, + ReleaseHash = parsedEpisodeInfo?.ReleaseHash, Title = releaseInfo.Title, - FullSeason = parsedEpisodeInfo.FullSeason, - SeasonNumber = parsedEpisodeInfo.SeasonNumber, - Language = parsedEpisodeInfo.Language, - AirDate = parsedEpisodeInfo.AirDate, - SeriesTitle = parsedEpisodeInfo.SeriesTitle, - EpisodeNumbers = parsedEpisodeInfo.EpisodeNumbers, - AbsoluteEpisodeNumbers = parsedEpisodeInfo.AbsoluteEpisodeNumbers, + FullSeason = parsedEpisodeInfo?.FullSeason ?? false, + SeasonNumber = parsedEpisodeInfo?.SeasonNumber ?? 0, + Language = parsedEpisodeInfo?.Language, + AirDate = parsedEpisodeInfo?.AirDate, + SeriesTitle = parsedEpisodeInfo?.SeriesTitle, + EpisodeNumbers = parsedEpisodeInfo?.EpisodeNumbers, + AbsoluteEpisodeNumbers = parsedEpisodeInfo?.AbsoluteEpisodeNumbers, Approved = model.Approved, TemporarilyRejected = model.TemporarilyRejected, Rejected = model.Rejected, @@ -129,10 +129,10 @@ namespace NzbDrone.Api.Indexers Leechers = (torrentInfo.Peers.HasValue && torrentInfo.Seeders.HasValue) ? (torrentInfo.Peers.Value - torrentInfo.Seeders.Value) : (int?)null, Protocol = releaseInfo.DownloadProtocol, - IsDaily = parsedEpisodeInfo.IsDaily, - IsAbsoluteNumbering = parsedEpisodeInfo.IsAbsoluteNumbering, - IsPossibleSpecialEpisode = parsedEpisodeInfo.IsPossibleSpecialEpisode, - Special = parsedEpisodeInfo.Special, + IsDaily = parsedEpisodeInfo?.IsDaily ?? false, + IsAbsoluteNumbering = parsedEpisodeInfo?.IsAbsoluteNumbering ?? false, + IsPossibleSpecialEpisode = parsedEpisodeInfo?.IsPossibleSpecialEpisode ?? false, + Special = parsedEpisodeInfo?.Special ?? false, }; } diff --git a/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs index da3c6aa37..1453dae83 100644 --- a/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/QualityParserFixture.cs @@ -3,6 +3,7 @@ using NUnit.Framework; using NzbDrone.Core.Parser; using NzbDrone.Core.Qualities; using NzbDrone.Core.Test.Framework; +using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.ParserTests { @@ -135,6 +136,7 @@ namespace NzbDrone.Core.Test.ParserTests [TestCase("Survivorman.The.Lost.Pilots.Summer.HR.WS.PDTV.x264-DHD", false)] [TestCase("Victoria S01E07 - Motor zmen (CZ)[TvRip][HEVC][720p]", false)] [TestCase("flashpoint.S05E06.720p.HDTV.x264-FHD", false)] + [TestCase("Series.Title.1x01.ITA.720p.x264-RlsGrp [01/54] - \"series.title.1x01.ita.720p.x264-rlsgrp.nfo\"", false)] public void should_parse_hdtv720p_quality(string title, bool proper) { ParseAndVerifyQuality(title, Quality.HDTV720p, proper); @@ -277,6 +279,7 @@ namespace NzbDrone.Core.Test.ParserTests [TestCase("Battlestar.Galactica.S01E01.33.720p.HDDVD.x264-SiNNERS.mkv", false)] [TestCase("The.Expanse.S01E07.RERIP.720p.BluRay.x264-DEMAND", true)] [TestCase("Sans.Laisser.De.Traces.FRENCH.720p.BluRay.x264-FHD", false)] + [TestCase("Orphan.Black.1x01.Selezione.Naturale.ITA.720p.BDMux.x264-NovaRip", false)] public void should_parse_bluray720p_quality(string title, bool proper) { ParseAndVerifyQuality(title, Quality.Bluray720p, proper); diff --git a/src/NzbDrone.Core/Parser/QualityParser.cs b/src/NzbDrone.Core/Parser/QualityParser.cs index d6f5129d6..87fbe90f0 100644 --- a/src/NzbDrone.Core/Parser/QualityParser.cs +++ b/src/NzbDrone.Core/Parser/QualityParser.cs @@ -16,7 +16,7 @@ namespace NzbDrone.Core.Parser private static readonly Logger Logger = NzbDroneLogger.GetLogger(typeof(QualityParser)); private static readonly Regex SourceRegex = new Regex(@"\b(?: - (?BluRay|Blu-Ray|HD-?DVD|BD(?!$))| + (?BluRay|Blu-Ray|HD-?DVD|BDMux|BD(?!$))| (?WEB[-_. ]DL|WEBDL|AmazonHD|iTunesHD|MaxdomeHD|NetflixU?HD|WebHD|[. ]WEB[. ](?:[xh]26[45]|DDP?5[. ]1)|[. ](?-i:WEB)$|\d+0p(?:[-. ]AMZN)?[-. ]WEB[-. ]|WEB-DLMux|\b\s\/\sWEB\s\/\s\b|AMZN[. ]WEB[. ])| (?WebRip|Web-Rip|WEBMux)| (?HDTV)| @@ -341,12 +341,19 @@ namespace NzbDrone.Core.Parser } else { - var quality = MediaFileExtensions.GetQualityForExtension(Path.GetExtension(name)); - - if (quality != Quality.Unknown) + try { - result.SourceDetectionSource = QualityDetectionSource.Extension; - source = quality.Source; + var quality = MediaFileExtensions.GetQualityForExtension(Path.GetExtension(name)); + + if (quality != Quality.Unknown) + { + result.SourceDetectionSource = QualityDetectionSource.Extension; + source = quality.Source; + } + } + catch (ArgumentException ex) + { + Logger.Debug(ex, "Unable to parse quality from extension"); } }