core: enable genre queries (#13394)

Co-authored-by: garfield69 <garfieldsixtynine@gmail.com>
Co-authored-by: garfield69 <garfield69@outlook.com>
This commit is contained in:
ilike2burnthing 2022-07-24 10:19:43 +01:00 committed by GitHub
parent 507f2f22f7
commit 75ae674998
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 66 additions and 37 deletions

View File

@ -88,8 +88,13 @@ search:
poster:
selector: img
attribute: src
description:
genre:
selector: div.short_game_genre
filters:
- name: re_replace
args: ["\\s+/\\s+", ", "]
description:
text: "{{ .Result.genre }}"
date:
text: now
seeders:

View File

@ -177,8 +177,7 @@ search:
year_desc:
optional: true
selector: year
genre_desc:
optional: true
genre:
selector: genres
_tagline_desc:
optional: true
@ -222,5 +221,5 @@ search:
- name: regexp
args: "(.+?), $"
description:
text: "{{ if .Result.title_desc }}Title: {{ .Result.title_desc }}</br>{{ else }}{{ end }}{{ if .Result.year_desc }}Year: {{ .Result.year_desc }}</br>{{ else }}{{ end }}{{ if .Result.genre_desc }}Genres: {{ .Result.genre_desc }}</br>{{ else }}{{ end }}{{ if .Result._tagline_desc }}Tagline: {{ .Result._tagline_desc }}</br>{{ else }}{{ end }}{{ if .Result._cast_desc }}Cast: {{ .Result._cast_desc }}</br>{{ else }}{{ end }}{{ if .Result._rating_desc }}Rating: {{ .Result._rating_desc }}</br>{{ else }}{{ end }}{{ if .Result._tag_desc }}Tags: {{ .Result._tag_desc }}</br>{{ else }}{{ end }}{{ if .Result._predate_desc }}PRE: {{ .Result._predate_desc }}</br>{{ else }}{{ end }}{{ if .Result._section_desc }}Section: {{ .Result._section_desc }}{{ else }}{{ end }}"
text: "{{ if .Result.title_desc }}Title: {{ .Result.title_desc }}</br>{{ else }}{{ end }}{{ if .Result.year_desc }}Year: {{ .Result.year_desc }}</br>{{ else }}{{ end }}{{ if .Result.genre }}Genres: {{ .Result.genre }}</br>{{ else }}{{ end }}{{ if .Result._tagline_desc }}Tagline: {{ .Result._tagline_desc }}</br>{{ else }}{{ end }}{{ if .Result._cast_desc }}Cast: {{ .Result._cast_desc }}</br>{{ else }}{{ end }}{{ if .Result._rating_desc }}Rating: {{ .Result._rating_desc }}</br>{{ else }}{{ end }}{{ if .Result._tag_desc }}Tags: {{ .Result._tag_desc }}</br>{{ else }}{{ end }}{{ if .Result._predate_desc }}PRE: {{ .Result._predate_desc }}</br>{{ else }}{{ end }}{{ if .Result._section_desc }}Section: {{ .Result._section_desc }}{{ else }}{{ end }}"
# json rartracker api v1

View File

@ -36,7 +36,7 @@ caps:
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
movie-search: [q, genre]
music-search: [q]
book-search: [q]
@ -95,7 +95,7 @@ search:
# 0 name, 1 performer, 2 director
miben: 0
# genre
cimke: ""
cimke: "{{ .Query.Genre }}"
# does not support imdbid search and does not return imdb link in results
rows:
@ -153,9 +153,13 @@ search:
case:
img[src="pic/dupla_up.png"]: 2
"*": 1
genre:
selector: div i
filters:
- name: regexp
args: "\\((.+?)\\)"
description:
selector: div:nth-child(2)
remove: a
text: "{{ .Result.genre }}"
minimumratio:
text: 1.0
minimumseedtime:

View File

@ -26,8 +26,8 @@ caps:
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
music-search: [q]
movie-search: [q, imdbid, genre]
music-search: [q, genre]
book-search: [q]
settings:
@ -97,8 +97,8 @@ search:
scene: 0
# 0 all, 1 Polish, 2 non-Polish, 4 subtitled
pl: 0
# subcat blank=all
sub: ""
# genre blank=all
sub: "{{ .Query.Genre }}"
# title, both, nfo
search_in: "{{ if .Query.IMDBID }}nfo{{ else }}title{{ end }}"
sort: "{{ .Config.sort }}"
@ -131,20 +131,14 @@ search:
download:
selector: a[href^="downloadssl.php?id="]
attribute: href
_genre:
optional: true
genre:
selector: td:nth-child(2) > small
filters:
- name: prepend
args: "Genre: "
- name: append
args: "\n<br>"
_language:
optional: true
selector: img[src="pic/pl.png"]
filters:
- name: append
args: "Language: polish\n<br>"
args: "Language: Polish\n<br>"
_subbed:
optional: true
selector: img[src="pic/napisy.png"]
@ -152,7 +146,7 @@ search:
- name: append
args: "Subbed\n<br>"
description:
text: "{{ .Result._genre }}{{ .Result._language }}{{ .Result._subbed }}"
text: "Genre: {{ .Result.genre }}\n<br>{{ .Result._language }}{{ .Result._subbed }}"
imdbid:
selector: a[href*="imdb.com/title/tt"]
date:

View File

@ -96,8 +96,8 @@ search:
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# 0 name & desc, 1 name, 2 desc, 3 genre
incldesc: 1
# 0 any sub, 2 RO sub
inclrosub: 0
# 0 active, 1 incldead, 2 onlydead
incldead: 1
# 0 inclfree, 1 notfree, 2 onlyfree
@ -128,6 +128,9 @@ search:
download:
selector: a[href^="download.php?id="]
attribute: href
imdbid:
selector: a[href*="imdb.com/title/tt"]
attribute: href
size:
selector: td:nth-child(4)
date:
@ -152,6 +155,13 @@ search:
case:
img[src="images/t_extern.png"]: 0
"*": 1
genre:
selector: td div
filters:
- name: regexp
args: "Genre: (.+?)$"
description:
text: "{{ .Result.genre }}"
minimumratio:
text: 1.0
# TorrentTrader-Ro 3.0

View File

@ -184,7 +184,7 @@
"uniqueItems": true,
"items": {
"type": "string",
"enum": ["q", "imdbid", "tmdbid", "traktid", "doubanid"]
"enum": ["q", "imdbid", "tmdbid", "traktid", "doubanid", "genre"]
}
},
"music-search": {
@ -192,7 +192,7 @@
"uniqueItems": true,
"items": {
"type": "string",
"enum": ["q", "album", "artist", "label", "track", "year"]
"enum": ["q", "album", "artist", "label", "track", "year", "genre"]
}
},
"book-search": {

View File

@ -178,8 +178,7 @@ search:
year_desc:
optional: true
selector: year
genre_desc:
optional: true
genre:
selector: genres
_tagline_desc:
optional: true
@ -263,5 +262,5 @@ search:
- name: regexp
args: "(.+?), $"
description:
text: "{{ if .Result.title_desc }}Title: {{ .Result.title_desc }}</br>{{ else }}{{ end }}{{ if .Result.year_desc }}Year: {{ .Result.year_desc }}</br>{{ else }}{{ end }}{{ if .Result.genre_desc }}Genres: {{ .Result.genre_desc }}</br>{{ else }}{{ end }}{{ if .Result._tagline_desc }}Tagline: {{ .Result._tagline_desc }}</br>{{ else }}{{ end }}{{ if .Result._cast_desc }}Cast: {{ .Result._cast_desc }}</br>{{ else }}{{ end }}{{ if .Result._rating_desc }}Rating: {{ .Result._rating_desc }}</br>{{ else }}{{ end }}{{ if .Result._plot_desc }}Plot: {{ .Result._plot_desc }}</br>{{ else }}{{ end }}{{ if .Result._tag_desc }}Tags: {{ .Result._tag_desc }}</br>{{ else }}{{ end }}{{ if .Result._predate_desc }}PRE: {{ .Result._predate_desc }}</br>{{ else }}{{ end }}{{ if .Result._section_desc }}Section: {{ .Result._section_desc }}{{ else }}{{ end }}"
text: "{{ if .Result.title_desc }}Title: {{ .Result.title_desc }}</br>{{ else }}{{ end }}{{ if .Result.year_desc }}Year: {{ .Result.year_desc }}</br>{{ else }}{{ end }}{{ if .Result.genre }}Genres: {{ .Result.genre }}</br>{{ else }}{{ end }}{{ if .Result._tagline_desc }}Tagline: {{ .Result._tagline_desc }}</br>{{ else }}{{ end }}{{ if .Result._cast_desc }}Cast: {{ .Result._cast_desc }}</br>{{ else }}{{ end }}{{ if .Result._rating_desc }}Rating: {{ .Result._rating_desc }}</br>{{ else }}{{ end }}{{ if .Result._plot_desc }}Plot: {{ .Result._plot_desc }}</br>{{ else }}{{ end }}{{ if .Result._tag_desc }}Tags: {{ .Result._tag_desc }}</br>{{ else }}{{ end }}{{ if .Result._predate_desc }}PRE: {{ .Result._predate_desc }}</br>{{ else }}{{ end }}{{ if .Result._section_desc }}Section: {{ .Result._section_desc }}{{ else }}{{ end }}"
# json rartracker api v1

View File

@ -48,7 +48,7 @@ caps:
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
movie-search: [q, genre]
music-search: [q]
book-search: [q]
@ -107,7 +107,7 @@ search:
# 0 active, 1 all, 2 dead, 3 recomended, 4 double, 5 free, 6 MZ releases, 7 Race torrents
# note: option 4 and 5 do not actually filter. everything is returned.
incldead: "{{ if .Config.freeleech }}5{{ else }}1{{ end }}"
genre: 0
genre: "{{ .Query.Genre }}"
# 0 name, 1 descr, 2 both
blah: 0
sort: "{{ .Config.sort }}"
@ -171,6 +171,13 @@ search:
case:
"font[color=\"#2A821E\"]:contains(\"x2\")": 2
"*": 1
genre:
selector: td.torrent:nth-child(2)
filters:
- name: regexp
args: "\\((.+?)\\)"
description:
text: "{{ .Result.genre }}"
minimumratio:
text: 1.0
minimumseedtime:

View File

@ -38,7 +38,7 @@ namespace Jackett.Common.Indexers
set => base.configData = value;
}
protected readonly string[] OptionalFields = { "imdb", "imdbid", "tmdbid", "rageid", "tvdbid", "tvmazeid", "traktid", "doubanid", "poster", "description" };
protected readonly string[] OptionalFields = { "imdb", "imdbid", "tmdbid", "rageid", "tvdbid", "tvmazeid", "traktid", "doubanid", "poster", "genre", "description" };
private static readonly string[] _SupportedLogicFunctions =
{
@ -1307,7 +1307,7 @@ namespace Jackett.Common.Indexers
variables[".Query.Artist"] = query.Artist;
variables[".Query.Label"] = query.Label;
variables[".Query.Track"] = query.Track;
//variables[".Query.Genre"] = query.Genre ?? new List<string>();
variables[".Query.Genre"] = query.Genre;
variables[".Query.Episode"] = query.GetEpisodeSearchString();
variables[".Query.Author"] = query.Author;
variables[".Query.Title"] = query.Title;
@ -2080,8 +2080,10 @@ namespace Jackett.Common.Indexers
value = release.DoubanId.ToString();
break;
case "genre":
if (release.Genres == null)
release.Genres = new List<string>();
release.Genres = release.Genres.Union(value.Split(',')).ToList();
value = release.Genres.ToString();
// value = release.Genres.ToString();
break;
case "year":
release.Year = ReleaseInfo.GetBytes(value);

View File

@ -94,7 +94,7 @@ namespace Jackett.Common.Models.DTO
if (!string.IsNullOrWhiteSpace(request.year))
query.Year = int.Parse(request.year);
if (!string.IsNullOrWhiteSpace(request.genre))
query.Genre = request.genre.Split(',');
query.Genre = request.genre;
if (!string.IsNullOrWhiteSpace(request.title))
query.Title = request.title;

View File

@ -25,7 +25,8 @@ namespace Jackett.Common.Models
ImdbId,
TmdbId,
TraktId,
DoubanId
DoubanId,
Genre
}
public enum MusicSearchParam
@ -35,7 +36,8 @@ namespace Jackett.Common.Models
Artist,
Label,
Track,
Year
Year,
Genre
}
public enum BookSearchParam
@ -72,6 +74,7 @@ namespace Jackett.Common.Models
public bool MovieSearchTmdbAvailable => (MovieSearchParams.Contains(MovieSearchParam.TmdbId));
public bool MovieSearchTraktAvailable => (MovieSearchParams.Contains(MovieSearchParam.TraktId));
public bool MovieSearchDoubanAvailable => (MovieSearchParams.Contains(MovieSearchParam.DoubanId));
public bool MovieSearchGenreAvailable => (MovieSearchParams.Contains(MovieSearchParam.Genre));
public List<MusicSearchParam> MusicSearchParams;
public bool MusicSearchAvailable => (MusicSearchParams.Count > 0);
@ -80,6 +83,7 @@ namespace Jackett.Common.Models
public bool MusicSearchLabelAvailable => (MusicSearchParams.Contains(MusicSearchParam.Label));
public bool MusicSearchTrackAvailable => (MusicSearchParams.Contains(MusicSearchParam.Track));
public bool MusicSearchYearAvailable => (MusicSearchParams.Contains(MusicSearchParam.Year));
public bool MusicSearchGenreAvailable => (MusicSearchParams.Contains(MusicSearchParam.Genre));
public List<BookSearchParam> BookSearchParams;
public bool BookSearchAvailable => (BookSearchParams.Count > 0);
@ -219,6 +223,8 @@ namespace Jackett.Common.Models
parameters.Add("traktid");
if (MovieSearchDoubanAvailable)
parameters.Add("doubanid");
if (MovieSearchGenreAvailable)
parameters.Add("genre");
return string.Join(",", parameters);
}
@ -235,6 +241,8 @@ namespace Jackett.Common.Models
parameters.Add("track");
if (MusicSearchYearAvailable)
parameters.Add("year");
if (MusicSearchGenreAvailable)
parameters.Add("genre");
return string.Join(",", parameters);
}

View File

@ -33,7 +33,7 @@ namespace Jackett.Common.Models
public string Label { get; set; }
public string Track { get; set; }
public int? Year { get; set; }
public ICollection<string> Genre { get; set; }
public string Genre { get; set; }
public string Author { get; set; }
public string Title { get; set; }
@ -141,6 +141,7 @@ namespace Jackett.Common.Models
Artist = Artist,
Label = Label,
Track = Track,
Genre = Genre,
Year = Year,
Author = Author,
Title = Title,