From adcfade7f2a43ac6d8a1179041002300a4658e01 Mon Sep 17 00:00:00 2001 From: kaso17 Date: Wed, 18 Oct 2017 18:30:41 +0200 Subject: [PATCH] Torznab: add support for music-search --- .../Indexers/Abstract/GazelleTracker.cs | 12 ++++++++++ src/Jackett/Indexers/BaseIndexer.cs | 2 ++ src/Jackett/Models/DTO/TorznabRequest.cs | 19 +++++++++++++++ src/Jackett/Models/TorznabCapabilities.cs | 24 +++++++++++++++++++ src/Jackett/Models/TorznabQuery.cs | 24 +++++++++++++++++++ 5 files changed, 81 insertions(+) diff --git a/src/Jackett/Indexers/Abstract/GazelleTracker.cs b/src/Jackett/Indexers/Abstract/GazelleTracker.cs index 368073bbb..e2224a912 100644 --- a/src/Jackett/Indexers/Abstract/GazelleTracker.cs +++ b/src/Jackett/Indexers/Abstract/GazelleTracker.cs @@ -86,6 +86,18 @@ namespace Jackett.Indexers.Abstract queryCollection.Add("searchstr", searchString); } + if (query.Artist != null) + queryCollection.Add("artistname", query.Artist); + + if (query.Label != null) + queryCollection.Add("recordlabel", query.Label); + + if (query.Year != null) + queryCollection.Add("year", query.Year.ToString()); + + if (query.Album != null) + queryCollection.Add("groupname", query.Album); + foreach (var cat in MapTorznabCapsToTrackers(query)) { queryCollection.Add("filter_cat[" + cat + "]", "1"); diff --git a/src/Jackett/Indexers/BaseIndexer.cs b/src/Jackett/Indexers/BaseIndexer.cs index 8e2bf24c9..1b7506b2e 100644 --- a/src/Jackett/Indexers/BaseIndexer.cs +++ b/src/Jackett/Indexers/BaseIndexer.cs @@ -213,6 +213,8 @@ namespace Jackett.Indexers return true; if (caps.MovieSearchAvailable && query.IsMovieSearch) return true; + if (caps.MusicSearchAvailable && query.IsMusicSearch) + return true; if (caps.SupportsTVRageSearch && query.IsTVRageSearch) return true; if (caps.SupportsImdbSearch && query.IsImdbQuery) diff --git a/src/Jackett/Models/DTO/TorznabRequest.cs b/src/Jackett/Models/DTO/TorznabRequest.cs index fe272040b..dd8aa75a5 100644 --- a/src/Jackett/Models/DTO/TorznabRequest.cs +++ b/src/Jackett/Models/DTO/TorznabRequest.cs @@ -16,6 +16,12 @@ namespace Jackett.Models.DTO public string rid { get; set; } public string season { get; set; } public string ep { get; set; } + public string album { get; set; } + public string artist { get; set; } + public string label { get; set; } + public string track { get; set; } + public string year { get; set; } + public string genre { get; set; } public static TorznabQuery ToTorznabQuery(TorznabRequest request) { @@ -53,6 +59,19 @@ namespace Jackett.Models.DTO if (!request.season.IsNullOrEmptyOrWhitespace()) query.Season = int.Parse(request.season); + if (!request.album.IsNullOrEmptyOrWhitespace()) + query.Album = request.album; + if (!request.artist.IsNullOrEmptyOrWhitespace()) + query.Artist = request.artist; + if (!request.label.IsNullOrEmptyOrWhitespace()) + query.Label = request.label; + if (!request.track.IsNullOrEmptyOrWhitespace()) + query.Track = request.track; + if (!request.year.IsNullOrEmptyOrWhitespace()) + query.Year = int.Parse(request.year); + if (!request.genre.IsNullOrEmptyOrWhitespace()) + query.Genre = request.genre.Split(','); + query.ExpandCatsToSubCats(); return query; diff --git a/src/Jackett/Models/TorznabCapabilities.cs b/src/Jackett/Models/TorznabCapabilities.cs index be656bcb8..42240c95b 100644 --- a/src/Jackett/Models/TorznabCapabilities.cs +++ b/src/Jackett/Models/TorznabCapabilities.cs @@ -23,6 +23,16 @@ namespace Jackett.Models public bool SupportsImdbSearch { get; set; } + public bool MusicSearchAvailable + { + get + { + return (SupportedMusicSearchParamsList.Count > 0); + } + } + + public List SupportedMusicSearchParamsList; + public List Categories { get; private set; } public TorznabCapabilities() @@ -33,6 +43,7 @@ namespace Jackett.Models MovieSearchAvailable = false; SupportsTVRageSearch = false; SupportsImdbSearch = false; + SupportedMusicSearchParamsList = new List(); } public TorznabCapabilities(params TorznabCategory[] cats) @@ -41,6 +52,7 @@ namespace Jackett.Models TVSearchAvailable = true; SupportsTVRageSearch = false; SupportsImdbSearch = false; + SupportedMusicSearchParamsList = new List(); Categories = new List(); Categories.AddRange(cats); MovieSearchAvailable = Categories.Any(i => TorznabCatType.Movies.Contains(i)); @@ -68,6 +80,14 @@ namespace Jackett.Models } } + string SupportedMusicSearchParams + { + get + { + return string.Join(",", SupportedMusicSearchParamsList); + } + } + public bool SupportsCategories(int[] categories) { var subCategories = Categories.SelectMany(c => c.SubCategories); @@ -112,6 +132,10 @@ namespace Jackett.Models new XElement("movie-search", new XAttribute("available", MovieSearchAvailable ? "yes" : "no"), new XAttribute("supportedParams", SupportedMovieSearchParams) + ), + new XElement("music-search", + new XAttribute("available", MusicSearchAvailable ? "yes" : "no"), + new XAttribute("supportedParams", SupportedMovieSearchParams) ) ), new XElement("categories", diff --git a/src/Jackett/Models/TorznabQuery.cs b/src/Jackett/Models/TorznabQuery.cs index b4f09ee34..f5a273338 100644 --- a/src/Jackett/Models/TorznabQuery.cs +++ b/src/Jackett/Models/TorznabQuery.cs @@ -25,6 +25,13 @@ namespace Jackett.Models public string Episode { get; set; } public string SearchTerm { get; set; } + public string Album { get; set; } + public string Artist { get; set; } + public string Label { get; set; } + public string Track { get; set; } + public int? Year { get; set; } + public ICollection Genre { get; set; } + public bool IsTest { get; set; } public string ImdbIDShort { get { return (ImdbID != null ? ImdbID.TrimStart('t') : null); } } @@ -55,6 +62,14 @@ namespace Jackett.Models } } + public bool IsMusicSearch + { + get + { + return QueryType == "music"; + } + } + public bool IsTVRageSearch { get @@ -148,6 +163,15 @@ namespace Jackett.Models ret.Episode = Episode; ret.SearchTerm = SearchTerm; ret.IsTest = IsTest; + ret.Album = Album; + ret.Artist = Artist; + ret.Label = Label; + ret.Track = Track; + ret.Year = Year; + if (Genre != null) + { + Genre.Select(item => item.Clone()).ToList(); + } if (QueryStringParts != null && QueryStringParts.Length > 0) { ret.QueryStringParts = new string[QueryStringParts.Length];