From f0b68afccd6a4c780b553e62a8723157fcc1a545 Mon Sep 17 00:00:00 2001 From: Qstick Date: Fri, 28 Jul 2017 22:03:28 -0400 Subject: [PATCH] Adds Newznab Album Search Support Adds Newznab Album Search Support --- src/NzbDrone.Core/Indexers/Newznab/Newznab.cs | 3 ++ .../Indexers/Newznab/NewznabCapabilities.cs | 2 ++ .../Newznab/NewznabCapabilitiesProvider.cs | 12 +++++++ .../Newznab/NewznabRequestGenerator.cs | 36 ++++++++++++++++++- 4 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Newznab/Newznab.cs b/src/NzbDrone.Core/Indexers/Newznab/Newznab.cs index 361de1af2..3fafa3238 100644 --- a/src/NzbDrone.Core/Indexers/Newznab/Newznab.cs +++ b/src/NzbDrone.Core/Indexers/Newznab/Newznab.cs @@ -106,6 +106,9 @@ namespace NzbDrone.Core.Indexers.Newznab return null; } + if (capabilities.SupportedAudioSearchParameters != null && + new[] { "artist", "album" }.All(v => capabilities.SupportedAudioSearchParameters.Contains(v))) + if (capabilities.SupportedTvSearchParameters != null && new[] { "q", "tvdbid", "rid" }.Any(v => capabilities.SupportedTvSearchParameters.Contains(v)) && new[] { "season", "ep" }.All(v => capabilities.SupportedTvSearchParameters.Contains(v))) diff --git a/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilities.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilities.cs index 11e73da34..035915704 100644 --- a/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilities.cs +++ b/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilities.cs @@ -8,6 +8,7 @@ namespace NzbDrone.Core.Indexers.Newznab public int MaxPageSize { get; set; } public string[] SupportedSearchParameters { get; set; } public string[] SupportedTvSearchParameters { get; set; } + public string[] SupportedAudioSearchParameters { get; set; } public bool SupportsAggregateIdSearch { get; set; } public List Categories { get; set; } @@ -17,6 +18,7 @@ namespace NzbDrone.Core.Indexers.Newznab MaxPageSize = 100; SupportedSearchParameters = new[] { "q" }; SupportedTvSearchParameters = new[] { "q", "rid", "season", "ep" }; // This should remain 'rid' for older newznab installs. + SupportedAudioSearchParameters = new[] { "q", "artist", "album" }; SupportsAggregateIdSearch = false; Categories = new List(); } diff --git a/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilitiesProvider.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilitiesProvider.cs index dece43c4a..22f3f0dad 100644 --- a/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilitiesProvider.cs +++ b/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilitiesProvider.cs @@ -115,6 +115,18 @@ namespace NzbDrone.Core.Indexers.Newznab capabilities.SupportedTvSearchParameters = xmlTvSearch.Attribute("supportedParams").Value.Split(','); capabilities.SupportsAggregateIdSearch = true; } + + var xmlAudioSearch = xmlSearching.Element("audio-search"); + if (xmlAudioSearch == null || xmlAudioSearch.Attribute("available").Value != "yes") + { + capabilities.SupportedAudioSearchParameters = null; + } + else if (xmlAudioSearch.Attribute("supportedParams") != null) + { + capabilities.SupportedAudioSearchParameters = xmlAudioSearch.Attribute("supportedParams").Value.Split(','); + + //capabilities.SupportsAggregateIdSearch = true; + } } var xmlCategories = xmlRoot.Element("categories"); diff --git a/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs index 69a393d46..3e9aabdc8 100644 --- a/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs +++ b/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs @@ -45,6 +45,19 @@ namespace NzbDrone.Core.Indexers.Newznab } } + private bool SupportsAudioSearch + { + get + { + var capabilities = _capabilitiesProvider.GetCapabilities(Settings); + + return capabilities.SupportedAudioSearchParameters != null && + capabilities.SupportedAudioSearchParameters.Contains("q") && + capabilities.SupportedAudioSearchParameters.Contains("artist") && + capabilities.SupportedAudioSearchParameters.Contains("album"); + } + } + private bool SupportsTvdbSearch { get @@ -182,7 +195,14 @@ namespace NzbDrone.Core.Indexers.Newznab public IndexerPageableRequestChain GetSearchRequests(AlbumSearchCriteria searchCriteria) { - throw new System.NotImplementedException(); + var pageableRequests = new IndexerPageableRequestChain(); + + AddAudioPageableRequests(pageableRequests, MaxPages, Settings.Categories, searchCriteria, + string.Format("&artist={0}&album={1}", + searchCriteria.Artist.Name, + searchCriteria.Album.Title)); + + return pageableRequests; } public IndexerPageableRequestChain GetSearchRequests(ArtistSearchCriteria searchCriteria) @@ -250,6 +270,20 @@ namespace NzbDrone.Core.Indexers.Newznab } } + private void AddAudioPageableRequests(IndexerPageableRequestChain chain, int maxPages, IEnumerable categories, SearchCriteriaBase searchCriteria, string parameters) + { + + if (SupportsAudioSearch) + { + chain.AddTier(); + + chain.Add(GetPagedRequests(MaxPages, Settings.Categories, "music", + string.Format("&q={0}", + parameters))); + + } + } + private IEnumerable GetPagedRequests(int maxPages, IEnumerable categories, string searchType, string parameters) { if (categories.Empty())