From 605b2a3cd9583082825334c5e985397284e11ba7 Mon Sep 17 00:00:00 2001 From: bakerboy448 <55419169+bakerboy448@users.noreply.github.com> Date: Thu, 28 Jul 2022 22:55:41 -0500 Subject: [PATCH] core: rawsearch support. resolves #8246 closes #11889 (#13409) --- src/Jackett.Common/Definitions/1337x.yml | 6 +---- src/Jackett.Common/Definitions/eztv.yml | 1 + src/Jackett.Common/Definitions/nyaasi.yml | 1 + src/Jackett.Common/Definitions/rudub.yml | 1 + src/Jackett.Common/Definitions/yggcookie.yml | 1 + src/Jackett.Common/Definitions/yggtorrent.yml | 1 + src/Jackett.Common/Indexers/AnimeBytes.cs | 3 ++- .../Indexers/CardigannIndexer.cs | 1 + src/Jackett.Common/Indexers/RuTracker.cs | 3 ++- .../Models/IndexerDefinition.cs | 1 + .../Models/TorznabCapabilities.cs | 22 ++++++++++++++----- 11 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/Jackett.Common/Definitions/1337x.yml b/src/Jackett.Common/Definitions/1337x.yml index a42f4ccd9..124e7fbbb 100644 --- a/src/Jackett.Common/Definitions/1337x.yml +++ b/src/Jackett.Common/Definitions/1337x.yml @@ -126,6 +126,7 @@ caps: movie-search: [q] music-search: [q, album, artist] book-search: [q] + allowrawsearch: true settings: - name: flaresolverr @@ -180,9 +181,6 @@ search: - path: "{{ if or .Query.Album .Query.Artist .Keywords }}sort-search{{ else }}cat/Movies{{ end }}{{ if or .Query.Album .Query.Artist }}/{{ or .Query.Album .Query.Artist }}{{ else }}/{{ .Keywords }}{{ end }}{{ if or .Query.Album .Query.Artist .Keywords }}/{{ else }}{{ end }}{{ .Config.sort }}/{{ .Config.type }}/1/" - path: "{{ if or .Query.Album .Query.Artist .Keywords }}sort-search{{ else }}cat/TV{{ end }}{{ if or .Query.Album .Query.Artist }}/{{ or .Query.Album .Query.Artist }}{{ else }}/{{ .Keywords }}{{ end }}{{ if or .Query.Album .Query.Artist .Keywords }}/{{ else }}{{ end }}{{ .Config.sort }}/{{ .Config.type }}/{{ if or .Query.Album .Query.Artist .Keywords }}2{{ else }}1{{ end }}/" - path: "{{ if or .Query.Album .Query.Artist .Keywords }}sort-search{{ else }}cat/Music{{ end }}{{ if or .Query.Album .Query.Artist }}/{{ or .Query.Album .Query.Artist }}{{ else }}/{{ .Keywords }}{{ end }}{{ if or .Query.Album .Query.Artist .Keywords }}/{{ else }}{{ end }}{{ .Config.sort }}/{{ .Config.type }}/{{ if or .Query.Album .Query.Artist .Keywords }}3{{ else }}1{{ end }}/" - keywordsfilters: - - name: replace # use this as a workaround till #893 is implemented - args: ["Greys Anatomy", "Grey's Anatomy"] rows: selector: tr:has(a[href^="/torrent/"]) @@ -210,8 +208,6 @@ search: args: ["-", " "] - name: re_replace args: ["~([\\w]+(?:[\\[\\]\\(\\)\\w]+)?)$", "-$1"] - - name: replace - args: ["Grey's Anatomy", "Greys Anatomy"] - name: replace args: ["\u000f", ""] # get rid of unwanted character #6582 # cleanup for Sonarr diff --git a/src/Jackett.Common/Definitions/eztv.yml b/src/Jackett.Common/Definitions/eztv.yml index ead487bba..f40870fbf 100644 --- a/src/Jackett.Common/Definitions/eztv.yml +++ b/src/Jackett.Common/Definitions/eztv.yml @@ -46,6 +46,7 @@ caps: modes: search: [q] tv-search: [q, season, ep] + allowrawsearch: true settings: [] diff --git a/src/Jackett.Common/Definitions/nyaasi.yml b/src/Jackett.Common/Definitions/nyaasi.yml index c52745da1..58e3e34d9 100644 --- a/src/Jackett.Common/Definitions/nyaasi.yml +++ b/src/Jackett.Common/Definitions/nyaasi.yml @@ -116,6 +116,7 @@ caps: tv-search: [q] movie-search: [q] book-search: [q] + allowrawsearch: true search: paths: diff --git a/src/Jackett.Common/Definitions/rudub.yml b/src/Jackett.Common/Definitions/rudub.yml index 2f2ccead0..b768e10e8 100644 --- a/src/Jackett.Common/Definitions/rudub.yml +++ b/src/Jackett.Common/Definitions/rudub.yml @@ -19,6 +19,7 @@ caps: modes: search: [q] tv-search: [q, season, ep] + allowrawsearch: true settings: - name: username diff --git a/src/Jackett.Common/Definitions/yggcookie.yml b/src/Jackett.Common/Definitions/yggcookie.yml index 6cdc9b6eb..5aee0b7ed 100644 --- a/src/Jackett.Common/Definitions/yggcookie.yml +++ b/src/Jackett.Common/Definitions/yggcookie.yml @@ -106,6 +106,7 @@ caps: movie-search: [q] music-search: [q] book-search: [q] + allowrawsearch: true settings: - name: cookie diff --git a/src/Jackett.Common/Definitions/yggtorrent.yml b/src/Jackett.Common/Definitions/yggtorrent.yml index b952d1ca1..25a4f0e06 100644 --- a/src/Jackett.Common/Definitions/yggtorrent.yml +++ b/src/Jackett.Common/Definitions/yggtorrent.yml @@ -106,6 +106,7 @@ caps: movie-search: [q] music-search: [q] book-search: [q] + allowrawsearch: true settings: - name: username diff --git a/src/Jackett.Common/Indexers/AnimeBytes.cs b/src/Jackett.Common/Indexers/AnimeBytes.cs index 16956956c..cd1ee078f 100644 --- a/src/Jackett.Common/Indexers/AnimeBytes.cs +++ b/src/Jackett.Common/Indexers/AnimeBytes.cs @@ -57,7 +57,8 @@ namespace Jackett.Common.Indexers BookSearchParams = new List { BookSearchParam.Q - } + }, + SupportsRawSearch = true }, logger: l, p: ps, diff --git a/src/Jackett.Common/Indexers/CardigannIndexer.cs b/src/Jackett.Common/Indexers/CardigannIndexer.cs index 35a316768..aeca5a799 100644 --- a/src/Jackett.Common/Indexers/CardigannIndexer.cs +++ b/src/Jackett.Common/Indexers/CardigannIndexer.cs @@ -122,6 +122,7 @@ namespace Jackett.Common.Indexers Type = Definition.Type; TorznabCaps = new TorznabCapabilities(); TorznabCaps.ParseCardigannSearchModes(Definition.Caps.Modes); + TorznabCaps.SupportsRawSearch = Definition.Caps.Allowrawsearch; // init config Data configData = new ConfigurationData(); diff --git a/src/Jackett.Common/Indexers/RuTracker.cs b/src/Jackett.Common/Indexers/RuTracker.cs index 7d0a1efb8..441c6f91d 100644 --- a/src/Jackett.Common/Indexers/RuTracker.cs +++ b/src/Jackett.Common/Indexers/RuTracker.cs @@ -62,7 +62,8 @@ namespace Jackett.Common.Indexers BookSearchParams = new List { BookSearchParam.Q - } + }, + SupportsRawSearch = true }, configService: configService, client: wc, diff --git a/src/Jackett.Common/Models/IndexerDefinition.cs b/src/Jackett.Common/Models/IndexerDefinition.cs index 19f47e3b8..6d56ac541 100644 --- a/src/Jackett.Common/Models/IndexerDefinition.cs +++ b/src/Jackett.Common/Models/IndexerDefinition.cs @@ -72,6 +72,7 @@ namespace Jackett.Common.Models public Dictionary Categories { get; set; } public List Categorymappings { get; set; } public Dictionary> Modes { get; set; } + public bool Allowrawsearch { get; internal set; } } public class captchaBlock diff --git a/src/Jackett.Common/Models/TorznabCapabilities.cs b/src/Jackett.Common/Models/TorznabCapabilities.cs index 229adbe33..9fbaa3eb2 100644 --- a/src/Jackett.Common/Models/TorznabCapabilities.cs +++ b/src/Jackett.Common/Models/TorznabCapabilities.cs @@ -60,6 +60,8 @@ namespace Jackett.Common.Models public bool SearchAvailable { get; set; } + public bool SupportsRawSearch { get; set; } + public List TvSearchParams; public bool TvSearchAvailable => (TvSearchParams.Count > 0); public bool TvSearchSeasonAvailable => (TvSearchParams.Contains(TvSearchParam.Season)); @@ -106,6 +108,7 @@ namespace Jackett.Common.Models public TorznabCapabilities() { + SupportsRawSearch = false; SearchAvailable = true; TvSearchParams = new List(); MovieSearchParams = new List(); @@ -297,28 +300,34 @@ namespace Jackett.Common.Models new XElement("searching", new XElement("search", new XAttribute("available", SearchAvailable ? "yes" : "no"), - new XAttribute("supportedParams", "q") + new XAttribute("supportedParams", "q"), + SupportsRawSearch ? new XAttribute("searchEngine", "raw") : null ), new XElement("tv-search", new XAttribute("available", TvSearchAvailable ? "yes" : "no"), - new XAttribute("supportedParams", SupportedTvSearchParams()) + new XAttribute("supportedParams", SupportedTvSearchParams()), + SupportsRawSearch ? new XAttribute("searchEngine", "raw") : null ), new XElement("movie-search", new XAttribute("available", MovieSearchAvailable ? "yes" : "no"), - new XAttribute("supportedParams", SupportedMovieSearchParams()) + new XAttribute("supportedParams", SupportedMovieSearchParams()), + SupportsRawSearch ? new XAttribute("searchEngine", "raw") : null ), new XElement("music-search", new XAttribute("available", MusicSearchAvailable ? "yes" : "no"), - new XAttribute("supportedParams", SupportedMusicSearchParams()) + new XAttribute("supportedParams", SupportedMusicSearchParams()), + SupportsRawSearch ? new XAttribute("searchEngine", "raw") : null ), // inconsistent but apparently already used by various newznab indexers (see #1896) new XElement("audio-search", new XAttribute("available", MusicSearchAvailable ? "yes" : "no"), - new XAttribute("supportedParams", SupportedMusicSearchParams()) + new XAttribute("supportedParams", SupportedMusicSearchParams()), + SupportsRawSearch ? new XAttribute("searchEngine", "raw") : null ), new XElement("book-search", new XAttribute("available", BookSearchAvailable ? "yes" : "no"), - new XAttribute("supportedParams", SupportedBookSearchParams()) + new XAttribute("supportedParams", SupportedBookSearchParams()), + SupportsRawSearch ? new XAttribute("searchEngine", "raw") : null ) ), new XElement("categories", @@ -349,6 +358,7 @@ namespace Jackett.Common.Models lhs.MusicSearchParams = lhs.MusicSearchParams.Union(rhs.MusicSearchParams).ToList(); lhs.BookSearchParams = lhs.BookSearchParams.Union(rhs.BookSearchParams).ToList(); lhs.Categories.Concat(rhs.Categories); + lhs.SupportsRawSearch = lhs.SupportsRawSearch || rhs.SupportsRawSearch; return lhs; } }