Compare commits

...

66 Commits

Author SHA1 Message Date
jackettbot[bot]
eb3898a961 Update rudub 2025-11-23 01:29:45 +00:00
dependabot[bot]
75bf8d7078 build(deps): bump actions/checkout from 5 to 6 (#16305)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: ilike2burnthing <59480337+ilike2burnthing@users.noreply.github.com>
(skip definitions update job for dependabot)
2025-11-22 02:46:28 +00:00
jackettbot[bot]
390b1714f4 Update rudub 2025-11-22 01:28:49 +00:00
Garfield69
6254d62c23 torrentqq: bump domain 2025-11-21 18:32:28 +13:00
jackettbot[bot]
08773ae3c9 Update rudub 2025-11-21 01:28:59 +00:00
jackettbot[bot]
7b7f77e06f Update rudub 2025-11-20 01:29:17 +00:00
Bogdan
64fc61f777 core: refactor remaining obsolete calls (#16301) 2025-11-19 19:41:26 +02:00
Garfield69
dee082ead3 torrenttip: bump domain 2025-11-20 05:39:38 +13:00
Garfield69
6347fdff66 torrentsome: bump domain 2025-11-20 05:39:28 +13:00
Garfield69
cdeac3c0ef kickasstorrents-to: new cat 2025-11-20 05:39:13 +13:00
Bogdan
6d568a4059 yts: update links
Closes #16297
2025-11-19 17:50:18 +02:00
jackettbot[bot]
3dd5b1e5f0 Update rudub 2025-11-19 01:29:18 +00:00
Garfield69
fb9845d1e3 magnetz: q -> query 2025-11-19 13:03:56 +13:00
Garfield69
70b0aa1f67 linuxtracker: new cat 2025-11-19 06:10:10 +13:00
Garfield69
368afcfc5a hdgalaktik: new size selector. resolves dd11b7e6cd 2025-11-18 16:42:57 +13:00
jackettbot[bot]
29d28e2607 Update rudub 2025-11-18 01:29:11 +00:00
Garfield69
b023e8fe6d clearjav: -> 9.1.7 drop info_hash 2025-11-18 06:56:48 +13:00
Garfield69
d51752f682 kickasstorrents-to: new cat 2025-11-18 06:36:40 +13:00
Garfield69
ec40699cdc hdgalaktik: restore previous size selector. reverts dd11b7e6cd 2025-11-18 06:36:24 +13:00
jackettbot[bot]
3c798127c5 Update rudub 2025-11-17 01:29:17 +00:00
Bogdan
61b263dd98 core: refactor obsolete calls (#16290)
* core: refactor obsolete hashing calls

* core: delete cert callback validation removal in update service

* core: remove deprecated ServicePointManager calls

- Avoid harcoding SSL protocols.
- Lowering DefaultConnectionLimit 1000 to MaxConnectionsPerServer 20

* core: avoid is only supported on windows warnings
2025-11-16 22:05:22 +02:00
ilike2burnthing
dd11b7e6cd hdgalaktik: update size selector & remove cert exception 2025-11-16 19:05:54 +00:00
jackettbot[bot]
bec42c4ac0 Update rudub 2025-11-16 01:29:39 +00:00
Garfield69
9b08d7ad46 hdgalaktik: new layout resolves #13186
necessitates switching to categorydesc
plus new selectors
2025-11-16 13:10:06 +13:00
Garfield69
9311af24b5 uztracker: update cats 2025-11-16 06:01:56 +13:00
jackettbot[bot]
9e5d79d2a4 Update rudub 2025-11-15 01:29:11 +00:00
jackettbot[bot]
15c64f9f66 Update rudub 2025-11-14 01:29:13 +00:00
ilike2burnthing
f1f8f0f756 mvgroup: add flaresolverr info (#16289) 2025-11-13 22:23:12 +00:00
ilike2burnthing
b3d4ec6f23 Update README.md 2025-11-13 17:30:03 +00:00
Garfield69
7f33664f97 sextorrent: new cats 2025-11-14 05:30:19 +13:00
Garfield69
43aaaf4142 torrentqq: bump domain 2025-11-14 05:15:02 +13:00
Garfield69
20a0bedc3b magnetcat: bump alternate domains 2025-11-14 05:13:55 +13:00
ilike2burnthing
31e0a19eeb amigosshare: remove possible trailing spaces (#16288) 2025-11-13 17:21:56 +13:00
jackettbot[bot]
ccb98cbe48 Update rudub 2025-11-13 01:29:07 +00:00
Garfield69
6560931e42 Revert "bump version to 0.25.*"
This reverts commit 46082db9b9.
2025-11-13 05:50:47 +13:00
Garfield69
46082db9b9 bump version to 0.25.* 2025-11-13 05:48:35 +13:00
Bogdan
89f4a9fb89 core: fixed constants usage to determine target framework (#16287) 2025-11-12 17:47:30 +02:00
Garfield69
3e2411865f torrenttip: bump domain 2025-11-12 18:36:12 +13:00
Garfield69
74b2f9e670 torrentsome: bump domain 2025-11-12 18:35:56 +13:00
ilike2burnthing
78b538d2be huntorrent: fix category and IMDBID search, split bithorlo to huntorrent-bithorlo (#16285) 2025-11-12 16:55:08 +13:00
jackettbot[bot]
e92e9d168e Update rudub 2025-11-12 01:29:21 +00:00
Garfield69
e32053b153 oxtorrent-vip: removed. resolves #15411 2025-11-12 13:21:01 +13:00
Bogdan
7eabdec5b0 core: bump dotnet packages (#16284) 2025-11-11 22:16:38 +02:00
Garfield69
76a61e67c4 fix b9834455ed 2025-11-12 08:48:39 +13:00
Garfield69
b9834455ed nortorrent, zetorrents, zktorrent: add proxy alternate
also update domain list tld
2025-11-12 08:39:59 +13:00
ilike2burnthing
2f3f86bf25 pipelines: update images (#16283) 2025-11-11 19:17:47 +00:00
Garfield69
05918d22c1 ztracker: now on https 2025-11-12 06:47:32 +13:00
ilike2burnthing
cae5c818df infinityhd: add private tracker. resolves #16281 (#16282) 2025-11-11 17:34:55 +00:00
ilike2burnthing
84b258a3bb hd-unit3d-api: remove unused book search mode 2025-11-11 17:20:17 +00:00
Garfield69
887c5bafe6 zetorrents & zktorrent: drop home path
prevents Fatal error: Uncaught --> Smarty: Unable to load template file 'home.html' <-- thrown in /www/wwwroot/www-zktorrent.com/libs/sysplugins/smarty_internal_templatebase.php on line 129
2025-11-11 18:36:21 +13:00
jackettbot[bot]
eb933878ec Update rudub 2025-11-11 01:29:07 +00:00
Garfield69
3116dcce2b torrent-turk: update cats 2025-11-11 06:01:49 +13:00
Garfield69
459bc4683e torrentsir: removed. resolves #11214 2025-11-11 05:23:04 +13:00
Garfield69
37ef94e8a5 torrentqq: bump alternate domain 2025-11-11 05:20:20 +13:00
Garfield69
7bbc63ddb8 torrentssg: removed. resolves #15872 2025-11-11 05:20:03 +13:00
jackettbot[bot]
e25370d959 Update rudub 2025-11-10 01:29:27 +00:00
Garfield69
46d6cf7ca1 uztracker: update cats 2025-11-10 06:25:05 +13:00
Garfield69
b8f4caddc2 noname-clubl: new cats 2025-11-10 06:24:37 +13:00
Garfield69
2cfd55b325 extratorrent-st: new cat 2025-11-10 06:23:03 +13:00
Garfield69
5f37536783 ebooks-shares: new cat 2025-11-10 06:22:43 +13:00
Garfield69
c0994d7a5e abtorrents: update cat 2025-11-10 06:22:24 +13:00
Garfield69
7455f3aec6 add magnetz a public site. resolves #16277 2025-11-09 16:40:06 +13:00
ilike2burnthing
832184afaf darkpeers: update MR & MST 2025-11-09 02:26:09 +00:00
jackettbot[bot]
f8bd4cd479 Update rudub 2025-11-09 01:29:25 +00:00
Tiberio
9e1d4af15e shareisland: preserve special chars in release names (#16276) 2025-11-08 20:08:24 +00:00
Garfield69
052d4ab3e2 thepiratedship: removed. resolves #15722 2025-11-09 05:41:30 +13:00
62 changed files with 807 additions and 1127 deletions

View File

@@ -57,7 +57,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL

View File

@@ -15,7 +15,7 @@ concurrency:
jobs:
update-rudub:
name: Update rudub
if: github.repository == 'Jackett/Jackett'
if: (github.repository == 'Jackett/Jackett' && github.actor != 'dependabot[bot]')
runs-on: ubuntu-latest
permissions:
contents: write
@@ -34,7 +34,7 @@ jobs:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
token: ${{ steps.app-token.outputs.token }}

View File

@@ -20,7 +20,7 @@ jobs:
steps:
# This workflow will run a script that is stored in the repository. This step checks out the repository contents so that the workflow can access the script.
- name: Check out repo content
uses: actions/checkout@v5
uses: actions/checkout@v6
# This step sets up Node.js. The script that this workflow will run uses Node.js.
- name: Setup Node.js

View File

@@ -83,6 +83,7 @@ Prior versions of Jackett are no longer supported.
* Mac Torrents Download
* Magnet Cat
* MagnetDownload
* Magnetz
* MegaPeer
* MejorTorrent
* Mikan
@@ -96,7 +97,6 @@ Prior versions of Jackett are no longer supported.
* Nyaa.si
* OneJAV
* OxTorrent
* OxTorrent-vip
* OpenSharing
* PC-torrent
* Pirate's Paradise
@@ -132,9 +132,7 @@ Prior versions of Jackett are no longer supported.
* TorrentProject2
* TorrentQQ (토렌트큐큐)
* Torrents.csv
* TorrentSir (토렌트썰)
* Torrentsome (토렌트썸)
* torrentssg (토렌트쓱)
* Torrenttip (토렌트팁)
* TrahT
* U3C3
@@ -400,6 +398,7 @@ Prior versions of Jackett are no longer supported.
* Immortuos
* Indietorrents [![(invite needed)][inviteneeded]](#)
* INFINITY [PAY2DL] [![(invite needed)][inviteneeded]](#)
* InfinityHD
* Infire
* Insane Tracker
* IPTorrents (IPT)
@@ -563,7 +562,6 @@ Prior versions of Jackett are no longer supported.
* The Vault (TVBZ)
* The-New-Fun
* TheLeachZone (TLZ)
* ThePiratedShip
* TJUPT (北洋园PT)
* TLFBits [![(invite needed)][inviteneeded]](#)
* TmGHuB (TH) [![(invite needed)][inviteneeded]](#)
@@ -833,7 +831,7 @@ Detailed instructions are available at [Jackett's Wiki](https://github.com/Jacke
## Running Jackett behind a reverse proxy
When running jackett behind a reverse proxy make sure that the original hostname of the request is passed to Jackett. If HTTPS is used also set the X-Forwarded-Proto header to "https". Don't forget to adjust the "Base path override" Jackett option accordingly.
When running Jackett behind a reverse proxy make sure that the original hostname of the request is passed to Jackett. If HTTPS is used also set the X-Forwarded-Proto header to "https". Don't forget to adjust the "Base path override" Jackett option accordingly.
Example config for apache:
```

View File

@@ -44,70 +44,70 @@ stages:
matrix:
Windows:
buildDescription: Windows
imageName: windows-2022
imageName: windows-2025
framework: $(netCoreFramework)
runtime: win-x86
archiveType: zip
artifactName: Jackett.Binaries.Windows.zip
macOS:
buildDescription: macOS
imageName: macOS-13
imageName: macOS-15
framework: $(netCoreFramework)
runtime: osx-x64
archiveType: tar
artifactName: Jackett.Binaries.macOS.tar.gz
macOSARM64:
buildDescription: macOS ARM64
imageName: macOS-13
imageName: macOS-15
framework: $(netCoreFramework)
runtime: osx-arm64
archiveType: tar
artifactName: Jackett.Binaries.macOSARM64.tar.gz
LinuxAMDx64:
buildDescription: Linux AMD x64
imageName: ubuntu-22.04
imageName: ubuntu-24.04
framework: $(netCoreFramework)
runtime: linux-x64
archiveType: tar
artifactName: Jackett.Binaries.LinuxAMDx64.tar.gz
LinuxARM32:
buildDescription: Linux ARM32
imageName: ubuntu-22.04
imageName: ubuntu-24.04
framework: $(netCoreFramework)
runtime: linux-arm
archiveType: tar
artifactName: Jackett.Binaries.LinuxARM32.tar.gz
LinuxARM64:
buildDescription: Linux ARM64
imageName: ubuntu-22.04
imageName: ubuntu-24.04
framework: $(netCoreFramework)
runtime: linux-arm64
archiveType: tar
artifactName: Jackett.Binaries.LinuxARM64.tar.gz
LinuxMuslAMDx64:
buildDescription: Linux musl AMD x64
imageName: ubuntu-22.04
imageName: ubuntu-24.04
framework: $(netCoreFramework)
runtime: linux-musl-x64
archiveType: tar
artifactName: Jackett.Binaries.LinuxMuslAMDx64.tar.gz
LinuxMuslARM32:
buildDescription: Linux musl ARM32
imageName: ubuntu-22.04
imageName: ubuntu-24.04
framework: $(netCoreFramework)
runtime: linux-musl-arm
archiveType: tar
artifactName: Jackett.Binaries.LinuxMuslARM32.tar.gz
LinuxMuslARM64:
buildDescription: Linux musl ARM64
imageName: ubuntu-22.04
imageName: ubuntu-24.04
framework: $(netCoreFramework)
runtime: linux-musl-arm64
archiveType: tar
artifactName: Jackett.Binaries.LinuxMuslARM64.tar.gz
Mono:
buildDescription: Mono
imageName: ubuntu-22.04
imageName: ubuntu-24.04
framework: net471
runtime: linux-x64
archiveType: tar
@@ -231,7 +231,7 @@ stages:
- task: CopyFiles@2
displayName: Copy Mono Specific Scripts
condition: and(succeeded(), startsWith(variables['buildDescription'], 'Mono'))
condition: and(succeeded(), eq(variables['buildDescription'], 'Mono'))
inputs:
SourceFolder: $(Build.SourcesDirectory)
contents: |
@@ -269,7 +269,7 @@ stages:
# https://github.com/Jackett/Jackett/issues/3547
- task: PowerShell@2
displayName: Patch Mono Build (Mono only)
condition: and(succeeded(), startsWith(variables['buildDescription'], 'Mono'))
condition: and(succeeded(), eq(variables['buildDescription'], 'Mono'))
inputs:
workingDirectory: $(Build.BinariesDirectory)/Jackett
targetType: inline
@@ -329,7 +329,7 @@ stages:
- job: Linting_Dotnet
displayName: Linting Dotnet
pool:
vmImage: ubuntu-22.04
vmImage: ubuntu-24.04
workspace:
clean: all
steps:
@@ -362,7 +362,7 @@ stages:
- job: Linting_YAML
displayName: Linting YAML
pool:
vmImage: ubuntu-22.04
vmImage: ubuntu-24.04
workspace:
clean: all
steps:
@@ -382,7 +382,7 @@ stages:
- job: Validate_YAML_Schema
displayName: Validate YAML Schema
pool:
vmImage: ubuntu-22.04
vmImage: ubuntu-24.04
workspace:
clean: all
steps:
@@ -421,22 +421,22 @@ stages:
matrix:
Windows:
buildDescription: Windows
imageName: windows-2022
imageName: windows-2025
framework: $(netCoreFramework)
runtime: win-x86
macOS:
buildDescription: macOS
imageName: macOS-13
imageName: macOS-15
framework: $(netCoreFramework)
runtime: osx-x64
LinuxAMDx64:
buildDescription: LinuxAMDx64
imageName: ubuntu-22.04
imageName: ubuntu-24.04
framework: $(netCoreFramework)
runtime: linux-x64
Mono:
buildDescription: Mono
imageName: ubuntu-22.04
imageName: ubuntu-24.04
framework: net471
runtime: linux-x64
pool:
@@ -445,6 +445,15 @@ stages:
steps:
- checkout: self
- task: Bash@3
displayName: Install Mono (Mono only)
condition: and(succeeded(), eq(variables['buildDescription'], 'Mono'))
inputs:
targetType: inline
script: |
sudo apt update
sudo apt install mono-complete
- task: UseDotNet@2
displayName: Install .NET Core SDK
inputs:
@@ -514,25 +523,25 @@ stages:
matrix:
Windows:
buildDescription: Windows
imageName: windows-2022
imageName: windows-2025
artifactName: Jackett.Binaries.Windows.zip
framework: $(netCoreFramework)
runtime: win-x86
macOS:
buildDescription: macOS
imageName: macOS-13
imageName: macOS-15
artifactName: Jackett.Binaries.macOS.tar.gz
framework: $(netCoreFramework)
runtime: osx-x64
LinuxAMDx64:
buildDescription: Linux AMD x64
imageName: ubuntu-22.04
imageName: ubuntu-24.04
artifactName: Jackett.Binaries.LinuxAMDx64.tar.gz
framework: $(netCoreFramework)
runtime: linux-x64
Mono:
buildDescription: Mono
imageName: ubuntu-22.04
imageName: ubuntu-24.04
artifactName: Jackett.Binaries.Mono.tar.gz
framework: net471
runtime: linux-x64
@@ -542,6 +551,15 @@ stages:
steps:
- checkout: self
- task: Bash@3
displayName: Install Mono (Mono only)
condition: and(succeeded(), eq(variables['buildDescription'], 'Mono'))
inputs:
targetType: inline
script: |
sudo apt update
sudo apt install mono-complete
- task: DownloadBuildArtifacts@0
displayName: Download artifacts for integration tests
inputs:
@@ -596,7 +614,7 @@ stages:
workspace:
clean: all
pool:
vmImage: ubuntu-22.04
vmImage: ubuntu-24.04
steps:
- checkout: self

View File

@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFrameworks>netstandard2.0;net9.0</TargetFrameworks>
<LangVersion>9</LangVersion>
<NoWarn />
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>

View File

@@ -53,6 +53,7 @@ caps:
- {id: 420, cat: Books/EBook, desc: "[E] Arts & Crafts (Hobbies)"}
- {id: 430, cat: Books/EBook, desc: "[E] Biography & Memoirs"}
- {id: 435, cat: Books/EBook, desc: "[E] Business"}
- {id: 720, cat: Books/EBook, desc: "[E] Childrens"}
- {id: 450, cat: Books/EBook, desc: "[E] Computer Learning"}
- {id: 460, cat: Books/EBook, desc: "[E] Cookery"}
- {id: 470, cat: Books/EBook, desc: "[E] Crime & Thriller"}
@@ -80,7 +81,6 @@ caps:
- {id: 690, cat: Books/EBook, desc: "[E] Urban Fantasy & Paranormal"}
- {id: 700, cat: Books/EBook, desc: "[E] Western"}
- {id: 710, cat: Books/EBook, desc: "[E] Young Adult"}
- {id: 720, cat: Books/EBook, desc: "[E] Young Children"}
modes:
search: [q]

View File

@@ -152,7 +152,7 @@ search:
keywordsfilters:
# drop the year from searches since site titles do not include year
- name: re_replace
args: ["(\\b((19|20)\\d{2})\\b)", ""]
args: ["(\\s*\\b((19|20)\\d{2})\\b)", ""]
rows:
selector: "div#fancy-list-group ul.list-group li.list-group-item{{ if .Config.freeleech }}:has(span.badge-success:contains(\"FREE\")){{ else }}{{ end }}"

View File

@@ -94,8 +94,6 @@ search:
selector: details_link
download:
selector: download_link
infohash:
selector: info_hash
files:
selector: num_file
seeders:
@@ -145,4 +143,4 @@ search:
minimumseedtime:
# 7 days (as seconds = 7 x 24 x 60 x 60)
text: 604800
# json UNIT3D 9.1.5 (custom)
# json UNIT3D 9.1.7 (custom)

View File

@@ -188,10 +188,10 @@ search:
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.4 but torrents must be seeded for 3 days or 1:1
# global MR is 0.8 but torrents must be seeded for 6 days or 1:1
minimumratio:
text: 0.8
text: 1.0
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# 6 days (as seconds = 6 x 24 x 60 x 60)
text: 518400
# json UNIT3D 9.1.7

View File

@@ -93,6 +93,7 @@ caps:
- {id: 351, cat: Books/EBook, desc: "Religion"}
- {id: 358, cat: Books/EBook, desc: "History"}
- {id: 362, cat: Books/EBook, desc: "Politics"}
- {id: 368, cat: Books/EBook, desc: "Music"}
# Military
- {id: 287, cat: Books/EBook, desc: "WW1"}
- {id: 288, cat: Books/EBook, desc: "WW2"}

View File

@@ -44,6 +44,7 @@ caps:
- {id: Magazines, cat: XXX/Other, desc: Adult Magazines}
- {id: Movie clips, cat: Movies, desc: Movies clips}
- {id: Movies, cat: Movies, desc: Movies}
- {id: Music, cat: Audio, desc: Music}
- {id: Music videos, cat: Audio/Video, desc: Music Videos}
- {id: NDS, cat: Console/NDS, desc: Games NDS}
- {id: Other Applications, cat: PC, desc: Other Applications}

View File

@@ -19,7 +19,6 @@ caps:
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey

View File

@@ -5,8 +5,6 @@ description: "HDGalaKtik is a RUSSIAN Semi-Private tracker for MOVIES / TV / GEN
language: ru-RU
type: semi-private
encoding: UTF-8
certificates:
- 89cb539248b0d0cb0e92aa3f286ddfdd8347c3be # CN=mail.trackerpmr.com
links:
- https://www.trackerpmr.com/
- https://freetmd.com/
@@ -16,20 +14,20 @@ legacylinks:
caps:
categorymappings:
- {id: 13, cat: Movies, desc: "Фильмы (Movies)"}
- {id: 6, cat: TV, desc: "Мультфильмы (Cartoons)"}
- {id: 10, cat: Audio, desc: "Музыка (Music)"}
- {id: 26, cat: PC, desc: "Программы (Programs)"}
- {id: 5, cat: Console, desc: "Игры (Games)"}
- {id: 25, cat: Other, desc: "Картинки (Pictures)"}
- {id: 11, cat: TV, desc: "Сериалы (TV Series)"}
- {id: 12, cat: TV/Anime, desc: "Аниме (Anime)"}
- {id: 16, cat: Books, desc: "Книги (Books)"}
- {id: 18, cat: Audio/Video, desc: "Клипы / Ролики (Clips / Trailers)"}
- {id: 22, cat: TV, desc: "ТВ / Передачи (TV)"}
- {id: 27, cat: PC/Mobile-Other, desc: "Игры - Мобила / КПК (Mobile)"}
- {id: 1, cat: PC/ISO, desc: "Образы (ISO)"}
- {id: 4, cat: Other, desc: "Другое (Other)"}
- {id: 13, cat: Movies, desc: "Фильмы"}
- {id: 11, cat: TV, desc: "Сериалы"}
- {id: 6, cat: TV, desc: "Мультфильмы"}
- {id: 10, cat: Audio, desc: "Музыка"}
- {id: 26, cat: PC, desc: "Программы"}
- {id: 5, cat: Console, desc: "Игры"}
- {id: 25, cat: Other, desc: "Картинки"}
- {id: 12, cat: TV/Anime, desc: "Аниме"}
- {id: 16, cat: Books, desc: "Книги"}
- {id: 18, cat: Audio/Video, desc: "Клипы / Ролики"}
- {id: 22, cat: TV, desc: "ТВ / Передачи"}
- {id: 27, cat: PC/Mobile-Other, desc: "Игры - Мобила / КПК"}
- {id: 1, cat: PC/ISO, desc: "Образы"}
- {id: 4, cat: Other, desc: "Другое"}
modes:
search: [q]
@@ -117,24 +115,20 @@ search:
args: ["[^a-zA-Z0-9]+", "%"]
rows:
selector: table.table > tbody > tr.torcontduo
selector: div.torrent-card
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
categorydesc:
selector: div.category-badge
optional: true
default: 4
default: Другое
filters:
- name: querystring
args: cat
- name: replace
args: ["---", "Другое"]
title:
selector: a[href^="details.php?id="]
selector: a.torrent-title-link
attribute: title
filters:
- name: regexp
args: \'>(.+?)</div
- name: htmldecode
# 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"]
@@ -193,16 +187,19 @@ search:
- name: append
args: "{{ if .Config.addrussiantotitle }} RUS{{ else }}{{ end }}"
details:
selector: a[href^="details.php?id="]
selector: a.torrent-title-link
attribute: href
# there is either a magnet or a download link
magnet:
selector: a[href^="magnet:?xt="]
attribute: href
optional: true
download:
selector: a[href^="details.php?id="]
selector: a[href^="download.php?id="]
attribute: href
filters:
- name: replace
args: ["details", "download"]
optional: true
poster:
selector: img.s
selector: img.torrent-poster
attribute: src
imdbid:
selector: a[href^="browse.php?imdb="]
@@ -211,46 +208,26 @@ search:
- name: querystring
args: imdb
size:
selector: td:nth-child(4)
selector: div.size-section
seeders:
selector: span[title="Раздают"]
selector: span.peers-seeders
leechers:
selector: span[title="Качают"]
date_day:
# Сегодня в 18:22
# Вчера в 20:52
selector: a[href^="browse.php?date="]:contains("Сегодня"), a[href^="browse.php?date="]:contains("Вчера")
optional: true
filters:
- name: regexp
args: "((Вчера в|Сегодня в)( \\d{2}:\\d{2}))"
- name: replace
args: ["Сегодня в", "Today"]
- name: replace
args: ["Вчера в", "Yesterday"]
- name: fuzzytime
date_year:
# 23:48 24/07
selector: a[href^="browse.php?date="]:contains("/")
optional: true
filters:
- name: regexp
args: "(\\d{2}:\\d{2} \\d{2}/\\d{2})"
- name: append
args: " +03:00" # MSK
- name: dateparse
args: "HH:mm dd/MM zzz"
selector: span.peers-leechers
grabs:
selector: span:has(i.fa-download)
date:
text: "{{ if or .Result.date_year .Result.date_day }}{{ or .Result.date_year .Result.date_day }}{{ else }}now{{ end }}"
selector: div.added-date
filters:
- name: timeago
downloadvolumefactor:
case:
img[src="/pic/freedownload.gif"]: 0
span.bg-success: 0
"*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 1.0
description:
selector: a[href*="?tag="]
selector: a.tag
attribute: title
# engine n/a

View File

@@ -0,0 +1,181 @@
---
id: huntorrent-bithorlo
name: HunTorrent-bithorlo
description: "HunTorrent-bithorlo is a HUNGARIAN Semi-Private Torrent Tracker for MOVIES / TV / GENERAL"
language: hu-HU
type: semi-private
encoding: UTF-8
requestDelay: 2
links:
- https://huntorrent.org/
legacylinks:
- https://huntorrent.net/
caps:
categorymappings:
- {id: 51, cat: Movies/SD, desc: "Cam/Eng", default: true}
- {id: 50, cat: Movies/SD, desc: "Cam/Hun", default: true}
- {id: 2, cat: Movies/DVD, desc: "DVD/Eng", default: true}
- {id: 1, cat: Movies/DVD, desc: "DVD/Hun", default: true}
- {id: 42, cat: Movies/DVD, desc: "Dvd9/Eng", default: true}
- {id: 41, cat: Movies/DVD, desc: "Dvd9/Hun", default: true}
- {id: 40, cat: Books, desc: "E-book/Eng", default: true}
- {id: 19, cat: Books, desc: "E-book/Hun", default: true}
- {id: 29, cat: Movies/HD, desc: "HD/Eng", default: true}
- {id: 28, cat: Movies/HD, desc: "HD/Hun", default: true}
- {id: 15, cat: PC/Games, desc: "Játék/ISO", default: true}
- {id: 38, cat: Console, desc: "Játék/Konzol", default: true}
- {id: 37, cat: PC/Games, desc: "Játék/Rip", default: true}
- {id: 20, cat: Other, desc: "Képek", default: true}
- {id: 21, cat: PC/Mobile-Other, desc: "Mobil", default: true}
- {id: 54, cat: PC/ISO, desc: "Prog/ISO", default: true}
- {id: 23, cat: PC/0day, desc: "Prog/Rip", default: true}
- {id: 33, cat: TV/SD, desc: "Sorozat/Eng", default: true}
- {id: 52, cat: TV/HD, desc: "Sorozat/Eng/HD", default: true}
- {id: 5, cat: TV/SD, desc: "Sorozat/Hun", default: true}
- {id: 53, cat: TV/HD, desc: "Sorozat/Hun/HD", default: true}
- {id: 4, cat: Movies/SD, desc: "Xvid/Eng", default: true}
- {id: 3, cat: Movies/SD, desc: "Xvid/Hun", default: true}
- {id: 12, cat: Audio, desc: "Zene/Eng", default: true}
- {id: 13, cat: Audio, desc: "Zene/Hun", default: true}
- {id: 9, cat: XXX/x264, desc: "XXX/Film", default: false}
- {id: 10, cat: XXX/ImageSet, desc: "XXX/Kép", default: false}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: info_about
type: info
label: About this HunTorrent-bithorlo indexer
default: This indexer accesses the HunTorrent WebSite with a focus on only the <b>bithorlo</b> torrent browser pages.
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: useragent
type: text
label: User-Agent
- name: info_useragent
type: info_useragent
- 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_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
login:
method: cookie
# using cookie method because login page has embedded Google reCAPTCHA
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: browse.php
selector: a[href^="logout.php?k="]
search:
headers:
User-Agent: ["{{ .Config.useragent }}"]
paths:
# https://huntorrent.net/browse.php?&korhatar=0&incldead=1&xyz=yes&c28=1&c27=1&c6=1&c5=1&sort=4&type=desc
- path: browse.php
categories: [51, 50, 2, 1, 42, 41, 40, 19, 29, 28, 15, 38, 37, 20, 21, 54, 23, 33, 52, 53, 4, 3, 12, 13]
inputs:
viewMode: bithorlo
- path: browse.php
categories: [9, 10]
inputs:
viewMode: bithorloxxx
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
xyz: yes
search: "{{ .Keywords }}"
# Age Limit: 0 all, 1 no, 5 6, 2 12, 3 16, 4 18
korhatar: 0
# 0 active, 1 active+dead, 2 dead, 3 my uploads, 4 waiting for seed, 7 my bookmarks, 12 reseeded by me
incldead: 1
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table.torrent-table > tbody > tr[id^="torrent-main-"]
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a.torrent-title-link
details:
selector: a.torrent-title-link
attribute: href
filters:
- name: replace
args: ["&hit=1", ""]
download:
selector: a[href^="download.php?"]
attribute: href
genre:
selector: a[data-mufaj]
attribute: data-mufaj
description:
selector: div.torrent-subtitle
filters:
- name: append
args: "{{ if .Result.genre }}</br>{{ .Result.genre }}{{ else }}{{ end }}"
imdbid:
selector: a[href*="imdb.com/title/tt"]
attribute: href
poster:
selector: a[data-poster]
attribute: data-poster
date:
selector: a[data-added]
attribute: data-added
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "yyyy-MM-dd HH:mm zzz"
size:
selector: a[data-size]
attribute: data-size
grabs:
selector: td:nth-last-child(3)
seeders:
selector: td:nth-last-child(2)
leechers:
selector: td:nth-last-child(1)
downloadvolumefactor:
text: 1
uploadvolumefactor:
text: 2
minimumratio:
text: 1.0
minimumseedtime:
# 32 hours (as seconds = 32 x 60 x 60)
text: 115200
# engine n/a

View File

@@ -39,37 +39,10 @@ caps:
- {id: 12, cat: Audio/Video, desc: "Klip/Külföldi", default: true}
- {id: 11, cat: Audio/MP3, desc: "MP3/Külföldi", default: true}
- {id: 10, cat: Audio/MP3, desc: "MP3/Magyar", default: true}
- {id: 51bithorlo, cat: Movies/SD, desc: "Cam/Eng", default: true}
- {id: 50bithorlo, cat: Movies/SD, desc: "Cam/Hun", default: true}
- {id: 2bithorlo, cat: Movies/DVD, desc: "DVD/Eng", default: true}
- {id: 1bithorlo, cat: Movies/DVD, desc: "DVD/Hun", default: true}
- {id: 42bithorlo, cat: Movies/DVD, desc: "Dvd9/Eng", default: true}
- {id: 41bithorlo, cat: Movies/DVD, desc: "Dvd9/Hun", default: true}
- {id: 40bithorlo, cat: Books, desc: "E-book/Eng", default: true}
- {id: 19bithorlo, cat: Books, desc: "E-book/Hun", default: true}
- {id: 29bithorlo, cat: Movies/HD, desc: "HD/Eng", default: true}
- {id: 28bithorlo, cat: Movies/HD, desc: "HD/Hun", default: true}
- {id: 15bithorlo, cat: PC/Games, desc: "Játék/ISO", default: true}
- {id: 38bithorlo, cat: Console, desc: "Játék/Konzol", default: true}
- {id: 37bithorlo, cat: PC/Games, desc: "Játék/Rip", default: true}
- {id: 20bithorlo, cat: Other, desc: "Képek", default: true}
- {id: 21bithorlo, cat: PC/Mobile-Other, desc: "Mobil", default: true}
- {id: 54bithorlo, cat: PC/ISO, desc: "Prog/ISO", default: true}
- {id: 23bithorlo, cat: PC/0day, desc: "Prog/Rip", default: true}
- {id: 33bithorlo, cat: TV/SD, desc: "Sorozat/Eng", default: true}
- {id: 52bithorlo, cat: TV/HD, desc: "Sorozat/Eng/HD", default: true}
- {id: 5bithorlo, cat: TV/SD, desc: "Sorozat/Hun", default: true}
- {id: 53bithorlo, cat: TV/HD, desc: "Sorozat/Hun/HD", default: true}
- {id: 4bithorlo, cat: Movies/SD, desc: "Xvid/Eng", default: true}
- {id: 3bithorlo, cat: Movies/SD, desc: "Xvid/Hun", default: true}
- {id: 12bithorlo, cat: Audio, desc: "Zene/Eng", default: true}
- {id: 13bithorlo, cat: Audio, desc: "Zene/Hun", default: true}
- {id: 16xxx, cat: XXX/DVD, desc: "XXX/DVD", default: false}
- {id: 32xxx, cat: XXX/x264, desc: "XXX/HD", default: false}
- {id: 14xxx, cat: XXX/ImageSet, desc: "XXX/Kép", default: false}
- {id: 15xxx, cat: XXX/SD, desc: "XXX/XVID", default: false}
- {id: 9bithorloxxx, cat: XXX/x264, desc: "XXX/Film, default: false"}
- {id: 10bithorloxxx, cat: XXX/ImageSet, desc: "XXX/Kép", default: false}
- {id: 16, cat: XXX/DVD, desc: "XXX/DVD", default: false}
- {id: 32, cat: XXX/x264, desc: "XXX/HD", default: false}
- {id: 14, cat: XXX/ImageSet, desc: "XXX/Kép", default: false}
- {id: 15, cat: XXX/SD, desc: "XXX/XVID", default: false}
modes:
search: [q]
@@ -79,6 +52,10 @@ caps:
book-search: [q]
settings:
- name: info_about
type: info
label: About this HunTorrent indexer
default: This indexer does not include the <b>bithorlo</b> torrent pages. Use the HunTorrent-bithorlo indexer to access those.
- name: cookie
type: text
label: Cookie
@@ -126,54 +103,33 @@ search:
# https://huntorrent.net/browse.php?&korhatar=0&incldead=1&xyz=yes&c28=1&c27=1&c6=1&c5=1&sort=4&type=desc
- path: browse.php
categories: [28, 27, 4, 3, 6, 5, 2, 1, 17, 18, 19, 25, 24, 23, 38, 26, 20, 21, 31, 9, 8, 7, 13, 12, 11, 10]
- path: browse.php
categories: [51bithorlo, 50bithorlo, 2bithorlo, 1bithorlo, 42bithorlo, 41bithorlo, 40bithorlo, 19bithorlo, 29bithorlo, 28bithorlo, 15bithorlo, 38bithorlo, 37bithorlo, 20bithorlo, 21bithorlo, 54bithorlo, 23bithorlo, 33bithorlo, 52bithorlo, 53bithorlo, 4bithorlo, 3bithorlo, 12bithorlo, 13bithorlo]
inputs:
viewMode: bithorlo
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
- path: browse.php
categories: [16xxx, 32xxx, 14xxx, 15xxx]
categories: [16, 32, 14, 15]
inputs:
viewMode: xxx
- path: browse.php
categories: [9bithorloxxx, 10bithorloxxx]
inputs:
viewMode: bithorloxxx
search: "{{ .Keywords }}"
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
xyz: yes
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# Age Limit: 0 all, 1 no, 5 6, 2 12, 3 16, 4 18
korhatar: 0
# 0 active, 1 active+dead, 2 dead, 3 my uploads, 4 waiting for seed, 7 my bookmarks, 12 reseeded by me
incldead: 1
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
# no freeleech atm
# can search by genre but you need to know the id. &mufaj[]=20 for Romantikus
rows:
selector: table.torrent-table > tbody > tr[id^="torrent-main-"]
fields:
category_view:
# browse.php?cat=9&viewMode=
# browse.php?cat=9&viewMode=xxx
# browse.php?cat=9&viewMode=bithorlo
# browse.php?cat=9&viewMode=bithorloxxx
selector: a[href^="browse.php?cat="]
attribute: href
optional: true
filters:
- name: querystring
args: viewMode
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
- name: append
args: "{{ if .Result.category_view }}{{ .Result.category_view }}{{ else }}{{ end }}"
title:
selector: a.torrent-title-link
details:

View File

@@ -0,0 +1,193 @@
---
id: infinityhd-api
name: InfinityHD (API)
description: "InfinityHD is a Private Torrent Tracker for MOVIES / TV / ANIME"
language: en-US
type: private
encoding: UTF-8
links:
- https://infinityhd.net/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: TV/Anime, desc: "Anime"}
- {id: 4, cat: Movies/Other, desc: "Anime Movie"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://infinityhd.net/\" target=\"_blank\">InfinityHD</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: 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: "Your account will be automatically disabled after 90 days of inactivity. After 120 days your account will be pruned and is permanently deleted."
login:
path: /api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.4 but torrents must be seeded for 5 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 5 days (as seconds = 5 x 24 x 60 x 60)
text: 432000
# json UNIT3D 9.1.7

View File

@@ -35,10 +35,12 @@ caps:
- {id: Anime, cat: TV/Anime, desc: Anime}
- {id: AnimeAudioLossless, cat: Audio/Lossless, desc: "Anime Audio Lossless"}
- {id: "AnimeAudio[Lossless]", cat: Audio/Lossless, desc: "Anime Audio Lossless"}
- {id: "AnimeAudio[Lossy]", cat: Audio/MP3, desc: "Anime Audio Lossy"}
- {id: AnimeEnglish-translated, cat: TV/Anime, desc: "Anime English-translated"}
- {id: "AnimeLiveAction[English-translated]", cat: TV/Anime, desc: "Anime Live Action English-translated"}
- {id: "AnimeLiveAction[Non-English]", cat: TV/Anime, desc: "Anime Live Action Non-English"}
- {id: "AnimeLiveAction[Raw]", cat: TV/Anime, desc: "Anime Live Action Raw"}
- {id: AnimePictures, cat: Other, desc: Anime Pictures}
- {id: AnimeRaw, cat: TV/Anime, desc: Anime Raw}
- {id: AnimeSubs, cat: TV/Anime, desc: Anime Subs}
- {id: Apps, cat: PC, desc: Apps}

View File

@@ -281,6 +281,7 @@ caps:
- {id: 2281, cat: PC/ISO, desc: "Web Security Dojo"}
- {id: 2246, cat: PC/ISO, desc: "Whonix"}
- {id: 2155, cat: PC/ISO, desc: "Wifislax"}
- {id: 2229, cat: PC/ISO, desc: "XiVa Studio"}
- {id: 2251, cat: PC/ISO, desc: "XigmaNAS"}
- {id: 607, cat: PC/ISO, desc: "Xubuntu"}
- {id: 612, cat: PC/ISO, desc: "Zen"}

View File

@@ -9,15 +9,12 @@ encoding: UTF-8
links:
- https://magnetcatcat.com/
- https://clmclm.com/
- https://www.8800517.xyz/
- https://www.8800518.xyz/
- https://www.8800519.xyz/
- https://www.8800520.xyz/
- https://www.8800521.xyz/
- https://www.8800522.xyz/
- https://www.8800523.xyz/
legacylinks:
- https://www.clm472.sbs/
- https://www.8800498.xyz/
- https://www.8800497.xyz/
- https://www.8800499.xyz/
- https://www.8800500.xyz/
- https://www.8800503.xyz/
- https://www.8800504.xyz/
@@ -31,6 +28,9 @@ legacylinks:
- https://www.8800514.xyz/
- https://www.8800515.xyz/
- https://www.8800516.xyz/
- https://www.8800517.xyz/
- https://www.8800518.xyz/
- https://www.8800520.xyz/
caps:
categorymappings:

View File

@@ -0,0 +1,61 @@
---
id: magnetz
name: Magnetz
description: "Magnetz is a Public torrent meta-search engine"
language: en-US
type: public
encoding: UTF-8
links:
- https://magnetz.eu/
caps:
categorymappings:
- {id: Other, cat: Other, desc: Other}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: info_category_8000
type: info_category_8000
download:
selectors:
- selector: a[href^="magnet:?xt="]
attribute: href
search:
paths:
- path: search
inputs:
query: "{{ if .Keywords }}{{ .Keywords }}{{ else }}*{{ end }}"
rows:
selector: a.list-group-item
fields:
category:
text: Other
title:
selector: h5
details:
selector: a
attribute: href
download:
selector: a
attribute: href
date:
text: now
size:
selector: small
seeders:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -26,6 +26,8 @@ settings:
- name: password
type: password
label: Password
- name: info_flaresolverr
type: info_flaresolverr
- name: info_category_8000
type: info_category_8000
- name: hidef

View File

@@ -26,6 +26,8 @@ settings:
- name: password
type: password
label: Password
- name: info_flaresolverr
type: info_flaresolverr
- name: info_category_8000
type: info_category_8000
- name: hidef

View File

@@ -709,6 +709,7 @@ caps:
# temp, archive
- {id: 892, cat: Other, desc: " |- Архив Мультфильмов"}
- {id: 91, cat: Other, desc: " |- Архив Видео. Кино, Театра"}
- {id: 150, cat: Other, desc: " |- Архив неактуальных Экранок и любого видео с Рекламой"}
- {id: 668, cat: Other, desc: " |- Архив Классики кино и Старых фильмов до 90-х"}
- {id: 1143, cat: Other, desc: " |- Архив Музыкального Видео"}
- {id: 802, cat: Other, desc: " |- Архив Сериалов и Архив Старого многосерийного кино до 90-х"}
@@ -724,6 +725,15 @@ caps:
- {id: 184, cat: Other, desc: " |- Архив КПК и Мобильных устройств"}
- {id: 1080, cat: Other, desc: " |- Архив 4Apple"}
- {id: 180, cat: Other, desc: " |- Архив Медиа-Диз-Графика"}
- {id: 145, cat: Other, desc: " |- Видео (temp)"}
- {id: 146, cat: Other, desc: " |- Аниме (temp)"}
- {id: 161, cat: Other, desc: " |- Книги (temp)"}
- {id: 147, cat: Other, desc: " |- Музыка (temp)"}
- {id: 148, cat: Other, desc: " |- Игры (temp)"}
- {id: 149, cat: Other, desc: " |- Программы (temp)"}
- {id: 183, cat: Other, desc: " |- КПК и Мобильные устройства (temp)"}
- {id: 1145, cat: Other, desc: " |- 4Apple (temp)"}
- {id: 171, cat: Other, desc: " |- Медиа-Диз-Графика (temp)"}
modes:
search: [q]

View File

@@ -8,12 +8,13 @@ description: "NorTorrent is a FRENCH Public tracker for MOVIES / TV / GENERAL"
language: fr-FR
type: public
encoding: UTF-8
# to fetch current domain use https://www.rantop.my/
# to fetch current domain use https://www.rantop.org/
links:
- https://www.nortorrent.town/
- https://nortorrent-proxy.site/
legacylinks:
# latest domains list
- https://www.rantop.my/
- https://www.rantop.org/
- https://www.site-torrent.cc/
- https://www.torrent-site.com/
# domain lists no longer working
@@ -22,9 +23,9 @@ legacylinks:
- https://www.protege-liens.com/
- https://www.protege-liens.net/
- https://www.torrent.onl/
- https://www.rantop.org/
- https://torrent9.news/
- https://www.site-torrent.com/
- https://www.rantop.my/
# actual legacylinks
- https://www.torrent9.run/
- https://www.torrent9.cv/

View File

@@ -1,178 +0,0 @@
---
id: oxtorrent-vip
replaces:
- oxtorrent
- torrent911
name: OxTorrent-vip
description: "OxTorrent-vip is a FRENCH Public site for MOVIES / TV / GENERAL"
language: fr-FR
type: public
encoding: UTF-8
# to fetch current domain use https://www.rantop.my/
links:
- https://www.oxtorrent.town/
- https://www.zone-torrent.town/
- https://www.mega-torrent.town/
legacylinks:
# latest domains list
- https://www.rantop.my/
- https://www.site-torrent.cc/
- https://www.torrent-site.com/
# domain lists no longer working
- https://www.protege-torrent.com/
- https://www.torrent.ws/
- https://www.protege-liens.com/
- https://www.protege-liens.net/
- https://www.torrent.onl/
- https://www.rantop.org/
- https://oxtorrent.blog/
- https://www.site-torrent.com/
# actual legacylinks
- https://www.zone-torrent.com/
- https://www.mega-torrent3.com/
- https://www.mega-torrent4.com/
- https://www.oxtorrent3.com/
- https://www.oxtorrent4.com/
- https://www.mega-torrent5.com/
- https://www.zone-torrent1.com/
- https://www.oxtorrent5.com/
- hhttps://www.zone-torrent2.com/
- https://www.zone-torrent2.com/
- https://www.oxtorrent7.com/
- https://www.mega-torrent6.com/
- https://www.zone-torrent3.com/
- https://www.oxtorrent8.com/
- https://www.oxtorrent.diy/
- https://www.zone-torrent.me/
- https://www.mega-torrent.net/
- https://www.oxtorrent.fyi/
- https://www.zone-torrent4.com/
- https://www.mega-torrent7.com/
- https://www.oxtorrent10.com/
caps:
categorymappings:
- {id: Films, cat: Movies, desc: "Movies"}
- {id: Animes, cat: TV/Anime, desc: "Anime"}
- {id: Documentaires, cat: TV/Documentary, desc: "Documentaires"}
- {id: Séries, cat: TV, desc: "TV"}
- {id: Musiques, cat: Audio, desc: "Music"}
- {id: Ebooks, cat: Books, desc: "Books"}
- {id: Livres, cat: Books, desc: "Livres"}
- {id: Logiciels, cat: PC, desc: "Software"}
- {id: Applications, cat: PC, desc: "Applications"}
- {id: Jeux-PC, cat: PC/Games, desc: "PC Games"}
- {id: Jeux-Consoles, cat: Console/XBox 360, desc: "Console Games"}
- {id: Porno, cat: XXX, desc: "Porno"}
- {id: Spectacles, cat: TV/Other, desc: "Spectacles"}
- {id: Sports, cat: TV/Sport, desc: "Sports"}
- {id: Formations, cat: Other, desc: "Formations"}
- {id: Vidéos, cat: TV, desc: "Vidéos"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
allowrawsearch: true
settings:
- name: multilang
type: checkbox
label: Replace MULTi by another language in release name
default: false
- name: multilanguage
type: select
label: Replace MULTi by this language
default: FRENCH
options:
FRENCH: FRENCH
MULTi FRENCH: MULTi FRENCH
ENGLISH: ENGLISH
MULTi ENGLISH: MULTi ENGLISH
VOSTFR: VOSTFR
MULTi VOSTFR: MULTi VOSTFR
- name: vostfr
type: checkbox
label: Replace VOSTFR and SUBFRENCH with ENGLISH
default: false
download:
selectors:
- selector: a[href^="magnet:?"]
attribute: href
- selector: script:contains("magnet:?")
filters:
- name: regexp
args: "\\s'(magnet:\\?.+?)';"
search:
paths:
- path: "{{ if .Keywords }}recherche/{{ .Keywords }}{{ else }}derniers{{ end }}"
keywordsfilters:
# if searching for season packs swith S01 to saison 1 #9712
- name: re_replace
args: ["(?i)(S0)(\\d{1,2})$", "saison $2"]
- name: re_replace
args: ["(?i)(S)(\\d{1,3})$", "saison $2"]
rows:
selector: table.table-hover > tbody > tr:has(td a[href])
filters:
- name: andmatch
fields:
category:
selector: td:nth-child(1) i
attribute: class
title_phase1:
selector: td:nth-child(1) a
filters:
- name: re_replace
args: ["(?i)\\b(FRENCH|MULTI|TRUEFRENCH|VOSTFR|SUBFRENCH)\\b(.+?)(\\b((19|20)\\d{2})\\b)$", "$3 $1$2"]
title_vostfr:
text: "{{ .Result.title_phase1 }}"
filters:
- name: re_replace
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
title_phase2:
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
title_multilang:
text: "{{ .Result.title_phase2 }}"
filters:
- name: re_replace
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR)))\\b", "{{ .Config.multilanguage }}"]
title:
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
details_href:
selector: td:nth-child(1) a[href]
attribute: href
optional: true
filters:
- name: regexp
args: (/?detail/\d+)
details_onclick:
selector: td:nth-child(1) a[onclick]
attribute: onclick
optional: true
filters:
- name: regexp
args: (/?detail/\d+)
details:
text: "{{ or .Result.details_href .Result.details_onclick }}"
download:
text: "{{ .Result.details }}"
size:
selector: td:nth-child(2)
date:
text: now
seeders:
selector: td:nth-child(3)
leechers:
selector: td:nth-child(4)
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -9,38 +9,38 @@ type: semi-private
encoding: windows-1251
followredirect: true
links:
- https://nov08.rudub.pics/
- https://nov23.rudub.pics/
legacylinks:
- https://oct24.rudub.homes/
- http://oct25.rudub.homes/
- https://oct25.rudub.homes/
- http://oct26.rudub.homes/
- https://oct26.rudub.homes/
- http://oct27.rudub.homes/
- https://oct27.rudub.homes/
- http://oct28.rudub.homes/
- https://oct28.rudub.homes/
- http://oct29.rudub.homes/
- https://oct29.rudub.homes/
- http://oct30.rudub.homes/
- https://oct30.rudub.homes/
- http://oct31.rudub.homes/
- https://oct31.rudub.homes/
- http://nov01.rudub.homes/
- https://nov01.rudub.homes/
- http://nov02.rudub.homes/
- https://nov02.rudub.homes/
- http://nov03.rudub.homes/
- https://nov03.rudub.homes/
- http://nov04.rudub.homes/
- https://nov04.rudub.homes/
- http://nov05.rudub.homes/
- https://nov05.rudub.homes/
- http://nov06.rudub.homes/
- https://nov06.rudub.homes/
- http://nov07.rudub.pics/
- https://nov07.rudub.pics/
- http://nov08.rudub.pics/
- https://nov08.rudub.pics/
- http://nov09.rudub.pics/
- https://nov09.rudub.pics/
- http://nov10.rudub.pics/
- https://nov10.rudub.pics/
- http://nov11.rudub.pics/
- https://nov11.rudub.pics/
- http://nov12.rudub.pics/
- https://nov12.rudub.pics/
- http://nov13.rudub.pics/
- https://nov13.rudub.pics/
- http://nov14.rudub.pics/
- https://nov14.rudub.pics/
- http://nov15.rudub.pics/
- https://nov15.rudub.pics/
- http://nov16.rudub.pics/
- https://nov16.rudub.pics/
- http://nov17.rudub.pics/
- https://nov17.rudub.pics/
- http://nov18.rudub.pics/
- https://nov18.rudub.pics/
- http://nov19.rudub.pics/
- https://nov19.rudub.pics/
- http://nov20.rudub.pics/
- https://nov20.rudub.pics/
- http://nov21.rudub.pics/
- https://nov21.rudub.pics/
- http://nov22.rudub.pics/
- https://nov22.rudub.pics/
- http://nov23.rudub.pics/
caps:
categorymappings:
- {id: 1, cat: TV, desc: "TV"}

View File

@@ -51,8 +51,10 @@ caps:
- {id: 41, cat: XXX, desc: "Homemade"}
- {id: 42, cat: XXX, desc: "Pregnant"}
- {id: 43, cat: XXX, desc: "Gay"}
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "TV Show"}
- {id: 45, cat: XXX, desc: "Classic"}
- {id: 44, cat: XXX, desc: "SiteFan"}
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
modes:
search: [q]

View File

@@ -128,7 +128,7 @@ search:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
filters:
- name: re_replace # replace special characters with " " (space)
args: ["[\\[!\"#$%&'()*+,\\-.\\/:;<=>?@[\\]^_`{|}~]", " "]
args: ["[\\[!\"#$%&'()*+,\\/:;<=>?@\\^`{|}~]", " "]
- name: diacritics
args: replace
- name: re_replace # replace multiple spaces

View File

@@ -1,175 +0,0 @@
---
id: thepiratedship
name: ThePiratedShip
description: "ThePiratedShip is a Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://thepiratedship.co.uk/
caps:
categorymappings:
# - {id: 8, cat: Movies/Other, desc: "Torrent Releases"}
# - {id: 32, cat: Movies, desc: "Movies"}
- {id: 10, cat: Movies/SD, desc: "Cams TS & TC/PPV/VOD/HDTV *Ratio Free*"}
- {id: 11, cat: Movies/SD, desc: "Screeners/R3/R5/R6/HDRip/Webrip/WEB-DL/Recodes"}
- {id: 13, cat: Movies/HD, desc: "DVDRip/BRRip/BDRip"}
- {id: 14, cat: Movies/DVD, desc: "DVDR"}
- {id: 15, cat: Movies/UHD, desc: "High Definition MKV/MP4"}
- {id: 16, cat: Movies/UHD, desc: "4k Ultra High Definition *Ratio Free*"}
- {id: 107, cat: Movies, desc: "Boxsets"}
- {id: 17, cat: Movies/Other, desc: "Movies Requests"}
# - {id: 20, cat: TV, desc: "TV Shows"}
- {id: 21, cat: TV, desc: "Sci-Fi / Supernatural / Horror"}
- {id: 22, cat: TV, desc: "Comedy"}
- {id: 23, cat: TV, desc: "Action/Adventure"}
- {id: 24, cat: TV, desc: "Drama"}
- {id: 25, cat: TV/Documentary, desc: "Documentaries"}
- {id: 26, cat: TV, desc: "Cartoons/Animation"}
- {id: 27, cat: TV/Sport, desc: "Sport TV"}
- {id: 28, cat: TV/Other, desc: "Misc TV"}
- {id: 29, cat: TV/Other, desc: "TV Shows Requests"}
# - {id: 33, cat: Audio, desc: "Music"}
- {id: 34, cat: Audio, desc: "Rock/Heavy Metal/Alternative"}
- {id: 38, cat: Audio, desc: "Album & Singles Packs"}
- {id: 35, cat: Audio, desc: "Singles"}
- {id: 36, cat: Audio, desc: "Pop albums"}
- {id: 37, cat: Audio, desc: "Trance/Dance/House"}
- {id: 39, cat: Audio, desc: "Drum & Bass/Breakbeat/Garage/Hardcore"}
- {id: 40, cat: Audio, desc: "Golden Oldies/Easy Listening"}
- {id: 41, cat: Audio, desc: "Reggae/DUB/SKA/2 Tone"}
- {id: 42, cat: Audio, desc: "Hip-Hop/RnB/Soul"}
- {id: 43, cat: Audio, desc: "Country/Folk"}
- {id: 44, cat: Audio, desc: "Jazz 'n' Blues"}
- {id: 45, cat: Audio, desc: "Classical"}
- {id: 46, cat: Audio, desc: "Soundtracks"}
- {id: 47, cat: Audio, desc: "Amateur Creations/Live DJ Sets etc/Karaoke"}
- {id: 48, cat: Audio/Video, desc: "Music DVD & Videos"}
- {id: 49, cat: Audio, desc: "Misc/Compilation albums"}
- {id: 50, cat: Audio/Lossless, desc: "Lossless Format Albums"}
# - {id: 54, cat: PC/Games, desc: "Games"}
- {id: 55, cat: PC/Games, desc: "PC Games"}
- {id: 56, cat: Console/XBox, desc: "X BOX"}
- {id: 57, cat: Console/Other, desc: "Nintendo Switch"}
- {id: 58, cat: Console/PS3, desc: "Playstation"}
- {id: 59, cat: Console/PSP, desc: "SONY PSP"}
- {id: 60, cat: Console/NDS, desc: "Nintendo DS"}
- {id: 61, cat: PC/Games, desc: "DVDR Interactive Games & Quizzes"}
- {id: 62, cat: PC/Mac, desc: "Mac & Other OS Games"}
- {id: 63, cat: Console/Other, desc: "All Other Console Roms & Emulators"}
# - {id: 67, cat: PC, desc: "Applications"}
- {id: 68, cat: PC, desc: "Artistry"}
- {id: 69, cat: PC, desc: "Internet & Web"}
- {id: 70, cat: PC, desc: "Utilities"}
- {id: 71, cat: PC, desc: "Sound & Vision"}
- {id: 72, cat: PC, desc: "Misc Applications"}
- {id: 73, cat: PC, desc: "Windows Operating Systems & MS Apps"}
- {id: 74, cat: PC, desc: "Applications Requests"}
# - {id: 97, cat: Other, desc: "Comics/Books/eBooks"}
- {id: 100, cat: Books/Comics, desc: "Comics/Magazines"}
- {id: 99, cat: Books/EBook, desc: "E Books"}
- {id: 98, cat: Audio/Audiobook, desc: "Audio Books"}
- {id: 109, cat: PC/Mobile-Other, desc: "Phone Applications"}
- {id: 103, cat: Other, desc: "Inactive Torrents"}
# - {id: 78, cat: Other, desc: "Practice Area"}
- {id: 89, cat: Other, desc: "Test"}
# undocumented
- {id: 96, cat: Movies, desc: "Animation Releases"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: info_activity
type: info
label: Account Inactivity
default: "You must login at least once a month. Also, not downloading anything is considered being inactive (except if you're an uploader or VIP). Accounts that are inactive for 30 days are deleted unless you have told staff in advance."
login:
path: index.php
method: form
form: form
inputs:
login: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: 1
_xfRedirect: ""
selectorinputs:
_xfToken:
selector: input[name="_xfToken"]
attribute: value
error:
- selector: div.blockMessage--error:contains(" not be found")
- selector: div.blockMessage--error:contains("Incorrect password")
test:
path: index.php
selector: a[href="/index.php?account/preferences"]
search:
paths:
# supports only single cat search, so defaulting to all
- path: "index.php?torrents/&freeleech={{ if .Config.freeleech }}1{{ else }}{{ end }}&filename={{ .Keywords }}"
# imdb and tmdb not supported
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: table.dataList-table > tbody.normal-torrents > tr
fields:
category:
selector: a[href^="/index.php?forums/"]
attribute: href
filters:
- name: regexp
args: (\d+)/$
title:
selector: div.structItem-title a
details:
selector: li.structItem-startDate a
attribute: href
download:
selector: a[href^="/index.php?attachments/"]
attribute: href
description:
selector: a[href^="/index.php?forums/"]
date:
selector: time
attribute: datetime
size:
selector: td:nth-last-child(4)
grabs:
selector: td:nth-last-child(3)
seeders:
selector: td:nth-last-child(2)
leechers:
selector: td:nth-last-child(1)
downloadvolumefactor:
case:
span.label--accent: 0
"*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 1.0
minimumseedtime:
# 3 day (as seconds = 3 x 24 x 60 x 60)
text: 259200
# XenForo

View File

@@ -33,30 +33,37 @@ caps:
- {id: 185, cat: TV/Documentary, desc: "TV/Documentary"}
- {id: 168, cat: TV/Other, desc: "TV/Other"}
- {id: 169, cat: TV/Other, desc: "TV/Boxset"}
- {id: 191, cat: TV, desc: "TV/BluTv"}
- {id: 192, cat: TV, desc: "TV/BluTv Series"}
- {id: 193, cat: Movies, desc: "Movies/BluTv Film"}
- {id: 188, cat: TV, desc: "TV/Netflix"}
- {id: 189, cat: TV, desc: "TV/Netflix Series"}
- {id: 190, cat: Movies, desc: "Movies/Netflix Film"}
- {id: 195, cat: TV, desc: "TV/Exxen"}
- {id: 199, cat: TV, desc: "TV/GAİN"}
- {id: 201, cat: TV, desc: "TV/Tabii"}
- {id: 171, cat: Audio, desc: "Music"}
- {id: 172, cat: Audio, desc: "Music/Turkish"}
- {id: 173, cat: Audio, desc: "Music/Foreign"}
- {id: 184, cat: Audio, desc: "Music/Discography"}
- {id: 174, cat: Audio/Video, desc: "Music/Video"}
- {id: 191, cat: TV, desc: "TV/Max"}
- {id: 192, cat: TV, desc: "TV/Max Series"}
- {id: 193, cat: Movies, desc: "Movies/Max Film"}
- {id: 188, cat: TV, desc: "TV/Netflix"}
- {id: 189, cat: TV, desc: "TV/Netflix Series"}
- {id: 190, cat: Movies, desc: "Movies/Netflix Film"}
- {id: 195, cat: TV, desc: "TV/Exxen"}
- {id: 195, cat: Movies, desc: "TV/Exxen"}
- {id: 201, cat: TV, desc: "TV/Tabii"}
- {id: 201, cat: Movies, desc: "TV/Tabii"}
- {id: 199, cat: TV, desc: "TV/GAİN"}
- {id: 199, cat: Movies, desc: "TV/GAİN"}
- {id: 200, cat: TV, desc: "Movies/Disney+"}
- {id: 200, cat: Movies, desc: "Movies/Disney+"}
- {id: 198, cat: TV, desc: "Movies/Amazon Prime"}
- {id: 198, cat: Movies, desc: "Movies/Amazon Prime"}
- {id: 202, cat: TV, desc: "TV/Apple TV+"}
- {id: 202, cat: Movies, desc: "TV/Apple TV+"}
- {id: 175, cat: PC, desc: "Apps / Game / Graphics"}
- {id: 176, cat: PC, desc: "Apps"}
- {id: 177, cat: Other, desc: "Pictures"}
- {id: 183, cat: Books/EBook, desc: "EBook"}
- {id: 178, cat: Books/Technical, desc: "Training Sets"}
- {id: 181, cat: Console, desc: "Playstation"}
- {id: 179, cat: PC, desc: "OS"}
- {id: 180, cat: PC/Games, desc: "PC/Games"}
- {id: 181, cat: Console, desc: "Playstation"}
- {id: 198, cat: Movies, desc: "Movies/Amazon Prime"}
- {id: 200, cat: Movies, desc: "Movies/Disney+"}
modes:
search: [q]

View File

@@ -7,14 +7,11 @@ type: public
encoding: UTF-8
followredirect: true
links:
- https://torrentqq393.com/
- https://torrentegg82.com/
- https://torrentqq395.com/
- https://torrentegg83.com/
legacylinks:
- https://torrentegg67.com/
- https://torrentegg68.com/
- https://torrentqq378.com/
- https://torrentegg69.com/
- https://torrentqq379.com/
- https://torrentegg70.com/
- https://torrentqq380.com/
- https://torrentegg71.com/
@@ -40,6 +37,9 @@ legacylinks:
- https://torrentqq391.com/
- https://torrentegg81.com/
- https://torrentqq392.com/
- https://torrentegg82.com/
- https://torrentqq393.com/
- https://torrentqq394.com/
caps:
categorymappings:

View File

@@ -1,126 +0,0 @@
---
id: torrentsir
name: TorrentSir
description: "TorrentSir (토렌트썰) is a Public KOREAN tracker for Korean media."
language: ko-KR
type: public
encoding: UTF-8
followredirect: true
links:
- https://torrentsir176.com/
legacylinks:
- http://torrentsir165.com/
- https://torrentsir165.com/
- http://torrentsir166.com/
- https://torrentsir166.com/
- http://torrentsir167.com/
- https://torrentsir167.com/
- http://torrentsir168.com/
- https://torrentsir168.com/
- http://torrentsir169.com/
- https://torrentsir169.com/
- http://torrentsir170.com/
- https://torrentsir170.com/
- http://torrentsir171.com/
- https://torrentsir171.com/
- http://torrentsir172.com/
- https://torrentsir172.com/
- http://torrentsir173.com/
- https://torrentsir173.com/
- http://torrentsir174.com/
- https://torrentsir174.com/
- http://torrentsir175.com/
- https://torrentsir175.com/
- http://torrentsir176.com/
caps:
categorymappings:
- {id: "gallery", cat: XXX, desc: "+19 (Adult)"}
- {id: "ani", cat: TV, desc: "동영상 (Video)"}
- {id: "game", cat: Console, desc: "기타 (Games)"}
- {id: "tv", cat: TV, desc: "시사/교양 (TV)"}
- {id: "netflix", cat: TV, desc: "넷플시리즈 (Netflix)"}
- {id: "movie", cat: Movies, desc: "영화 (Movie)"}
- {id: "drama", cat: TV, desc: "드라마 (Drama)"}
- {id: "entertain", cat: TV, desc: "예능/오락 (Entertainment)"}
- {id: "music", cat: Audio, desc: "음악 (Music)"}
- {id: "notice", cat: Other, desc: "고객센터 (Notice)"}
- {id: "child", cat: Other, desc: "고객센터 (Child)"}
- {id: "lecture", cat: Books, desc: "도서/강좌 (Books)"}
- {id: "util", cat: PC, desc: "유틸 (Software)"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: info_flaresolverr
type: info_flaresolverr
download:
infohash:
hash:
selector: a[href^="magnet:?xt="]
attribute: href
filters:
- name: regexp
args: ([A-F|a-f|0-9]{40})
title:
selector: h3.panel-title
filters:
- name: trim
- name: validfilename
search:
paths:
# https://torrentsir171.com/bbs/search.php?srows=100&gr_id=&sfl=wr_subject&stx=2025&sop=and
- path: bbs/search.php
allowEmptyInputs: true
inputs:
srows: 100
gr_id: ""
# wr_subject||wr_content, wr_subject, wr_content, mb_id, wr_name
sfl: wr_subject
stx: "{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
# or, and
sop: and
rows:
selector: div.search-media div.media
fields:
category:
selector: div.media-heading a
attribute: href
filters:
- name: querystring
args: bo_table
title:
selector: div.media-heading a
details:
selector: div.media-heading a
attribute: href
download:
selector: div.media-heading a
attribute: href
poster:
selector: div.photo img
attribute: src
date:
# 2021-01-29T20:44:20+09:00
selector: time
attribute: datetime
size:
text: "512 MB"
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -9,10 +9,8 @@ followredirect: true
requestDelay: 2
# to fetch current domain use https://tzip.top/
links:
- https://torrentsome220.com/
- https://torrentsome222.com/
legacylinks:
- https://torrentsome205.com/
- https://torrentsome206.com/
- https://torrentsome207.com/
- https://torrentsome208.com/
- https://torrentsome209.com/
@@ -26,6 +24,8 @@ legacylinks:
- https://torrentsome217.com/
- https://torrentsome218.com/
- https://torrentsome219.com/
- https://torrentsome220.com/
- https://torrentsome221.com/
caps:
categorymappings:

View File

@@ -1,135 +0,0 @@
---
id: torrentssg
name: torrentssg
description: "torrentssg (토렌트쓱) is a Public KOREAN tracker for Korean media."
language: ko-KR
type: public
encoding: UTF-8
# to fetch current domain use https://xn--sm2bw9uj0jb6a.com/
links:
- https://ssg1.torrentssg8.com/
legacylinks:
- https://torrentssg7.com/
- https://torrentssg8.com/
caps:
categorymappings:
- {id: "st01", cat: Movies, desc: "영화 (Movies)"}
- {id: "st02", cat: Movies/Foreign, desc: "해외영화 (Foreign Movies)"}
- {id: "st02_n", cat: Other, desc: "개봉예정작 (Upcoming Releases)"}
- {id: "st03", cat: XXX, desc: "성인(19+)영화 (Adult Movies)"}
- {id: "st04", cat: TV, desc: "드라마 (Drama)"}
- {id: "st05", cat: TV/Foreign, desc: "해외드라마 (Foreign Drama)"}
- {id: "st06", cat: TV, desc: "드라마완결 (Completed Drama)"}
- {id: "st07", cat: TV, desc: "예능·방송 (Entertainment)"}
- {id: "st09", cat: TV/Documentary, desc: "시사·다큐·교양 (Documentary)"}
- {id: "st10", cat: TV/Sport, desc: "스포츠 (Sport)"}
- {id: "st11", cat: TV, desc: "OTT·자막 (OTT-Subtitles)"}
# - {id: "st12", cat: Other, desc: "자막 (Subtitles)"} # these are direct text files not torrents
- {id: "st13", cat: TV/Anime, desc: "애니·만화 (Animation)"}
- {id: "st14", cat: TV/Anime, desc: "애니완결 (Completed Animation)"}
- {id: "st15", cat: TV, desc: "극장판 (Theatrical Version)"}
- {id: "st16", cat: TV, desc: "키즈 (Kids)"}
- {id: "st18", cat: Audio, desc: "음악 (Music)"}
- {id: "st19", cat: Console, desc: "게임·유틸 (Games)"}
- {id: "st20", cat: PC, desc: "유틸 (Software)"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
settings:
- name: ip_filtering
type: info
label: "IP Filtering"
default: "torrentssg (토렌트쓱) blocks Non-South Korean IP addresses. A <b>FlareSolverr</b> error means your IP was not accepted."
- name: info_flaresolverr
type: info_flaresolverr
download:
selectors:
- selector: a[href*="/bbs/download.php?"]
attribute: href
search:
paths:
# https://ssg1.torrentssg8.com/bbs/search.php?bo_table=&sca=&sop=and&sfl=wr_subject%7C%7Cwr_content&stx=2025
- path: bbs/search.php
allowEmptyInputs: true
inputs:
bo_table: ""
sca: ""
# or, and
sop: and
# wr_subject||wr_content, wr_subject, wr_content, mb_id, wr_name
sfl: "wr_subject"
stx: "{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
srows: 100
gr_id: ""
rows:
selector: div.search-media div.table-responsive table.table tbody tr:not(:has(a[href*="bo_table=st12"]))
fields:
category:
selector: td.list-img a
attribute: href
filters:
- name: querystring
args: bo_table
title:
selector: td.list-subject a
details:
selector: td.list-subject a
attribute: href
download:
selector: td.list-subject a
attribute: href
poster:
selector: img
attribute: src
size:
selector: td:nth-child(5)
filters:
- name: append
args: B
date_ago:
# time ago
selector: td:last-child:contains("전")
optional: true
filters:
- name: replace
args: ["전", " ago"]
- name: replace
args: ["초", " seconds"]
- name: replace
args: ["분", " minutes"]
- name: replace
args: ["시간", " hours"]
- name: replace
args: ["일", " days"]
- name: replace
args: ["개월", " months"]
- name: replace
args: ["년", " years"]
- name: timeago
date_month:
# 02.24
selector: td:last-child:not(:contains("전"))
optional: true
filters:
- name: dateparse
args: "MM.dd"
date:
text: "{{ if or .Result.date_ago .Result.date_month }}{{ or .Result.date_ago .Result.date_month }}{{ else }}now{{ end }}"
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -9,10 +9,8 @@ followredirect: true
requestDelay: 2
# to fetch current domain use https://tzip.top/
links:
- https://torrenttip201.top/
- https://torrenttip203.top/
legacylinks:
- https://torrenttip186.top/
- https://torrenttip187.top/
- https://torrenttip188.top/
- https://torrenttip189.top/
- https://torrenttip190.top/
@@ -26,6 +24,8 @@ legacylinks:
- https://torrenttip198.top/
- https://torrenttip199.top/
- https://torrenttip200.top/
- https://torrenttip201.top/
- https://torrenttip202.top/
caps:
categorymappings:

View File

@@ -31,10 +31,8 @@ caps:
- {id: 190, cat: Movies, desc: " |- Фильмы в 4K и 3D"}
- {id: 34, cat: Movies, desc: " |- Перевод на узбекский"}
- {id: 25, cat: Movies, desc: "Узбекские кинофильмы"}
- {id: 32, cat: Movies, desc: " |- Новинки"}
- {id: 30, cat: Movies, desc: " |- Фильмы 2011-2024 годов"}
- {id: 29, cat: Movies, desc: " |- Фильмы 2000-2010 годов"}
- {id: 26, cat: Movies, desc: " |- Фильмы до 2000 года"}
- {id: 32, cat: Movies, desc: " |- Пр-во Узбекфильм (на русском)"}
- {id: 30, cat: Movies, desc: " |- Пр-во Узбекфильм (на узбекском языке)"}
# Сериалы, Видео и ТВ # Series, Videos and TV
- {id: 97, cat: TV, desc: "Сериалы"}
- {id: 333, cat: TV, desc: " |- Игра престолов / Game of Thrones"}
@@ -85,12 +83,14 @@ caps:
- {id: 132, cat: Audio, desc: " |- Классическая музыа"}
- {id: 125, cat: Audio, desc: " |- New Age, Relax, Meditative & Flamenco"}
- {id: 124, cat: Audio, desc: " |- Фольклор, Народная и Этническая музыка"}
- {id: 338, cat: Audio, desc: " |- Country"}
- {id: 231, cat: Audio, desc: " |- Сборники и альбомы выходившие неофициальными изданиями."}
- {id: 144, cat: Audio, desc: "♫ ROCK & METAL ♫"}
- {id: 201, cat: Audio, desc: " |- Русский Rock, Metal (mp3)"}
- {id: 202, cat: Audio, desc: " |- Сборники Русского рока (mp3)"}
- {id: 323, cat: Audio, desc: " |- Русский Rock, Metal (Lossless)"}
- {id: 214, cat: Audio, desc: " |- Soft & Pop-Rock"}
- {id: 334, cat: Audio, desc: " |- Progressive & Art-Rock"}
- {id: 156, cat: Audio, desc: " |- Progressive, Art, Classic & Hard Rock"}
- {id: 213, cat: Audio, desc: " |- Melodic & Folk Rock"}
- {id: 212, cat: Audio, desc: " |- Instrumental & Guitar Rock"}
@@ -150,11 +150,13 @@ caps:
- {id: 173, cat: Books, desc: " |- Художественная литература"}
- {id: 314, cat: Books, desc: " |- Учебно-техническая литература"}
- {id: 167, cat: Books, desc: "Аудиокниги"}
- {id: 232, cat: Audio/Audiobook, desc: " |- Детективы, приключения, триллеры (Audiobook)"}
- {id: 210, cat: Audio/Audiobook, desc: " |- Романы, повести, рассказы (Audiobook)"}
- {id: 233, cat: Audio/Audiobook, desc: " |- Любовные романы (Audiobook)"}
- {id: 176, cat: Audio/Audiobook, desc: " |- Мистика, фантастика, ужасы (Audiobook)"}
- {id: 175, cat: Audio/Audiobook, desc: " |- Любовно-фантастический роман (Audiobook)"}
- {id: 335, cat: Audio/Audiobook, desc: " |- ♫ Русская литература ХХ-ХХI века"}
- {id: 232, cat: Audio/Audiobook, desc: " |- ♫ Детективы, приключения, триллеры"}
- {id: 337, cat: Audio/Audiobook, desc: " |- ♫ Детективы Дарьи Донцовой"}
- {id: 210, cat: Audio/Audiobook, desc: " |- ♫ Зарубежные авторы. Романы, повести, рассказы"}
- {id: 233, cat: Audio/Audiobook, desc: " |- Любовные романы"}
- {id: 176, cat: Audio/Audiobook, desc: " |- ♫ Мистика, фантастика, ужасы"}
- {id: 175, cat: Audio/Audiobook, desc: " |- ♫ Любовно-фантастический роман"}
- {id: 174, cat: Audio, desc: " |- Аудиокниги на других языках (Audio)"}
- {id: 319, cat: Books, desc: " |- Аудиокниги для детей"}
# Игры # Games
@@ -167,6 +169,7 @@ caps:
- {id: 289, cat: PC/Games, desc: " |- Horror"}
- {id: 307, cat: PC/Games, desc: " |- Logic"}
- {id: 304, cat: PC/Games, desc: " |- Lifestyle"}
- {id: 336, cat: PC/Games, desc: " |- Sports"}
- {id: 306, cat: PC/Games, desc: " |- Exploration"}
- {id: 305, cat: PC/Games, desc: " |- Management"}
- {id: 115, cat: PC/Games, desc: " |- Аркады"}

View File

@@ -8,8 +8,8 @@ encoding: UTF-8
requestDelay: 2.5 # 2.5 requests per second (2 causes problems)
links:
# if the primary domain changes then don't forget to update the details, download and poster replace args
- https://yts.mx/
# official domain list are at https://yifystatus.com/ and official proxies list are at https://ytsproxies.com/
- https://yts.lt/
# official domain list are at https://yifystatus.com/ and official proxies list are at https://ytsproxies.com/
- https://yts.unblockninja.com/
- https://yts.ninjaproxy1.com/
- https://yts.proxyninja.org/
@@ -17,9 +17,9 @@ links:
- https://yts.torrentbay.st/
- https://yts.torrentsbay.org/
legacylinks:
- https://yts.lt/
- https://yts.am/
- https://yts.ag/
- https://yts.mx/
- https://yts.mrunblock.bond/
- https://yts.nocensor.cloud/
- https://yts.unblockit.download/
@@ -104,19 +104,19 @@ search:
selector: ..url
filters:
- name: re_replace
args: ["^https?:\\/\\/yts\\.mx\\/", "{{ .Config.sitelink }}"] # fix for 12494
args: ["^https?:\\/\\/yts\\.(mx|lt)\\/", "{{ .Config.sitelink }}"] # fix for 12494
download:
selector: url
filters:
- name: re_replace
args: ["^https?:\\/\\/yts\\.mx\\/", "{{ .Config.sitelink }}"] # fix for 12494
args: ["^https?:\\/\\/yts\\.(mx|lt)\\/", "{{ .Config.sitelink }}"] # fix for 12494
infohash:
selector: hash
poster:
selector: ..large_cover_image
filters:
- name: re_replace
args: ["^https?:\\/\\/yts\\.mx\\/", "{{ .Config.sitelink }}"] # fix for 12494
args: ["^https?:\\/\\/yts\\.(mx|lt)\\/", "{{ .Config.sitelink }}"] # fix for 12494
imdbid:
selector: ..imdb_code
date:

View File

@@ -5,12 +5,13 @@ description: "zetorrents is a FRENCH Public site for MOVIES / TV / GENERAL"
language: fr-FR
type: public
encoding: UTF-8
# to fetch current domain use https://www.rantop.my/
# to fetch current domain use https://www.rantop.org/
links:
- https://www.zetorrents.town/
- https://zetorrents-proxy.site/
legacylinks:
# latest domains list
- https://www.rantop.my/
- https://www.rantop.org/
- https://www.site-torrent.cc/
- https://www.torrent-site.com/
# domain lists no longer working
@@ -19,8 +20,8 @@ legacylinks:
- https://www.protege-liens.com/
- https://www.protege-liens.net/
- https://www.torrent.onl/
- https://www.rantop.org/
- https://www.site-torrent.com/
- https://www.rantop.my/
# actual legacylinks
- https://www.zetorrents.nl/
- https://www.zetorrents.biz/
@@ -80,7 +81,7 @@ download:
search:
paths:
- path: "{{ if .Keywords }}recherche/{{ .Keywords }}{{ else }}home{{ end }}"
- path: "{{ if .Keywords }}recherche/{{ .Keywords }}{{ else }}{{ end }}"
keywordsfilters:
# if searching for season packs swith S01 to saison 1 #9712
- name: re_replace

View File

@@ -7,12 +7,13 @@ description: "ZkTorrent is a FRENCH Public site for MOVIES / TV / GENERAL"
language: fr-FR
type: public
encoding: UTF-8
# to fetch current domain use https://www.rantop.my/
# to fetch current domain use https://www.rantop.org/
links:
- https://www.zktorrent.town/
- https://zktorrent-proxy.site/
legacylinks:
# latest domains list
- https://www.rantop.my/
- https://www.rantop.org/
- https://www.site-torrent.cc/
- https://www.torrent-site.com/
# domain lists no longer working
@@ -21,9 +22,9 @@ legacylinks:
- https://www.protege-liens.com/
- https://www.protege-liens.net/
- https://www.torrent.onl/
- https://www.rantop.org/
- https://gktorrent.news/
- https://www.site-torrent.com/
- https://www.rantop.my/
# actual legacylinks
- https://www.gktorrent.si/
- https://www.gktorrent.my/
@@ -100,7 +101,7 @@ download:
search:
paths:
- path: "{{ if .Keywords }}recherche/{{ .Keywords }}{{ else }}home{{ end }}"
- path: "{{ if .Keywords }}recherche/{{ .Keywords }}{{ else }}{{ end }}"
keywordsfilters:
# if searching for season packs swith S01 to saison 1 #9712
- name: re_replace

View File

@@ -6,9 +6,10 @@ language: hu-HU
type: semi-private
encoding: ISO-8859-2
links:
- http://ztracker.cc/ # site does not support https invalid certificate
- https://ztracker.cc/
legacylinks:
- http://ztracker.org/
- http://ztracker.cc/
caps:
categorymappings:

View File

@@ -0,0 +1,34 @@
using System.Security.Cryptography;
using System.Text;
namespace Jackett.Common.Extensions
{
public static class HashingExtensions
{
public static string SHA1Hash(this string input)
{
using var hash = SHA1.Create();
return GetHash(hash.ComputeHash(Encoding.UTF8.GetBytes(input)));
}
public static string SHA256Hash(this string input)
{
using var hash = SHA256.Create();
return GetHash(hash.ComputeHash(Encoding.UTF8.GetBytes(input)));
}
private static string GetHash(byte[] bytes)
{
var stringBuilder = new StringBuilder();
foreach (var b in bytes)
{
stringBuilder.Append(b.ToString("x2"));
}
return stringBuilder.ToString();
}
}
}

View File

@@ -104,7 +104,7 @@ namespace Jackett.Common.Indexers.Definitions
var maxPages = 2; // we scrape only 2 pages for recent torrents
if (!string.IsNullOrWhiteSpace(query.GetQueryString()))
{
searchString = Uri.EscapeUriString(query.GetQueryString());
searchString = Uri.EscapeDataString(query.GetQueryString());
maxPages = MaxSearchPageLimit;
}

View File

@@ -163,15 +163,18 @@ namespace Jackett.Common.Indexers.Definitions
{
throw new Exception("Error, the Download link at the requested path does not exist.");
}
var wmDoc = new HtmlParser().ParseDocument(wmPage.ContentString);
var wmHtmlParser = new HtmlParser();
var wmDoc = await wmHtmlParser.ParseDocumentAsync(wmPage.ContentString);
var enlacitoUrl = wmDoc.QuerySelector(".app-message a:not(.buttonPassword)")?.GetAttribute("href");
var enlacitoPage = await RequestWithCookiesAndRetryAsync(enlacitoUrl, referer: SiteLink);
var enlacitoDoc = new HtmlParser().ParseDocument(enlacitoPage.ContentString);
var enlacitoHtmlParser = new HtmlParser();
var enlacitoDoc = await enlacitoHtmlParser.ParseDocumentAsync(enlacitoPage.ContentString);
var enlacitoFormUrl = enlacitoDoc.QuerySelector("form").GetAttribute("action");
var enlacitoFormLinkser = enlacitoDoc.QuerySelector("input[name=\"linkser\"]").GetAttribute("value");
var body = new Dictionary<string, string>
{
{ "linkser", enlacitoFormLinkser }
@@ -182,7 +185,7 @@ namespace Jackett.Common.Indexers.Definitions
var linkOut = v.Groups[1].ToString();
var slink = Encoding.UTF8.GetString(Convert.FromBase64String(linkOut));
var ulink = OpenSSLDecrypt(slink, TorrentLinkEncryptionKey);
var ulink = await OpenSSLDecryptAsync(slink, TorrentLinkEncryptionKey);
var result = await RequestWithCookiesAndRetryAsync(ulink);
return result.ContentBytes;
@@ -463,7 +466,7 @@ namespace Jackett.Common.Indexers.Definitions
}
// Thanks to https://stackoverflow.com/a/5454692/2078070 !!!
private string OpenSSLDecrypt(string encrypted, string passphrase)
private async Task<string> OpenSSLDecryptAsync(string encrypted, string passphrase)
{
// base 64 decode
var encryptedBytesWithSalt = Convert.FromBase64String(encrypted);
@@ -477,7 +480,7 @@ namespace Jackett.Common.Indexers.Definitions
// get key and iv
DeriveKeyAndIV(passphrase, salt, out var key, out var iv);
return DecryptStringFromBytesAes(encryptedBytes, key, iv);
return await DecryptStringFromBytesAesAsync(encryptedBytes, key, iv);
}
private void DeriveKeyAndIV(string passphrase, byte[] salt, out byte[] key, out byte[] iv)
@@ -518,7 +521,7 @@ namespace Jackett.Common.Indexers.Definitions
md5 = null;
}
private string DecryptStringFromBytesAes(byte[] cipherText, byte[] key, byte[] iv)
private static async Task<string> DecryptStringFromBytesAesAsync(byte[] cipherText, byte[] key, byte[] iv)
{
if (cipherText == null || cipherText.Length <= 0)
{
@@ -535,44 +538,17 @@ namespace Jackett.Common.Indexers.Definitions
throw new ArgumentNullException(nameof(iv));
}
// Declare the RijndaelManaged object
// used to decrypt the data.
RijndaelManaged aesAlg = null;
using var aesAlg = Aes.Create();
aesAlg.Key = key;
aesAlg.IV = iv;
// Declare the string used to hold
// the decrypted text.
string plaintext;
var decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
try
{
// Create a RijndaelManaged object
// with the specified key and IV.
aesAlg = new RijndaelManaged { Mode = CipherMode.CBC, KeySize = 256, BlockSize = 128, Key = key, IV = iv };
using var msDecrypt = new MemoryStream(cipherText);
using var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
using var srDecrypt = new StreamReader(csDecrypt);
// Create a decrytor to perform the stream transform.
var decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
// Create the streams used for decryption.
using (var msDecrypt = new MemoryStream(cipherText))
{
using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (var srDecrypt = new StreamReader(csDecrypt))
{
// Read the decrypted bytes from the decrypting stream
// and place them in a string.
plaintext = srDecrypt.ReadToEnd();
srDecrypt.Close();
}
}
}
}
finally
{
// Clear the RijndaelManaged object.
aesAlg?.Clear();
}
return plaintext;
return await srDecrypt.ReadToEndAsync();
}
}

View File

@@ -4,12 +4,11 @@ using System.Collections.Specialized;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using AngleSharp.Html.Parser;
using Jackett.Common.Extensions;
using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig;
using Jackett.Common.Services.Interfaces;
@@ -253,11 +252,13 @@ namespace Jackett.Common.Indexers.Definitions
if (string.IsNullOrWhiteSpace(sessionId))
throw new ExceptionWithConfigData("Error getting the Session ID", configData);
await Task.Delay(3000);
// The second page send the login with the hash
// The hash is reverse engineering from https://www.zonaq.pw/retorno/2/smf/Themes/smf_ZQ/scripts/script.js
// doForm.hash_passwrd.value = hex_sha1(hex_sha1(doForm.user.value.php_to8bit().php_strtolower() + doForm.passwrd.value.php_to8bit()) + cur_session_id);
Thread.Sleep(3000);
var hashPassword = Sha1Hash(Sha1Hash(configData.Username.Value.ToLower() + configData.Password.Value) + sessionId);
var hashPassword = $"{(configData.Username.Value.ToLowerInvariant() + configData.Password.Value).SHA1Hash()}{sessionId}".SHA1Hash();
var pairs = new Dictionary<string, string> {
{ "user", configData.Username.Value },
{ "passwrd", configData.Password.Value },
@@ -288,11 +289,5 @@ namespace Jackett.Common.Indexers.Definitions
Thread.Sleep(3000);
await RequestWithCookiesAsync(Login4Url);
}
private static string Sha1Hash(string input)
{
var hash = new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(input));
return string.Concat(hash.Select(b => b.ToString("x2")));
}
}
}

View File

@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFrameworks>netstandard2.0;net9.0</TargetFrameworks>
<Version>0.0.0</Version>
<LangVersion>9</LangVersion>
<NoWarn />
@@ -10,7 +10,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AngleSharp" Version="1.3.0" />
<PackageReference Include="AngleSharp" Version="1.3.1" />
<PackageReference Include="AngleSharp.Xml" Version="1.0.0" />
<PackageReference Include="Autofac" Version="8.0.0" />
<PackageReference Include="BencodeNET" Version="4.0.0" />
@@ -23,12 +23,12 @@
<PackageReference Include="MimeMapping" Version="1.0.1.50" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
<PackageReference Include="NLog" Version="5.4.0" />
<PackageReference Include="Polly" Version="8.6.3" />
<PackageReference Include="Polly" Version="8.6.4" />
<PackageReference Include="SharpZipLib" Version="1.4.2" />
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="9.0.9" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.9" />
<PackageReference Include="System.Text.Json" Version="9.0.9" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="9.0.11" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.11" />
<PackageReference Include="System.Text.Json" Version="9.0.11" />
<PackageReference Include="YamlDotNet" Version="16.3.0" />
</ItemGroup>

View File

@@ -1,13 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using Jackett.Common.Extensions;
using Jackett.Common.Indexers;
using Jackett.Common.Models;
using Jackett.Common.Models.Config;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils;
using Newtonsoft.Json;
using NLog;
@@ -36,8 +34,7 @@ namespace Jackett.Common.Services
{
private readonly Logger _logger;
private readonly ServerConfig _serverConfig;
private readonly SHA256Managed _sha256 = new SHA256Managed();
private readonly Dictionary<string, TrackerCache> _cache = new Dictionary<string, TrackerCache>();
private readonly Dictionary<string, TrackerCache> _cache = new();
public CacheService(Logger logger, ServerConfig serverConfig)
{
@@ -236,11 +233,11 @@ namespace Jackett.Common.Services
}
}
private string GetQueryHash(TorznabQuery query)
private static string GetQueryHash(TorznabQuery query)
{
var json = GetSerializedQuery(query);
// Compute the hash
return BitConverter.ToString(_sha256.ComputeHash(Encoding.UTF8.GetBytes(json)));
return json.SHA256Hash();
}
private static string GetSerializedQuery(TorznabQuery query)

View File

@@ -51,7 +51,8 @@ namespace Jackett.Common.Services
if (!Directory.Exists(GetAppDataFolder()))
{
var dir = Directory.CreateDirectory(GetAppDataFolder());
if (Environment.OSVersion.Platform != PlatformID.Unix)
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
var access = dir.GetAccessControl();
var directorySecurity = new DirectorySecurity(GetAppDataFolder(), AccessControlSections.All);
@@ -126,7 +127,7 @@ namespace Jackett.Common.Services
if (!Directory.Exists(destFolder))
{
var dir = Directory.CreateDirectory(destFolder);
if (Environment.OSVersion.Platform != PlatformID.Unix)
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
var directorySecurity = new DirectorySecurity(destFolder, AccessControlSections.All);
directorySecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));
@@ -137,7 +138,7 @@ namespace Jackett.Common.Services
{
File.Copy(file, destPath);
// The old files were created when running as admin so make sure they are editable by normal users / services.
if (Environment.OSVersion.Platform != PlatformID.Unix)
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
var fileInfo = new FileInfo(destFolder);
var fileSecurity = new FileSecurity(destPath, AccessControlSections.All);

View File

@@ -74,8 +74,6 @@ namespace Jackett.Common.Services
}
}
private bool AcceptCert(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) => true;
private async Task CheckForUpdates()
{
logger.Info($"Checking for updates... Jackett variant: {variant}");
@@ -180,14 +178,7 @@ namespace Jackett.Common.Services
}
catch (Exception e)
{
logger.Error($"Error checking for updates.\n{e}");
}
finally
{
if (!isWindows)
{
System.Net.ServicePointManager.ServerCertificateValidationCallback -= AcceptCert;
}
logger.Error(e, $"Error checking for updates.\n{e}");
}
}

View File

@@ -2,6 +2,7 @@ using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.Versioning;
using System.ServiceProcess;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils;
@@ -9,6 +10,9 @@ using NLog;
namespace Jackett.Common.Services
{
#if NET5_0_OR_GREATER
[SupportedOSPlatform("windows")]
#endif
public class WindowsServiceConfigService : IServiceConfigService
{
private const string NAME = "Jackett";

View File

@@ -29,8 +29,13 @@ namespace Jackett.Common.Utils.Clients
}
[DebuggerNonUserCode] // avoid "Exception User-Unhandled" Visual Studio messages
public static bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
public bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (serverConfig.RuntimeSettings.IgnoreSslErrors == true)
{
return true;
}
if (sender.GetType() != typeof(HttpWebRequest))
return sslPolicyErrors == SslPolicyErrors.None;
@@ -51,24 +56,11 @@ namespace Jackett.Common.Utils.Clients
public override void SetTimeout(int seconds) => ClientTimeout = seconds;
public override void Init()
{
base.Init();
// custom handler for our own internal certificates
if (serverConfig.RuntimeSettings.IgnoreSslErrors == true)
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
else
ServicePointManager.ServerCertificateValidationCallback += ValidateCertificate;
}
protected override async Task<WebResult> Run(WebRequest webRequest)
{
ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072;
var cookies = new CookieContainer
{
PerDomainCapacity = 100 // By default only 20 cookies are allowed per domain
PerDomainCapacity = 100 // By default, only 20 cookies are allowed per domain
};
if (!string.IsNullOrWhiteSpace(webRequest.Cookies))
{
@@ -86,14 +78,17 @@ namespace Jackett.Common.Utils.Clients
clearanceHandlr.ProxyUrl = serverConfig.GetProxyUrl(false);
clearanceHandlr.ProxyUsername = serverConfig.ProxyUsername;
clearanceHandlr.ProxyPassword = serverConfig.ProxyPassword;
using (var clientHandlr = new HttpClientHandler
{
CookieContainer = cookies,
AllowAutoRedirect = false, // Do not use this - Bugs ahoy! Lost cookies and more.
UseCookies = true,
Proxy = webProxy,
UseProxy = (webProxy != null),
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
UseProxy = webProxy != null,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
MaxConnectionsPerServer = 20,
ServerCertificateCustomValidationCallback = ValidateCertificate,
})
{
clearanceHandlr.InnerHandler = clientHandlr;

View File

@@ -33,14 +33,19 @@ namespace Jackett.Common.Utils.Clients
{
cookies = new CookieContainer
{
PerDomainCapacity = 100 // By default only 20 cookies are allowed per domain
PerDomainCapacity = 100 // By default, only 20 cookies are allowed per domain
};
CreateClient();
}
[DebuggerNonUserCode] // avoid "Exception User-Unhandled" Visual Studio messages
public static bool ValidateCertificate(HttpRequestMessage request, X509Certificate2 certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
public bool ValidateCertificate(HttpRequestMessage request, X509Certificate2 certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (serverConfig.RuntimeSettings.IgnoreSslErrors == true)
{
return true;
}
var hash = certificate.GetCertHashString();
trustedCertificates.TryGetValue(hash, out var hosts);
@@ -70,16 +75,12 @@ namespace Jackett.Common.Utils.Clients
AllowAutoRedirect = false, // Do not use this - Bugs ahoy! Lost cookies and more.
UseCookies = true,
Proxy = webProxy,
UseProxy = (webProxy != null),
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
UseProxy = webProxy != null,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
MaxConnectionsPerServer = 20,
ServerCertificateCustomValidationCallback = ValidateCertificate,
};
// custom certificate validation handler (netcore version)
if (serverConfig.RuntimeSettings.IgnoreSslErrors == true)
clientHandlr.ServerCertificateCustomValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
else
clientHandlr.ServerCertificateCustomValidationCallback = ValidateCertificate;
clearanceHandlr.InnerHandler = clientHandlr;
client = new HttpClient(clearanceHandlr);
@@ -103,13 +104,6 @@ namespace Jackett.Common.Utils.Clients
client.Timeout = TimeSpan.FromSeconds(ClientTimeout);
}
public override void Init()
{
base.Init();
ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072;
}
protected override async Task<WebResult> Run(WebRequest webRequest)
{
var request = new HttpRequestMessage();

View File

@@ -220,11 +220,7 @@ namespace Jackett.Common.Utils.Clients
return result;
}
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
protected virtual async Task<WebResult> Run(WebRequest webRequest) => throw new NotImplementedException();
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
public virtual void Init() => ServicePointManager.DefaultConnectionLimit = 1000;
protected virtual Task<WebResult> Run(WebRequest webRequest) => throw new NotImplementedException();
public virtual void OnCompleted() => throw new NotImplementedException();

View File

@@ -1,4 +1,5 @@
using System;
using System.Runtime.InteropServices;
using System.Security.Principal;
using Jackett.Common.Utils.Clients;
@@ -75,7 +76,11 @@ namespace Jackett.Common.Utils
public static bool IsUserAdministrator()
{
//bool value to hold our return value
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
return false;
}
bool isAdmin;
try
{

View File

@@ -1,104 +0,0 @@
using System;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace Jackett.Common.Utils
{
public static class StringCipher
{
// This constant is used to determine the keysize of the encryption algorithm in bits.
// We divide this by 8 within the code below to get the equivalent number of bytes.
private const int Keysize = 256;
// This constant determines the number of iterations for the password bytes generation function.
private const int DerivationIterations = 1000;
public static string Encrypt(string plainText, string passPhrase)
{
// Salt and IV is randomly generated each time, but is preprended to encrypted cipher text
// so that the same Salt and IV values can be used when decrypting.
var saltStringBytes = Generate256BitsOfRandomEntropy();
var ivStringBytes = Generate256BitsOfRandomEntropy();
var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
using (var password = new Rfc2898DeriveBytes(passPhrase, saltStringBytes, DerivationIterations))
{
var keyBytes = password.GetBytes(Keysize / 8);
using (var symmetricKey = new RijndaelManaged())
{
symmetricKey.BlockSize = 256;
symmetricKey.Mode = CipherMode.CBC;
symmetricKey.Padding = PaddingMode.PKCS7;
using (var encryptor = symmetricKey.CreateEncryptor(keyBytes, ivStringBytes))
{
using (var memoryStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();
// Create the final bytes as a concatenation of the random salt bytes, the random iv bytes and the cipher bytes.
var cipherTextBytes = saltStringBytes;
cipherTextBytes = cipherTextBytes.Concat(ivStringBytes).ToArray();
cipherTextBytes = cipherTextBytes.Concat(memoryStream.ToArray()).ToArray();
memoryStream.Close();
cryptoStream.Close();
return Convert.ToBase64String(cipherTextBytes);
}
}
}
}
}
}
public static string Decrypt(string cipherText, string passPhrase)
{
// Get the complete stream of bytes that represent:
// [32 bytes of Salt] + [32 bytes of IV] + [n bytes of CipherText]
var cipherTextBytesWithSaltAndIv = Convert.FromBase64String(cipherText);
// Get the saltbytes by extracting the first 32 bytes from the supplied cipherText bytes.
var saltStringBytes = cipherTextBytesWithSaltAndIv.Take(Keysize / 8).ToArray();
// Get the IV bytes by extracting the next 32 bytes from the supplied cipherText bytes.
var ivStringBytes = cipherTextBytesWithSaltAndIv.Skip(Keysize / 8).Take(Keysize / 8).ToArray();
// Get the actual cipher text bytes by removing the first 64 bytes from the cipherText string.
var cipherTextBytes = cipherTextBytesWithSaltAndIv.Skip((Keysize / 8) * 2).Take(cipherTextBytesWithSaltAndIv.Length - ((Keysize / 8) * 2)).ToArray();
using (var password = new Rfc2898DeriveBytes(passPhrase, saltStringBytes, DerivationIterations))
{
var keyBytes = password.GetBytes(Keysize / 8);
using (var symmetricKey = new RijndaelManaged())
{
symmetricKey.BlockSize = 256;
symmetricKey.Mode = CipherMode.CBC;
symmetricKey.Padding = PaddingMode.PKCS7;
using (var decryptor = symmetricKey.CreateDecryptor(keyBytes, ivStringBytes))
{
using (var memoryStream = new MemoryStream(cipherTextBytes))
{
using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
{
var plainTextBytes = new byte[cipherTextBytes.Length];
var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
memoryStream.Close();
cryptoStream.Close();
return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
}
}
}
}
}
}
private static byte[] Generate256BitsOfRandomEntropy()
{
var randomBytes = new byte[32]; // 32 Bytes will give us 256 bits.
using (var rngCsp = new RNGCryptoServiceProvider())
{
// Fill the array with cryptographically secure random bytes.
rngCsp.GetBytes(randomBytes);
}
return randomBytes;
}
}
}

View File

@@ -189,16 +189,11 @@ namespace Jackett.Common.Utils
{
var chars = "abcdefghijklmnopqrstuvwxyz0123456789";
var randBytes = new byte[length];
using (var rngCsp = new RNGCryptoServiceProvider())
{
rngCsp.GetBytes(randBytes);
var key = "";
foreach (var b in randBytes)
{
key += chars[b % chars.Length];
}
return key;
}
using var rngCsp = RandomNumberGenerator.Create();
rngCsp.GetBytes(randBytes);
return randBytes.Aggregate(string.Empty, (current, b) => current + chars[b % chars.Length]);
}
public static IEnumerable<int> AllIndexesOf(this string source, char value)

View File

@@ -35,9 +35,9 @@
<!-- Conditionally obtain references for the .NET 9.0 target -->
<ItemGroup Condition=" '$(TargetFramework)' == 'net9.0' ">
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="9.0.9" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.9" />
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="9.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="9.0.11" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.11" />
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="9.0.11" />
</ItemGroup>
<!-- Conditionally obtain references for the .NET471 target -->
@@ -59,8 +59,8 @@
<PackageReference Include="Mono.Posix" Version="7.1.0-final.1.21458.1" />
<PackageReference Include="NLog" Version="5.4.0" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.4.0" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="9.0.9" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.9" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="9.0.11" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.11" />
</ItemGroup>
<ItemGroup>

View File

@@ -29,9 +29,7 @@ namespace Jackett.Server.Services
return null;
var ue = new UnicodeEncoding();
#pragma warning disable SYSLIB0021
var hashString = new SHA512Managed();
#pragma warning restore SYSLIB0021
var hashString = SHA512.Create();
// Append key as salt
input += _serverConfig.APIKey;

View File

@@ -341,7 +341,6 @@ namespace Jackett.Server.Services
// Load indexers
indexerService.InitIndexers(configService.GetCardigannDefinitionsFolders());
client.Init();
updater.CleanupTempDir();
updater.CheckUpdaterLock();

View File

@@ -25,14 +25,14 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="FluentAssertions" Version="6.12.1" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="9.0.9" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="9.0.11" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="MSTest.TestAdapter" Version="3.10.4" />
<PackageReference Include="MSTest.TestFramework" Version="3.10.4" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit.ConsoleRunner" Version="3.17.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.9" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.11" />
</ItemGroup>
<ItemGroup>

View File

@@ -48,9 +48,5 @@ namespace Jackett.Test.TestHelpers
});
throw new Exception($"You have to mock the URL {request.Url} with RegisterRequestCallback");
}
public override void Init()
{
}
}
}

View File

@@ -2,6 +2,7 @@ using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using CommandLine;
using CommandLine.Text;
using Jackett.Common.Models.Config;
@@ -15,7 +16,6 @@ namespace Jackett.Updater
public class Program
{
private IProcessService processService;
private IServiceConfigService windowsService;
public static Logger logger;
private Variants.JackettVariant variant = Variants.JackettVariant.NotFound;
@@ -27,7 +27,7 @@ namespace Jackett.Updater
private void Run(string[] args)
{
var runtimeSettings = new RuntimeSettings()
var runtimeSettings = new RuntimeSettings
{
CustomLogFileName = "updater.txt"
};
@@ -42,7 +42,8 @@ namespace Jackett.Updater
variant = variants.GetVariant();
logger.Info("Jackett variant: " + variant.ToString());
var isWindows = Environment.OSVersion.Platform == PlatformID.Win32NT;
var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
if (isWindows)
{
//The updater starts before Jackett closes
@@ -51,18 +52,13 @@ namespace Jackett.Updater
}
processService = new ProcessService(logger);
windowsService = new WindowsServiceConfigService(processService, logger);
var commandLineParser = new Parser(settings => settings.CaseSensitive = false);
try
{
var optionsResult = commandLineParser.ParseArguments<UpdaterConsoleOptions>(args);
optionsResult.WithParsed(options =>
{
ProcessUpdate(options);
}
);
optionsResult.WithParsed(ProcessUpdate);
optionsResult.WithNotParsed(errors =>
{
logger.Error(HelpText.AutoBuild(optionsResult));
@@ -135,10 +131,10 @@ namespace Jackett.Updater
if (options.KillPids != null)
{
var pidsStr = options.KillPids.Split(',').Where(pid => !string.IsNullOrWhiteSpace(pid)).ToArray();
pids = Array.ConvertAll(pidsStr, pid => int.Parse(pid));
pids = Array.ConvertAll(pidsStr, int.Parse);
}
var isWindows = Environment.OSVersion.Platform == PlatformID.Win32NT;
var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
var trayRunning = false;
var trayProcesses = Process.GetProcessesByName("JackettTray");
if (isWindows)
@@ -610,6 +606,7 @@ namespace Jackett.Updater
"Definitions/onlyscene.yml",
"Definitions/ostwiki.yml",
"Definitions/oxtorrent.yml",
"Definitions/oxtorrent-vip.yml",
"Definitions/p2pelite.yml",
"Definitions/pandahd.yml",
"Definitions/parabellumhd.yml",
@@ -736,6 +733,7 @@ namespace Jackett.Updater
"Definitions/theleachzone.yml", // switch to *-API #11185
"Definitions/the-madhouse.yml",
"Definitions/themoviecave.yml",
"Definitions/thepiratedship.yml",
"Definitions/therebels-api.yml",
"Definitions/theresurrection.yml",
"Definitions/thesceneplace.yml",
@@ -781,7 +779,9 @@ namespace Jackett.Updater
"Definitions/torrentseed.yml", // renamed to latinop2p #9065
"Definitions/torrentseeds.yml",
"Definitions/torrentseeds-api.yml",
"Definitions/torrentsir.yml",
"Definitions/torrentsmd.yml",
"Definitions/torrentssg.yml",
"Definitions/torrent-town.yml",
"Definitions/torrentslocal.yml",
"Definitions/torrentsurf.yml", // renamed xtremebytes #9951
@@ -893,7 +893,9 @@ namespace Jackett.Updater
// kill pids after the update on UNIX
if (!isWindows)
{
KillPids(pids);
}
if (!options.NoRestart)
{
@@ -909,6 +911,8 @@ namespace Jackett.Updater
logger.Info("Starting Tray: " + startInfo.FileName + " " + startInfo.Arguments);
Process.Start(startInfo);
var windowsService = new WindowsServiceConfigService(processService, logger);
if (!windowsService.ServiceExists())
{
//User was running the tray icon, but not using the Windows service, starting Tray icon will start JackettConsole as well
@@ -916,10 +920,12 @@ namespace Jackett.Updater
}
}
if (string.Equals(options.Type, "WindowsService", StringComparison.OrdinalIgnoreCase))
if (isWindows && string.Equals(options.Type, "WindowsService", StringComparison.OrdinalIgnoreCase))
{
logger.Info("Starting Windows service");
var windowsService = new WindowsServiceConfigService(processService, logger);
try
{
windowsService.Start();