diff --git a/src/Jackett.Common/Definitions/catorrent.yml b/src/Jackett.Common/Definitions/catorrent.yml
index 6ab6e92eb..cdba27f9e 100644
--- a/src/Jackett.Common/Definitions/catorrent.yml
+++ b/src/Jackett.Common/Definitions/catorrent.yml
@@ -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:
diff --git a/src/Jackett.Common/Definitions/digitalcore.yml b/src/Jackett.Common/Definitions/digitalcore.yml
index c7190da1b..ff5befecf 100644
--- a/src/Jackett.Common/Definitions/digitalcore.yml
+++ b/src/Jackett.Common/Definitions/digitalcore.yml
@@ -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 }}{{ else }}{{ end }}{{ if .Result.year_desc }}Year: {{ .Result.year_desc }}{{ else }}{{ end }}{{ if .Result.genre_desc }}Genres: {{ .Result.genre_desc }}{{ else }}{{ end }}{{ if .Result._tagline_desc }}Tagline: {{ .Result._tagline_desc }}{{ else }}{{ end }}{{ if .Result._cast_desc }}Cast: {{ .Result._cast_desc }}{{ else }}{{ end }}{{ if .Result._rating_desc }}Rating: {{ .Result._rating_desc }}{{ else }}{{ end }}{{ if .Result._tag_desc }}Tags: {{ .Result._tag_desc }}{{ else }}{{ end }}{{ if .Result._predate_desc }}PRE: {{ .Result._predate_desc }}{{ else }}{{ end }}{{ if .Result._section_desc }}Section: {{ .Result._section_desc }}{{ else }}{{ end }}"
+ text: "{{ if .Result.title_desc }}Title: {{ .Result.title_desc }}{{ else }}{{ end }}{{ if .Result.year_desc }}Year: {{ .Result.year_desc }}{{ else }}{{ end }}{{ if .Result.genre }}Genres: {{ .Result.genre }}{{ else }}{{ end }}{{ if .Result._tagline_desc }}Tagline: {{ .Result._tagline_desc }}{{ else }}{{ end }}{{ if .Result._cast_desc }}Cast: {{ .Result._cast_desc }}{{ else }}{{ end }}{{ if .Result._rating_desc }}Rating: {{ .Result._rating_desc }}{{ else }}{{ end }}{{ if .Result._tag_desc }}Tags: {{ .Result._tag_desc }}{{ else }}{{ end }}{{ if .Result._predate_desc }}PRE: {{ .Result._predate_desc }}{{ else }}{{ end }}{{ if .Result._section_desc }}Section: {{ .Result._section_desc }}{{ else }}{{ end }}"
# json rartracker api v1
diff --git a/src/Jackett.Common/Definitions/estone.yml b/src/Jackett.Common/Definitions/estone.yml
index 45dfaaff8..7696febf8 100644
--- a/src/Jackett.Common/Definitions/estone.yml
+++ b/src/Jackett.Common/Definitions/estone.yml
@@ -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:
diff --git a/src/Jackett.Common/Definitions/polishsource.yml b/src/Jackett.Common/Definitions/polishsource.yml
index 779208f52..562243c24 100644
--- a/src/Jackett.Common/Definitions/polishsource.yml
+++ b/src/Jackett.Common/Definitions/polishsource.yml
@@ -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
"
_language:
optional: true
selector: img[src="pic/pl.png"]
filters:
- name: append
- args: "Language: polish\n
"
+ args: "Language: Polish\n
"
_subbed:
optional: true
selector: img[src="pic/napisy.png"]
@@ -152,7 +146,7 @@ search:
- name: append
args: "Subbed\n
"
description:
- text: "{{ .Result._genre }}{{ .Result._language }}{{ .Result._subbed }}"
+ text: "Genre: {{ .Result.genre }}\n
{{ .Result._language }}{{ .Result._subbed }}"
imdbid:
selector: a[href*="imdb.com/title/tt"]
date:
diff --git a/src/Jackett.Common/Definitions/rptorrents.yml b/src/Jackett.Common/Definitions/rptorrents.yml
index 114ca23a8..05f829c50 100644
--- a/src/Jackett.Common/Definitions/rptorrents.yml
+++ b/src/Jackett.Common/Definitions/rptorrents.yml
@@ -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
diff --git a/src/Jackett.Common/Definitions/schema.json b/src/Jackett.Common/Definitions/schema.json
index e2647aec3..5edee5478 100644
--- a/src/Jackett.Common/Definitions/schema.json
+++ b/src/Jackett.Common/Definitions/schema.json
@@ -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": {
diff --git a/src/Jackett.Common/Definitions/superbits.yml b/src/Jackett.Common/Definitions/superbits.yml
index 49dc30d25..7e7d2cfb7 100644
--- a/src/Jackett.Common/Definitions/superbits.yml
+++ b/src/Jackett.Common/Definitions/superbits.yml
@@ -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 }}{{ else }}{{ end }}{{ if .Result.year_desc }}Year: {{ .Result.year_desc }}{{ else }}{{ end }}{{ if .Result.genre_desc }}Genres: {{ .Result.genre_desc }}{{ else }}{{ end }}{{ if .Result._tagline_desc }}Tagline: {{ .Result._tagline_desc }}{{ else }}{{ end }}{{ if .Result._cast_desc }}Cast: {{ .Result._cast_desc }}{{ else }}{{ end }}{{ if .Result._rating_desc }}Rating: {{ .Result._rating_desc }}{{ else }}{{ end }}{{ if .Result._plot_desc }}Plot: {{ .Result._plot_desc }}{{ else }}{{ end }}{{ if .Result._tag_desc }}Tags: {{ .Result._tag_desc }}{{ else }}{{ end }}{{ if .Result._predate_desc }}PRE: {{ .Result._predate_desc }}{{ else }}{{ end }}{{ if .Result._section_desc }}Section: {{ .Result._section_desc }}{{ else }}{{ end }}"
+ text: "{{ if .Result.title_desc }}Title: {{ .Result.title_desc }}{{ else }}{{ end }}{{ if .Result.year_desc }}Year: {{ .Result.year_desc }}{{ else }}{{ end }}{{ if .Result.genre }}Genres: {{ .Result.genre }}{{ else }}{{ end }}{{ if .Result._tagline_desc }}Tagline: {{ .Result._tagline_desc }}{{ else }}{{ end }}{{ if .Result._cast_desc }}Cast: {{ .Result._cast_desc }}{{ else }}{{ end }}{{ if .Result._rating_desc }}Rating: {{ .Result._rating_desc }}{{ else }}{{ end }}{{ if .Result._plot_desc }}Plot: {{ .Result._plot_desc }}{{ else }}{{ end }}{{ if .Result._tag_desc }}Tags: {{ .Result._tag_desc }}{{ else }}{{ end }}{{ if .Result._predate_desc }}PRE: {{ .Result._predate_desc }}{{ else }}{{ end }}{{ if .Result._section_desc }}Section: {{ .Result._section_desc }}{{ else }}{{ end }}"
# json rartracker api v1
diff --git a/src/Jackett.Common/Definitions/teracod.yml b/src/Jackett.Common/Definitions/teracod.yml
index 598ba1986..a222df4cf 100644
--- a/src/Jackett.Common/Definitions/teracod.yml
+++ b/src/Jackett.Common/Definitions/teracod.yml
@@ -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:
diff --git a/src/Jackett.Common/Indexers/CardigannIndexer.cs b/src/Jackett.Common/Indexers/CardigannIndexer.cs
index b6bf47cd4..4cef3dbf6 100644
--- a/src/Jackett.Common/Indexers/CardigannIndexer.cs
+++ b/src/Jackett.Common/Indexers/CardigannIndexer.cs
@@ -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();
+ 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();
release.Genres = release.Genres.Union(value.Split(',')).ToList();
- value = release.Genres.ToString();
+ // value = release.Genres.ToString();
break;
case "year":
release.Year = ReleaseInfo.GetBytes(value);
diff --git a/src/Jackett.Common/Models/DTO/TorznabRequest.cs b/src/Jackett.Common/Models/DTO/TorznabRequest.cs
index 8e9a24522..91e20b868 100644
--- a/src/Jackett.Common/Models/DTO/TorznabRequest.cs
+++ b/src/Jackett.Common/Models/DTO/TorznabRequest.cs
@@ -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;
diff --git a/src/Jackett.Common/Models/TorznabCapabilities.cs b/src/Jackett.Common/Models/TorznabCapabilities.cs
index 4ed168768..4251cfd87 100644
--- a/src/Jackett.Common/Models/TorznabCapabilities.cs
+++ b/src/Jackett.Common/Models/TorznabCapabilities.cs
@@ -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 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 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);
}
diff --git a/src/Jackett.Common/Models/TorznabQuery.cs b/src/Jackett.Common/Models/TorznabQuery.cs
index acddaca97..2e68f3774 100644
--- a/src/Jackett.Common/Models/TorznabQuery.cs
+++ b/src/Jackett.Common/Models/TorznabQuery.cs
@@ -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 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,