diff --git a/README.md b/README.md
index c585e790b..16ec6fbb2 100644
--- a/README.md
+++ b/README.md
@@ -609,7 +609,6 @@ Prior versions of Jackett are no longer supported.
* UBits
* UHDBits
* UltraHD
- * UnionGang
* UnlimitZ
* upload.cx
* Upscale Vault
diff --git a/src/Jackett.Common/Definitions/uniongang.yml b/src/Jackett.Common/Definitions/uniongang.yml
deleted file mode 100644
index e3535cb59..000000000
--- a/src/Jackett.Common/Definitions/uniongang.yml
+++ /dev/null
@@ -1,221 +0,0 @@
----
-id: uniongang
-name: UnionGang
-description: "UnionGang is a RUSSIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
-language: ru-RU
-type: private
-encoding: UTF-8
-links:
- - https://uniongang.net/
-legacylinks:
- - http://www.uniongang.net/
- - https://www.uniongang.net/
-
-caps:
- categorymappings:
- - {id: 1, cat: Movies, desc: "Movies / HDRip / BDRip"}
- - {id: 21, cat: Movies/WEB-DL, desc: "Movies WEB-DL / WEB-DLRip"}
- - {id: 2, cat: Movies/HD, desc: "Movies x264"}
- - {id: 5, cat: Movies/HD, desc: "Movies BDRemux / BDRip1080p"}
- - {id: 6, cat: TV, desc: "TV Сериал"}
- - {id: 7, cat: TV/Documentary, desc: "TV Документальный"}
- - {id: 9, cat: TV, desc: "Мультфильм"}
- - {id: 10, cat: TV, desc: "ТВ / Выпуски / Шоу"}
- - {id: 11, cat: PC, desc: "Игра / PC"}
- - {id: 13, cat: Audio, desc: "Музыка / Русская"}
- - {id: 14, cat: Audio, desc: "Музыка / Зарубежная"}
- - {id: 23, cat: Movies/UHD, desc: "Movies / 4K"}
-
- modes:
- search: [q]
- tv-search: [q, season, ep]
- movie-search: [q]
- music-search: [q]
-
-settings:
- - name: username
- type: text
- label: Username
- - name: password
- type: password
- label: Password
- - name: stripcyrillic
- type: checkbox
- label: Strip Cyrillic Letters
- default: false
- - name: addrussiantotitle
- type: checkbox
- label: Add RUS to end of all titles to improve language detection by Sonarr and Radarr. Will cause English-only results to be misidentified.
- default: false
- - name: freeleech
- type: checkbox
- label: Search freeleech only
- default: false
- - name: sort
- type: select
- label: Sort requested from site
- default: 4
- options:
- 4: created
- 7: seeders
- 5: size
- 1: title
- - name: type
- type: select
- label: Order requested from site
- default: desc
- options:
- desc: desc
- asc: asc
- - name: info_activity
- type: info
- label: Account Inactivity
- default: "
- A parked account is deleted after 175 days (six months), for experienced users and regular users.
- A disabled account is deleted after 2 months (increased to 93 days) , for experienced users and regular users.
"
-
-login:
- path: takelogin.php
- method: post
- inputs:
- username: "{{ .Config.username }}"
- password: "{{ .Config.password }}"
- error:
- - selector: div.error
- test:
- path: /
- selector: a[href="/logout.php"]
-
-search:
- paths:
- - path: browse.php
- inputs:
- $raw: "{{ range .Categories }}cat[]={{.}}&{{end}}"
- search: "{{ .Keywords }}"
- shw_incl_cats: 0
- # 0 default, 1 active, 1 inactive, 3 gold, 4 important, 5 unverified, 6 banned, 7 no tags, 8 my torrents, 9-31 lots of other choices
- incldead: "{{ if .Config.freeleech }}3{{ else }}0{{ end }}"
- sort: "{{ .Config.sort }}"
- type: "{{ .Config.type }}"
- # site does not support imdbid search or provide imdb links in results
-
- keywordsfilters:
- # strip season and/or ep
- - name: re_replace
- args: ["(?i)\\b(?:[SE]\\d{1,4}){1,2}\\b\\s?", ""]
-
- rows:
- selector: table.brws.main > tbody > tr[class^="torcont"]
- after: 1
-
- fields:
- category:
- selector: a[href^="browse.php?cat="]
- attribute: href
- filters:
- - name: querystring
- args: cat
- title:
- selector: a[href^="details.php?id="]
- filters:
- # normalize to SXXEYY format
- - name: re_replace
- args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))[\\s:]*(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)", "S$1E$2 of $3"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s*[CС]езоны?.+?(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))?", "S$1E$2 of $3"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s*[CС]езоны?.+?(\\d+(?:-\\d+)?)\\s*(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))\\s+из\\s*(\\w?)", "S$1E$2 of $3"]
- - name: re_replace
- args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))?", "S$1E$2 of $3"]
- - name: re_replace
- args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(\\d+(?:-\\d+)?)\\s*(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))\\s+из\\s*(\\w?)", "S$1E$2 of $3"]
- - name: re_replace
- args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))[\\s:]*(\\d+(?:-\\d+)?)", "S$1E$2"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s*[CС]езоны?.+?(\\d+(?:-\\d+)?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))", "S$1E$2"]
- - name: re_replace
- args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(\\d+(?:-\\d+)?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))", "S$1E$2"]
- - name: re_replace
- args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?)", "S$1"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s+[CС]езоны?", "S$1"]
- - name: re_replace
- args: ["(?i)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))[\\s:]*(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)", "E$1 of $2"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))", "E$1 of $2"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s+(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))\\s+из\\s*(\\w?)", "E$1 of $2"]
- - name: re_replace
- args: ["(?i)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))[\\s:]*(\\d+(?:-\\d+)?)", "E$1"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s+(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))", "E$1"]
- - name: re_replace
- args: ["(?i)\\bР(\\d)?\\b", "P$1"]
- - name: re_replace
- args: ["(?i)\\sот\\s([\\w\\p{P}\\p{S}]+)\\s\\|(.+)", "$2-$1"]
- - name: re_replace
- args: ["\\s\\|\\s(\\w{4,})$", "-$1"]
- - name: re_replace
- args: ["(\\([\\p{IsCyrillic}\\W]+\\))|(^[\\p{IsCyrillic}\\W\\d]+\\/ )|([\\p{IsCyrillic} \\-]+,+)|([\\p{IsCyrillic}]+)", "{{ if .Config.stripcyrillic }}{{ else }}$1$2$3$4{{ end }}"]
- - name: re_replace
- args: ["(?i)\\bHDTV[-\\s]?Rip\\b", "HDTV"]
- - name: re_replace
- args: ["(?i)\\bSAT[-\\s]?Rip\\b", "HDTV"]
- - name: re_replace
- args: ["(?i)\\bWEB[-\\s]?DL[-\\s]?Rip\\b", "WEB-DL"]
- - name: re_replace
- args: ["(?i)\\bWEB\\sRip\\b", "WEBRip"]
- - name: re_replace
- args: ["(?i)\\bWEB\\sDL\\b", "WEB-DL"]
- - name: re_replace
- args: ["[\\[\\(\\{<«][\\s\\W]*[\\]\\)\\}>»]", ""]
- - name: re_replace
- args: ["^[\\s&,\\.!\\?\\+\\-_\\|\\/':]+", ""]
- - name: append
- args: "{{ if .Config.addrussiantotitle }} RUS{{ else }}{{ end }}"
- details:
- selector: a[href^="details.php?id="]
- attribute: href
- download:
- selector: a[href^="download.php?id="], a[href^="magnet:?xt="]
- attribute: href
- size:
- selector: a[href^="download.php?id="], a[href^="magnet:?xt="]
- seeders:
- selector: td:nth-last-child(3)
- filters:
- - name: split
- args: ["|", 0]
- leechers:
- selector: td:nth-last-child(3)
- filters:
- - name: split
- args: ["|", 1]
- date:
- selector: td:has(a[href^="userdetails.php?id="]) ~ td, td:has(a[href^="browse.php?gr="]) ~ td
- remove: a
- filters:
- - name: re_replace
- args: ["(?i)(назад)", "ago"]
- - name: re_replace
- args: ["(?i)(секунду|секунды|секунд)", "seconds"]
- - name: re_replace
- args: ["(?i)(минуты|минуту|минут)", "minutes"]
- - name: re_replace
- args: ["(?i)(часов|часа|час)", "hours"]
- - name: re_replace
- args: ["(?i)(день|дней|дня)", "days"]
- - name: re_replace
- args: ["(?i)(неделю|недели|недель)", "weeks"]
- - name: re_replace
- args: ["(?i)(месяц|месяца|месяцев)", "months"]
- - name: re_replace
- args: ["(?i)(года|год|лет)", "years"]
- - name: timeago
- downloadvolumefactor:
- case:
- img[src="/pic/freedownload.gif"]: 0
- "*": 1
- uploadvolumefactor:
- text: 1
- minimumratio:
- text: 0.3
-# Engine n/a
diff --git a/src/Jackett.Common/Definitions/uniongangcookie.yml b/src/Jackett.Common/Definitions/uniongangcookie.yml
deleted file mode 100644
index 9d7666ed5..000000000
--- a/src/Jackett.Common/Definitions/uniongangcookie.yml
+++ /dev/null
@@ -1,218 +0,0 @@
----
-id: uniongangcookie
-name: UnionGangCookie
-description: "UnionGang is a RUSSIAN Private Torrent Tracker for MOVIES / TV / GENERAL. This indexer uses cookie login."
-language: ru-RU
-type: private
-encoding: UTF-8
-links:
- - https://uniongang.net/
-legacylinks:
- - http://www.uniongang.net/
- - https://www.uniongang.net/
-
-caps:
- categorymappings:
- - {id: 1, cat: Movies, desc: "Movies / HDRip / BDRip"}
- - {id: 21, cat: Movies/WEB-DL, desc: "Movies WEB-DL / WEB-DLRip"}
- - {id: 2, cat: Movies/HD, desc: "Movies x264"}
- - {id: 5, cat: Movies/HD, desc: "Movies BDRemux / BDRip1080p"}
- - {id: 6, cat: TV, desc: "TV Сериал"}
- - {id: 7, cat: TV/Documentary, desc: "TV Документальный"}
- - {id: 9, cat: TV, desc: "Мультфильм"}
- - {id: 10, cat: TV, desc: "ТВ / Выпуски / Шоу"}
- - {id: 11, cat: PC, desc: "Игра / PC"}
- - {id: 13, cat: Audio, desc: "Музыка / Русская"}
- - {id: 14, cat: Audio, desc: "Музыка / Зарубежная"}
- - {id: 23, cat: Movies/UHD, desc: "Movies / 4K"}
-
- modes:
- search: [q]
- tv-search: [q, season, ep]
- movie-search: [q]
- music-search: [q]
-
-settings:
- - name: cookie
- type: text
- label: Cookie
- - name: info_cookie
- type: info_cookie
- - name: stripcyrillic
- type: checkbox
- label: Strip Cyrillic Letters
- default: false
- - name: addrussiantotitle
- type: checkbox
- label: Add RUS to end of all titles to improve language detection by Sonarr and Radarr. Will cause English-only results to be misidentified.
- default: false
- - name: freeleech
- type: checkbox
- label: Search freeleech only
- default: false
- - name: sort
- type: select
- label: Sort requested from site
- default: 4
- options:
- 4: created
- 7: seeders
- 5: size
- 1: title
- - name: type
- type: select
- label: Order requested from site
- default: desc
- options:
- desc: desc
- asc: asc
- - name: info_activity
- type: info
- label: Account Inactivity
- default: "- A parked account is deleted after 175 days (six months), for experienced users and regular users.
- A disabled account is deleted after 2 months (increased to 93 days) , for experienced users and regular users.
"
-
-login:
- # using the cookie method as an alternative for those users that always get a custom catpcha at login
- # (for others usually only present after a login failure so the regular indexer suffices.)
- method: cookie
- inputs:
- cookie: "{{ .Config.cookie }}"
- test:
- path: /
- selector: a[href="/logout.php"]
-
-search:
- paths:
- - path: browse.php
- inputs:
- $raw: "{{ range .Categories }}cat[]={{.}}&{{end}}"
- search: "{{ .Keywords }}"
- shw_incl_cats: 0
- # 0 default, 1 active, 1 inactive, 3 gold, 4 important, 5 unverified, 6 banned, 7 no tags, 8 my torrents, 9-31 lots of other choices
- incldead: "{{ if .Config.freeleech }}3{{ else }}0{{ end }}"
- sort: "{{ .Config.sort }}"
- type: "{{ .Config.type }}"
- # site does not support imdbid search or provide imdb links in results
-
- keywordsfilters:
- # strip season and/or ep
- - name: re_replace
- args: ["(?i)\\b(?:[SE]\\d{1,4}){1,2}\\b\\s?", ""]
-
- rows:
- selector: table.brws.main > tbody > tr[class^="torcont"]
- after: 1
-
- fields:
- category:
- selector: a[href^="browse.php?cat="]
- attribute: href
- filters:
- - name: querystring
- args: cat
- title:
- selector: a[href^="details.php?id="]
- filters:
- # normalize to SXXEYY format
- - name: re_replace
- args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))[\\s:]*(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)", "S$1E$2 of $3"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s*[CС]езоны?.+?(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))?", "S$1E$2 of $3"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s*[CС]езоны?.+?(\\d+(?:-\\d+)?)\\s*(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))\\s+из\\s*(\\w?)", "S$1E$2 of $3"]
- - name: re_replace
- args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))?", "S$1E$2 of $3"]
- - name: re_replace
- args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(\\d+(?:-\\d+)?)\\s*(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))\\s+из\\s*(\\w?)", "S$1E$2 of $3"]
- - name: re_replace
- args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))[\\s:]*(\\d+(?:-\\d+)?)", "S$1E$2"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s*[CС]езоны?.+?(\\d+(?:-\\d+)?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))", "S$1E$2"]
- - name: re_replace
- args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(\\d+(?:-\\d+)?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))", "S$1E$2"]
- - name: re_replace
- args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?)", "S$1"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s+[CС]езоны?", "S$1"]
- - name: re_replace
- args: ["(?i)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))[\\s:]*(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)", "E$1 of $2"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))", "E$1 of $2"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s+(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))\\s+из\\s*(\\w?)", "E$1 of $2"]
- - name: re_replace
- args: ["(?i)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))[\\s:]*(\\d+(?:-\\d+)?)", "E$1"]
- - name: re_replace
- args: ["(?i)(\\d+(?:-\\d+)?)\\s+(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))", "E$1"]
- - name: re_replace
- args: ["(?i)\\bР(\\d)?\\b", "P$1"]
- - name: re_replace
- args: ["(?i)\\sот\\s([\\w\\p{P}\\p{S}]+)\\s\\|(.+)", "$2-$1"]
- - name: re_replace
- args: ["\\s\\|\\s(\\w{4,})$", "-$1"]
- - name: re_replace
- args: ["(\\([\\p{IsCyrillic}\\W]+\\))|(^[\\p{IsCyrillic}\\W\\d]+\\/ )|([\\p{IsCyrillic} \\-]+,+)|([\\p{IsCyrillic}]+)", "{{ if .Config.stripcyrillic }}{{ else }}$1$2$3$4{{ end }}"]
- - name: re_replace
- args: ["(?i)\\bHDTV[-\\s]?Rip\\b", "HDTV"]
- - name: re_replace
- args: ["(?i)\\bSAT[-\\s]?Rip\\b", "HDTV"]
- - name: re_replace
- args: ["(?i)\\bWEB[-\\s]?DL[-\\s]?Rip\\b", "WEB-DL"]
- - name: re_replace
- args: ["(?i)\\bWEB\\sRip\\b", "WEBRip"]
- - name: re_replace
- args: ["(?i)\\bWEB\\sDL\\b", "WEB-DL"]
- - name: re_replace
- args: ["[\\[\\(\\{<«][\\s\\W]*[\\]\\)\\}>»]", ""]
- - name: re_replace
- args: ["^[\\s&,\\.!\\?\\+\\-_\\|\\/':]+", ""]
- - name: append
- args: "{{ if .Config.addrussiantotitle }} RUS{{ else }}{{ end }}"
- details:
- selector: a[href^="details.php?id="]
- attribute: href
- download:
- selector: a[href^="download.php?id="], a[href^="magnet:?xt="]
- attribute: href
- size:
- selector: a[href^="download.php?id="], a[href^="magnet:?xt="]
- seeders:
- selector: td:nth-last-child(3)
- filters:
- - name: split
- args: ["|", 0]
- leechers:
- selector: td:nth-last-child(3)
- filters:
- - name: split
- args: ["|", 1]
- date:
- selector: td:has(a[href^="userdetails.php?id="]) ~ td, td:has(a[href^="browse.php?gr="]) ~ td
- remove: a
- filters:
- - name: re_replace
- args: ["(?i)(назад)", "ago"]
- - name: re_replace
- args: ["(?i)(секунду|секунды|секунд)", "seconds"]
- - name: re_replace
- args: ["(?i)(минуты|минуту|минут)", "minutes"]
- - name: re_replace
- args: ["(?i)(часов|часа|час)", "hours"]
- - name: re_replace
- args: ["(?i)(день|дней|дня)", "days"]
- - name: re_replace
- args: ["(?i)(неделю|недели|недель)", "weeks"]
- - name: re_replace
- args: ["(?i)(месяц|месяца|месяцев)", "months"]
- - name: re_replace
- args: ["(?i)(года|год|лет)", "years"]
- - name: timeago
- downloadvolumefactor:
- case:
- img[src="/pic/freedownload.gif"]: 0
- "*": 1
- uploadvolumefactor:
- text: 1
- minimumratio:
- text: 0.3
-# Engine n/a
diff --git a/src/Jackett.Updater/Program.cs b/src/Jackett.Updater/Program.cs
index 01b8496e3..8b8f9bfd2 100644
--- a/src/Jackett.Updater/Program.cs
+++ b/src/Jackett.Updater/Program.cs
@@ -760,6 +760,8 @@ namespace Jackett.Updater
"Definitions/ultrahdclub.yml",
"Definitions/underverse.yml",
"Definitions/underversel.yml",
+ "Definitions/uniongang.yml",
+ "Definitions/uniongangcookie.yml",
"Definitions/uniotaku.yml", // to be migrated to c#
"Definitions/universaltorrents.yml",
"Definitions/unleashthecartoons.yml",