diff --git a/src/Jackett/Indexers/BaseIndexer.cs b/src/Jackett/Indexers/BaseIndexer.cs index 348109fc1..d23220a77 100644 --- a/src/Jackett/Indexers/BaseIndexer.cs +++ b/src/Jackett/Indexers/BaseIndexer.cs @@ -532,7 +532,11 @@ namespace Jackett.Indexers { categoryMapping.Add(new CategoryMapping(trackerCategory, trackerCategoryDesc, newznabCategory.ID)); if (!TorznabCaps.Categories.Contains(newznabCategory)) + { TorznabCaps.Categories.Add(newznabCategory); + if (TorznabCatType.Movies.Contains(newznabCategory)) + TorznabCaps.MovieSearchAvailable = true; + } } protected void AddCategoryMapping(int trackerCategory, TorznabCategory newznabCategory, string trackerCategoryDesc = null) diff --git a/src/Jackett/Models/TorznabCapabilities.cs b/src/Jackett/Models/TorznabCapabilities.cs index f85f2275d..003c21cfd 100644 --- a/src/Jackett/Models/TorznabCapabilities.cs +++ b/src/Jackett/Models/TorznabCapabilities.cs @@ -15,8 +15,12 @@ namespace Jackett.Models public bool TVSearchAvailable { get; set; } + public bool MovieSearchAvailable { get; set; } + public bool SupportsTVRageSearch { get; set; } + public bool SupportsImdbSearch { get; set; } + public List Categories { get; private set; } public TorznabCapabilities() @@ -24,7 +28,9 @@ namespace Jackett.Models Categories = new List(); SearchAvailable = true; TVSearchAvailable = true; + MovieSearchAvailable = false; SupportsTVRageSearch = false; + SupportsImdbSearch = false; } public TorznabCapabilities(params TorznabCategory[] cats) @@ -32,8 +38,10 @@ namespace Jackett.Models SearchAvailable = true; TVSearchAvailable = true; SupportsTVRageSearch = false; + SupportsImdbSearch = false; Categories = new List(); Categories.AddRange(cats); + MovieSearchAvailable = Categories.Any(i => TorznabCatType.Movies.Contains(i)); } string SupportedTVSearchParams @@ -47,6 +55,17 @@ namespace Jackett.Models } } + string SupportedMovieSearchParams + { + get + { + var parameters = new List() { "q" }; + if (SupportsImdbSearch) + parameters.Add("imdbid"); + return string.Join(",", parameters); + } + } + public JArray CapsToJson() { var jArray = new JArray(); @@ -70,6 +89,10 @@ namespace Jackett.Models new XElement("tv-search", new XAttribute("available", TVSearchAvailable ? "yes" : "no"), new XAttribute("supportedParams", SupportedTVSearchParams) + ), + new XElement("movie-search", + new XAttribute("available", MovieSearchAvailable ? "yes" : "no"), + new XAttribute("supportedParams", SupportedMovieSearchParams) ) ), new XElement("categories", diff --git a/src/Jackett/Models/TorznabCategory.cs b/src/Jackett/Models/TorznabCategory.cs index d3be7e014..61fd74e24 100644 --- a/src/Jackett/Models/TorznabCategory.cs +++ b/src/Jackett/Models/TorznabCategory.cs @@ -26,6 +26,17 @@ namespace Jackett.Models SubCategories = new List(); } + public bool Contains(TorznabCategory cat) + { + if (this == cat) + return true; + + if (SubCategories.Contains(cat)) + return true; + + return false; + } + public JToken ToJson() { var t = new JObject(); diff --git a/src/Jackett/Models/TorznabQuery.cs b/src/Jackett/Models/TorznabQuery.cs index 0455ff5ae..92cead460 100644 --- a/src/Jackett/Models/TorznabQuery.cs +++ b/src/Jackett/Models/TorznabQuery.cs @@ -131,10 +131,13 @@ namespace Jackett.Models if (query["cat"] != null) { - q.Categories = query["cat"].Split(',').Select(s => int.Parse(s)).ToArray(); + q.Categories = query["cat"].Split(',').Where(s => !string.IsNullOrWhiteSpace(s)).Select(s => int.Parse(s)).ToArray(); }else { - q.Categories = new int[0]; + if (q.QueryType == "movie" && string.IsNullOrWhiteSpace(query["imdbid"])) + q.Categories = new int[] { TorznabCatType.Movies.ID }; + else + q.Categories = new int[0]; } if (query["extended"] != null) @@ -151,6 +154,8 @@ namespace Jackett.Models q.Offset = ParseUtil.CoerceInt(query["offset"]); } + q.ImdbID = query["imdbid"]; + int rageId; if (int.TryParse(query["rid"], out rageId)) {