mirror of
https://github.com/Jackett/Jackett.git
synced 2025-12-21 13:52:16 +01:00
Compare commits
71 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0b12640d58 | ||
|
|
5329125950 | ||
|
|
7128e0c599 | ||
|
|
6f9a2caa18 | ||
|
|
e98fad4f73 | ||
|
|
2eb76ffb86 | ||
|
|
4ffc9f06c9 | ||
|
|
14912bba09 | ||
|
|
bb2c8e6c6a | ||
|
|
c4c91cc462 | ||
|
|
fd036ecef9 | ||
|
|
72c28319f3 | ||
|
|
d255e83756 | ||
|
|
a41c45b7d3 | ||
|
|
83d11a58cb | ||
|
|
fbadc4f3a9 | ||
|
|
7bf35bda8f | ||
|
|
f65df4e45d | ||
|
|
da3f84527d | ||
|
|
b915e815e9 | ||
|
|
1ef7dcf457 | ||
|
|
9eb52b76ca | ||
|
|
55cae3657e | ||
|
|
953e3cf701 | ||
|
|
7a7c00c562 | ||
|
|
7d39938af6 | ||
|
|
47d815c805 | ||
|
|
0300942a8f | ||
|
|
0ba21e3f18 | ||
|
|
008b995df4 | ||
|
|
7dd8e247c8 | ||
|
|
c408c6880c | ||
|
|
68aa4184e0 | ||
|
|
0407b15c1b | ||
|
|
27240bcfed | ||
|
|
a3f0131156 | ||
|
|
5924a4fd22 | ||
|
|
296c218308 | ||
|
|
bce1689bfe | ||
|
|
d0d4dcf11d | ||
|
|
5a1f9e4af9 | ||
|
|
a2946ca903 | ||
|
|
a2c881a968 | ||
|
|
25ae101654 | ||
|
|
b9c2f8ad5d | ||
|
|
ba39c8ad5b | ||
|
|
a45770f541 | ||
|
|
ba565e0376 | ||
|
|
649d53f857 | ||
|
|
f612345fac | ||
|
|
d8607ee0f2 | ||
|
|
8c84bed209 | ||
|
|
655448fb74 | ||
|
|
15049a4efb | ||
|
|
a90ed2601a | ||
|
|
fa71356666 | ||
|
|
12ffb4cbe7 | ||
|
|
b67f59e865 | ||
|
|
d51dda4434 | ||
|
|
70666c459b | ||
|
|
60b7c7860b | ||
|
|
fc343b336f | ||
|
|
8cacbcc9b9 | ||
|
|
e48a20f93d | ||
|
|
5d2c64711f | ||
|
|
a76becef3a | ||
|
|
82c7900f77 | ||
|
|
3984af24fd | ||
|
|
375fc86937 | ||
|
|
3d99aa3863 | ||
|
|
5e48f764aa |
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -6,6 +6,7 @@
|
||||
|
||||
# Declare files that will always have LF line endings on checkout.
|
||||
*.yml text eol=lf
|
||||
*.sh text eol=lf
|
||||
|
||||
# Declare files that will always have CRLF line endings on checkout.
|
||||
*.cs text eol=crlf
|
||||
|
||||
37
README.md
37
README.md
@@ -27,7 +27,10 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* AudioBookBay
|
||||
* BTstor.net
|
||||
* btbit
|
||||
* BTKitty
|
||||
* cpasbien
|
||||
* cpasbienClone
|
||||
* DIGBT
|
||||
* ETTV
|
||||
* EliteTorrent.biz
|
||||
* ExtraTorrent.ag
|
||||
@@ -45,6 +48,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* LimeTorrents
|
||||
* MagnetDL
|
||||
* MejorTorrent <!-- maintained by ivandelabeldad -->
|
||||
* Monova
|
||||
* Newpct (aka: tvsinpagar, descargas2020, torrentlocura, torrentrapid, tumejortorrent, pctnew, etc)
|
||||
* Nyaa.si
|
||||
* Nyaa-Pantsu
|
||||
@@ -52,6 +56,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* ProStyleX
|
||||
* RARBG
|
||||
* RuTor
|
||||
* shokweb
|
||||
* ShowRSS
|
||||
* SkyTorrentsClone
|
||||
* sukebei.Nyaa.si
|
||||
@@ -62,21 +67,27 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* Torlock
|
||||
* TorrentCouch
|
||||
* Torrent Downloads
|
||||
* TorrentFunk
|
||||
* TorrentGalaxy.org
|
||||
* TorrentKitty
|
||||
* Torrent9
|
||||
* Torernt9 clone (torrents9.ch)
|
||||
* Torrentz2
|
||||
* Torrof
|
||||
* World Wide Torrents
|
||||
* YTS.ag
|
||||
* Zooqle
|
||||
|
||||
### Supported Semi-Private Trackers
|
||||
* 7tor
|
||||
* Alein
|
||||
* ArenaBG
|
||||
* CzTorrent
|
||||
* Deildu
|
||||
* Film-Paleis
|
||||
* Gay-Torrents.net
|
||||
* Gay-Torrents.org
|
||||
* GDF76
|
||||
* Kinozal
|
||||
* LostFilm.tv
|
||||
* Mega-Bliz
|
||||
@@ -90,6 +101,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* RuTracker
|
||||
* SkTorrent
|
||||
* Union Fansub
|
||||
* Vanila
|
||||
* Xtreme Zone
|
||||
* YggTorrent
|
||||
* Ztracker
|
||||
@@ -97,6 +109,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
### Supported Private Trackers
|
||||
* 2 Fast 4 You
|
||||
* 3D Torrents
|
||||
* 3evils
|
||||
* 420files
|
||||
* 720pier
|
||||
* Abnormal
|
||||
@@ -141,6 +154,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* BTNext (BTNT)
|
||||
* BTXpress (BTX)
|
||||
* Carpathians
|
||||
* CasStudioTV
|
||||
* CCFBits
|
||||
* CGPeers
|
||||
* CHDBits
|
||||
@@ -190,7 +204,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* HD-Torrents (HDT)
|
||||
* HD-Bits.com
|
||||
* HDBits
|
||||
* HDChina
|
||||
* HDChina (HDWing)
|
||||
* HDCity
|
||||
* HDHome (HDBigger)
|
||||
* HDME
|
||||
@@ -238,8 +252,10 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* Pretome
|
||||
* PrivateHD (PHD)
|
||||
* Psytorrents
|
||||
* PT99
|
||||
* PTFiles
|
||||
* PuntoTorrent
|
||||
* PWTorrents (PWT)
|
||||
* Racing4Everyone (R4E)
|
||||
* Redacted (PassTheHeadphones)
|
||||
* Red Star Torrent
|
||||
@@ -266,6 +282,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* SportsCult
|
||||
* SportHD
|
||||
* Superbits
|
||||
* TakeaByte
|
||||
* Tasmanit
|
||||
* TBPlus
|
||||
* TenYardTracker
|
||||
@@ -310,6 +327,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
|
||||
* x-ite.me (XM)
|
||||
* xBytesV2
|
||||
* XSpeeds
|
||||
* XWTorrents (XWT)
|
||||
* Xthor
|
||||
* ExoticaZ (Your Exotic Torrents)
|
||||
* Zamunda.net
|
||||
@@ -454,14 +472,27 @@ To use it, please just request a free API key on [OMDb](http://www.omdbapi.com/a
|
||||
Please supply as much information about the problem you are experiencing as possible. Your issue has a much greater chance of being resolved if logs are supplied so that we can see what is going on. Creating an issue with '### isn't working' doesn't help anyone to fix the problem.
|
||||
|
||||
## Contributing
|
||||
All contributions are welcome just send a pull request. Jackett's framework allows our team (and any other volunteering dev) to implement new trackers in an hour or two. If you'd like support for a new tracker but are not a developer then feel free to leave a request on the [issues page](https://github.com/Jackett/Jackett/issues). It is recommended to use Visual Studio 2017 when making code changes in this project. You can download the community version for free [here](https://www.visualstudio.com/downloads/).
|
||||
|
||||
Jackett's framework typically allows our team and volunteering developers to implement new trackers in a couple of hours
|
||||
|
||||
Depending on logic complexity, there are two common ways new trackers are implemented:
|
||||
|
||||
1. simple [definitions](http://github.com/Jackett/Jackett/tree/master/src/Jackett.Common/Definitions) (.yml / YAML), and;
|
||||
2. advanced (native) [indexers](http://github.com/Jackett/Jackett/tree/master/src/Jackett.Common/Indexers) (.cs / C#)
|
||||
|
||||
Read more about the [simple definition format](https://github.com/Jackett/Jackett/wiki/Definition-format).
|
||||
|
||||
If you are a developer then it's recommended to download the free community version of [Visual Studio](http://visualstudio.com)
|
||||
|
||||
If you are not a developer and would like a (new) tracker supported then feel free to leave an [issue](https://github.com/Jackett/Jackett/issues) request.
|
||||
|
||||
All contributions are welcome just send a pull request.
|
||||
|
||||
## Building from source
|
||||
|
||||
### Windows
|
||||
* Install the .NET Core [SDK](https://www.microsoft.com/net/download/windows)
|
||||
* Open the Jackett solution in Visual Studio 2017 (version 15.7 or above)
|
||||
* Open the Jackett solution in Visual Studio 2017 (version 15.9 or above)
|
||||
* Right click on the Jackett solution and click 'Rebuild Solution' to restore nuget packages
|
||||
* Select Jackett.Server as startup project
|
||||
* In the drop down menu of the run button select "Jackett.Server" instead of "IIS Express"
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
version: 0.10.{build}
|
||||
skip_tags: true
|
||||
image: Visual Studio 2017
|
||||
image:
|
||||
- Visual Studio 2017
|
||||
- Ubuntu
|
||||
environment:
|
||||
APPVEYOR_YML_DISABLE_PS_LINUX: true
|
||||
configuration: Release
|
||||
assembly_info:
|
||||
patch: true
|
||||
@@ -17,7 +21,8 @@ dotnet_csproj:
|
||||
file_version: '{version}'
|
||||
informational_version: '{version}'
|
||||
build_script:
|
||||
- ps: .\build.ps1
|
||||
- ps: .\build.ps1 --target=Default
|
||||
- sh: ./build.sh --target=Linux
|
||||
test: off
|
||||
before_deploy:
|
||||
- ps: ${env:release_description} = ( Get-Content -LiteralPath BuildOutput/ReleaseNotes.txt -Encoding UTF8 ) -join "`n";
|
||||
|
||||
222
build.cake
222
build.cake
@@ -16,6 +16,7 @@ var configuration = Argument("configuration", "Debug");
|
||||
var workingDir = MakeAbsolute(Directory("./"));
|
||||
var artifactsDirName = "Artifacts";
|
||||
var testResultsDirName = "TestResults";
|
||||
var netCoreFramework = "netcoreapp2.2";
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// TASKS
|
||||
@@ -25,8 +26,17 @@ Task("Info")
|
||||
.Does(() =>
|
||||
{
|
||||
Information(@"Jackett Cake build script starting...");
|
||||
Information(@"Requires InnoSetup and C:\cygwin to be present for packaging (Pre-installed on AppVeyor)");
|
||||
Information(@"Requires InnoSetup and C:\cygwin to be present for packaging (Pre-installed on AppVeyor) on Windows");
|
||||
Information(@"Working directory is: " + workingDir);
|
||||
|
||||
if (IsRunningOnWindows())
|
||||
{
|
||||
Information("Platform is Windows");
|
||||
}
|
||||
else
|
||||
{
|
||||
Information("Platform is Linux, Windows builds will be skipped");
|
||||
}
|
||||
});
|
||||
|
||||
Task("Clean")
|
||||
@@ -39,6 +49,8 @@ Task("Clean")
|
||||
CleanDirectories("./" + artifactsDirName);
|
||||
CleanDirectories("./" + testResultsDirName);
|
||||
|
||||
CreateDirectory("./" + artifactsDirName);
|
||||
|
||||
Information("Clean completed");
|
||||
});
|
||||
|
||||
@@ -67,41 +79,26 @@ Task("Run-Unit-Tests")
|
||||
Results = new[] { new NUnit3Result { FileName = resultsFile } }
|
||||
});
|
||||
|
||||
if(AppVeyor.IsRunningOnAppVeyor)
|
||||
if (AppVeyor.IsRunningOnAppVeyor && IsRunningOnWindows())
|
||||
{
|
||||
AppVeyor.UploadTestResults(resultsFile, AppVeyorTestResultsType.NUnit3);
|
||||
}
|
||||
});
|
||||
|
||||
Task("Check-Packaging-Platform")
|
||||
Task("Package-Windows-Full-Framework")
|
||||
.IsDependentOn("Run-Unit-Tests")
|
||||
.Does(() =>
|
||||
{
|
||||
if (IsRunningOnWindows())
|
||||
{
|
||||
CreateDirectory("./" + artifactsDirName);
|
||||
Information("Platform is Windows");
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Packaging is currently only implemented for a Windows environment");
|
||||
}
|
||||
});
|
||||
|
||||
Task("Package-Windows-Full-Framework")
|
||||
.IsDependentOn("Check-Packaging-Platform")
|
||||
.Does(() =>
|
||||
{
|
||||
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
|
||||
string buildOutputPath = "./BuildOutput/Experimental/net461/win7-x86/Jackett";
|
||||
string buildOutputPath = "./BuildOutput/net461/win7-x86/Jackett";
|
||||
|
||||
DotNetCorePublish(serverProjectPath, "net461", "win7-x86");
|
||||
DotNetCorePublish(serverProjectPath, "net461", "win7-x86", buildOutputPath);
|
||||
|
||||
CopyFiles("./src/Jackett.Service/bin/" + configuration + "/JackettService.*", buildOutputPath);
|
||||
CopyFiles("./src/Jackett.Tray/bin/" + configuration + "/JackettTray.*", buildOutputPath);
|
||||
CopyFiles("./src/Jackett.Updater/bin/" + configuration + "/net461" + "/JackettUpdater.*", buildOutputPath); //builds against multiple frameworks
|
||||
|
||||
Zip("./BuildOutput/Experimental/net461/win7-x86", $"./{artifactsDirName}/Jackett.Binaries.Windows.zip");
|
||||
Zip("./BuildOutput/net461/win7-x86", $"./{artifactsDirName}/Jackett.Binaries.Windows.zip");
|
||||
|
||||
//InnoSetup
|
||||
string sourceFolder = MakeAbsolute(Directory(buildOutputPath)).ToString();
|
||||
@@ -119,16 +116,20 @@ Task("Package-Windows-Full-Framework")
|
||||
});
|
||||
|
||||
Task("Package-Mono-Full-Framework")
|
||||
.IsDependentOn("Check-Packaging-Platform")
|
||||
.IsDependentOn("Run-Unit-Tests")
|
||||
.Does(() =>
|
||||
{
|
||||
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
|
||||
string buildOutputPath = "./BuildOutput/Experimental/net461/linux-x64/Jackett";
|
||||
string buildOutputPath = "./BuildOutput/net461/linux-x64/Jackett";
|
||||
|
||||
DotNetCorePublish(serverProjectPath, "net461", "linux-x64");
|
||||
DotNetCorePublish(serverProjectPath, "net461", "linux-x64", buildOutputPath);
|
||||
|
||||
CopyFiles("./src/Jackett.Updater/bin/" + configuration + "/net461" + "/JackettUpdater.*", buildOutputPath); //builds against multiple frameworks
|
||||
|
||||
CopyFileToDirectory("./install_service_macos", buildOutputPath);
|
||||
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
|
||||
CopyFileToDirectory("./Upstart.config", buildOutputPath);
|
||||
|
||||
//There is an issue with Mono 5.8 (fixed in Mono 5.12) where its expecting to use its own patched version of System.Net.Http.dll, instead of the version supplied in folder
|
||||
//https://github.com/dotnet/corefx/issues/19914
|
||||
//https://bugzilla.xamarin.com/show_bug.cgi?id=60315
|
||||
@@ -145,40 +146,77 @@ Task("Package-Mono-Full-Framework")
|
||||
|
||||
DeleteFile(buildOutputPath + "/System.Runtime.InteropServices.RuntimeInformation.dll");
|
||||
|
||||
Gzip("./BuildOutput/Experimental/net461/linux-x64", $"./{artifactsDirName}", "Jackett", "Jackett.Binaries.Mono.tar.gz");
|
||||
Gzip("./BuildOutput/net461/linux-x64", $"./{artifactsDirName}", "Jackett", "Jackett.Binaries.Mono.tar.gz");
|
||||
});
|
||||
|
||||
Task("Experimental-DotNetCore")
|
||||
.IsDependentOn("Check-Packaging-Platform")
|
||||
|
||||
Task("Package-DotNetCore-macOS")
|
||||
.IsDependentOn("Clean")
|
||||
.Does(() =>
|
||||
{
|
||||
string runtimeId = "osx-x64";
|
||||
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
|
||||
|
||||
DotNetCorePublish(serverProjectPath, "netcoreapp2.2", "win-x86");
|
||||
DotNetCorePublish(serverProjectPath, "netcoreapp2.2", "osx-x64");
|
||||
DotNetCorePublish(serverProjectPath, "netcoreapp2.2", "linux-x64");
|
||||
DotNetCorePublish(serverProjectPath, "netcoreapp2.2", "linux-arm");
|
||||
string buildOutputPath = $"./BuildOutput/{netCoreFramework}/{runtimeId}/Jackett";
|
||||
|
||||
Zip("./BuildOutput/Experimental/netcoreapp2.2/win-x86", $"./{artifactsDirName}/Experimental.netcoreapp.win-x86.zip");
|
||||
Zip("./BuildOutput/Experimental/netcoreapp2.2/osx-x64", $"./{artifactsDirName}/Experimental.netcoreapp.osx-x64.zip");
|
||||
Gzip("./BuildOutput/Experimental/netcoreapp2.2/linux-x64", $"./{artifactsDirName}", "Jackett", "Experimental.netcoreapp.linux-x64.tar.gz");
|
||||
Gzip("./BuildOutput/Experimental/netcoreapp2.2/linux-arm", $"./{artifactsDirName}", "Jackett", "Experimental.netcoreapp.linux-arm.tar.gz");
|
||||
DotNetCorePublish(serverProjectPath, netCoreFramework, runtimeId, buildOutputPath);
|
||||
|
||||
CopyFileToDirectory("./install_service_macos", buildOutputPath);
|
||||
|
||||
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Experimental.Jackett.Binaries.macOS.tar.gz");
|
||||
});
|
||||
|
||||
Task("Package")
|
||||
.IsDependentOn("Package-Windows-Full-Framework")
|
||||
.IsDependentOn("Package-Mono-Full-Framework")
|
||||
.IsDependentOn("Experimental-DotNetCore")
|
||||
Task("Package-DotNetCore-LinuxAMD64")
|
||||
.IsDependentOn("Clean")
|
||||
.Does(() =>
|
||||
{
|
||||
Information("Packaging completed");
|
||||
string runtimeId = "linux-x64";
|
||||
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
|
||||
string buildOutputPath = $"./BuildOutput/{netCoreFramework}/{runtimeId}/Jackett";
|
||||
|
||||
DotNetCorePublish(serverProjectPath, netCoreFramework, runtimeId, buildOutputPath);
|
||||
|
||||
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
|
||||
CopyFileToDirectory("./Upstart.config", buildOutputPath);
|
||||
|
||||
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Experimental.Jackett.Binaries.LinuxAMD64.tar.gz");
|
||||
});
|
||||
|
||||
Task("Package-DotNetCore-LinuxARM32")
|
||||
.IsDependentOn("Clean")
|
||||
.Does(() =>
|
||||
{
|
||||
string runtimeId = "linux-arm";
|
||||
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
|
||||
string buildOutputPath = $"./BuildOutput/{netCoreFramework}/{runtimeId}/Jackett";
|
||||
|
||||
DotNetCorePublish(serverProjectPath, netCoreFramework, runtimeId, buildOutputPath);
|
||||
|
||||
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
|
||||
CopyFileToDirectory("./Upstart.config", buildOutputPath);
|
||||
|
||||
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Experimental.Jackett.Binaries.LinuxARM32.tar.gz");
|
||||
});
|
||||
|
||||
Task("Package-DotNetCore-LinuxARM64")
|
||||
.IsDependentOn("Clean")
|
||||
.Does(() =>
|
||||
{
|
||||
string runtimeId = "linux-arm64";
|
||||
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
|
||||
string buildOutputPath = $"./BuildOutput/{netCoreFramework}/{runtimeId}/Jackett";
|
||||
|
||||
DotNetCorePublish(serverProjectPath, netCoreFramework, runtimeId, buildOutputPath);
|
||||
|
||||
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
|
||||
CopyFileToDirectory("./Upstart.config", buildOutputPath);
|
||||
|
||||
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Experimental.Jackett.Binaries.LinuxARM64.tar.gz");
|
||||
});
|
||||
|
||||
Task("Appveyor-Push-Artifacts")
|
||||
.IsDependentOn("Package")
|
||||
.IsDependentOn("Clean")
|
||||
.Does(() =>
|
||||
{
|
||||
if (AppVeyor.IsRunningOnAppVeyor)
|
||||
if (AppVeyor.IsRunningOnAppVeyor && IsRunningOnWindows())
|
||||
{
|
||||
foreach (var file in GetFiles(workingDir + $"/{artifactsDirName}/*"))
|
||||
{
|
||||
@@ -187,12 +225,12 @@ Task("Appveyor-Push-Artifacts")
|
||||
}
|
||||
else
|
||||
{
|
||||
Information(@"Skipping as not running in AppVeyor Environment");
|
||||
Information(@"Skipping artifact push as not running in AppVeyor Windows Environment");
|
||||
}
|
||||
});
|
||||
|
||||
Task("Release-Notes")
|
||||
.IsDependentOn("Appveyor-Push-Artifacts")
|
||||
.IsDependentOn("Clean")
|
||||
.Does(() =>
|
||||
{
|
||||
string latestTag = GitDescribe(".", false, GitDescribeStrategy.Tags, 0);
|
||||
@@ -230,7 +268,7 @@ Task("Release-Notes")
|
||||
string buildNote = String.Join(Environment.NewLine, notesList);
|
||||
Information(buildNote);
|
||||
|
||||
System.IO.File.WriteAllLines(workingDir + "\\BuildOutput\\ReleaseNotes.txt", notesList.ToArray());
|
||||
System.IO.File.WriteAllLines(workingDir + "/BuildOutput/ReleaseNotes.txt", notesList.ToArray());
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -239,6 +277,32 @@ Task("Release-Notes")
|
||||
|
||||
});
|
||||
|
||||
Task("Windows-Environment")
|
||||
.IsDependentOn("Package-Windows-Full-Framework")
|
||||
.IsDependentOn("Package-Mono-Full-Framework")
|
||||
.IsDependentOn("Package-DotNetCore-macOS")
|
||||
.IsDependentOn("Package-DotNetCore-LinuxAMD64")
|
||||
.IsDependentOn("Package-DotNetCore-LinuxARM32")
|
||||
.IsDependentOn("Package-DotNetCore-LinuxARM64")
|
||||
.IsDependentOn("Appveyor-Push-Artifacts")
|
||||
.IsDependentOn("Release-Notes")
|
||||
.Does(() =>
|
||||
{
|
||||
Information("Windows-Environment Task Completed");
|
||||
});
|
||||
|
||||
Task("Linux-Environment")
|
||||
.IsDependentOn("Package-DotNetCore-macOS")
|
||||
.IsDependentOn("Package-DotNetCore-LinuxAMD64")
|
||||
.IsDependentOn("Package-DotNetCore-LinuxARM32")
|
||||
.IsDependentOn("Package-DotNetCore-LinuxARM64")
|
||||
.IsDependentOn("Appveyor-Push-Artifacts")
|
||||
.IsDependentOn("Release-Notes")
|
||||
.Does(() =>
|
||||
{
|
||||
Information("Linux-Environment Task Completed");
|
||||
});
|
||||
|
||||
|
||||
private void RunCygwinCommand(string utility, string utilityArguments)
|
||||
{
|
||||
@@ -285,29 +349,52 @@ private string RelativeWinPathToCygPath(string relativePath)
|
||||
return cygPath;
|
||||
}
|
||||
|
||||
private void Gzip(string sourceFolder, string outputDirectory, string tarCdirectoryOption, string outputFileName)
|
||||
private void RunLinuxCommand(string file, string arg)
|
||||
{
|
||||
var cygSourcePath = RelativeWinPathToCygPath(sourceFolder);
|
||||
var tarFileName = outputFileName.Remove(outputFileName.Length - 3, 3);
|
||||
var tarArguments = @"-cvf " + cygSourcePath + "/" + tarFileName + " -C " + cygSourcePath + $" {tarCdirectoryOption} --mode ='755'";
|
||||
var gzipArguments = @"-k " + cygSourcePath + "/" + tarFileName;
|
||||
var startInfo = new System.Diagnostics.ProcessStartInfo()
|
||||
{
|
||||
Arguments = arg,
|
||||
FileName = file,
|
||||
UseShellExecute = true
|
||||
};
|
||||
|
||||
RunCygwinCommand("Tar", tarArguments);
|
||||
RunCygwinCommand("Gzip", gzipArguments);
|
||||
|
||||
MoveFile($"{sourceFolder}/{tarFileName}.gz", $"{outputDirectory}/{tarFileName}.gz");
|
||||
var process = System.Diagnostics.Process.Start(startInfo);
|
||||
process.WaitForExit();
|
||||
}
|
||||
|
||||
private void DotNetCorePublish(string projectPath, string framework, string runtime)
|
||||
private void Gzip(string sourceFolder, string outputDirectory, string tarCdirectoryOption, string outputFileName)
|
||||
{
|
||||
var tarFileName = outputFileName.Remove(outputFileName.Length - 3, 3);
|
||||
|
||||
if (IsRunningOnWindows())
|
||||
{
|
||||
var cygSourcePath = RelativeWinPathToCygPath(sourceFolder);
|
||||
var tarArguments = @"-cvf " + cygSourcePath + "/" + tarFileName + " -C " + cygSourcePath + $" {tarCdirectoryOption} --mode ='755'";
|
||||
var gzipArguments = @"-k " + cygSourcePath + "/" + tarFileName;
|
||||
|
||||
RunCygwinCommand("Tar", tarArguments);
|
||||
RunCygwinCommand("Gzip", gzipArguments);
|
||||
MoveFile($"{sourceFolder}/{tarFileName}.gz", $"{outputDirectory}/{tarFileName}.gz");
|
||||
}
|
||||
else
|
||||
{
|
||||
RunLinuxCommand("find", MakeAbsolute(Directory(sourceFolder)) + @" -type d -exec chmod 755 {} \;");
|
||||
RunLinuxCommand("find", MakeAbsolute(Directory(sourceFolder)) + @" -type f -exec chmod 644 {} \;");
|
||||
//RunLinuxCommand("chmod", $"755 {MakeAbsolute(Directory(sourceFolder))} /Jackett/jackett");
|
||||
RunLinuxCommand("tar", $"-C {sourceFolder} -zcvf {outputDirectory}/{tarFileName}.gz {tarCdirectoryOption}");
|
||||
}
|
||||
}
|
||||
|
||||
private void DotNetCorePublish(string projectPath, string framework, string runtime, string outputPath)
|
||||
{
|
||||
var settings = new DotNetCorePublishSettings
|
||||
{
|
||||
Framework = framework,
|
||||
Runtime = runtime,
|
||||
OutputDirectory = $"./BuildOutput/Experimental/{framework}/{runtime}/Jackett"
|
||||
};
|
||||
{
|
||||
Framework = framework,
|
||||
Runtime = runtime,
|
||||
OutputDirectory = outputPath
|
||||
};
|
||||
|
||||
DotNetCorePublish(projectPath, settings);
|
||||
DotNetCorePublish(projectPath, settings);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
@@ -315,12 +402,19 @@ private void DotNetCorePublish(string projectPath, string framework, string runt
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
Task("Default")
|
||||
.IsDependentOn("Release-Notes")
|
||||
.IsDependentOn("Windows-Environment")
|
||||
.Does(() =>
|
||||
{
|
||||
Information("Default Task Completed");
|
||||
});
|
||||
|
||||
Task("Linux")
|
||||
.IsDependentOn("Linux-Environment")
|
||||
.Does(() =>
|
||||
{
|
||||
Information("Linux Task Completed");
|
||||
});
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// EXECUTION
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
31
build.ps1
31
build.ps1
@@ -25,10 +25,6 @@ Specifies the amount of information to be displayed.
|
||||
Shows description about tasks.
|
||||
.PARAMETER DryRun
|
||||
Performs a dry run.
|
||||
.PARAMETER Experimental
|
||||
Uses the nightly builds of the Roslyn script engine.
|
||||
.PARAMETER Mono
|
||||
Uses the Mono Compiler rather than the Roslyn script engine.
|
||||
.PARAMETER SkipToolPackageRestore
|
||||
Skips restoring of packages.
|
||||
.PARAMETER ScriptArgs
|
||||
@@ -49,13 +45,25 @@ Param(
|
||||
[switch]$ShowDescription,
|
||||
[Alias("WhatIf", "Noop")]
|
||||
[switch]$DryRun,
|
||||
[switch]$Experimental,
|
||||
[switch]$Mono,
|
||||
[switch]$SkipToolPackageRestore,
|
||||
[Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
|
||||
[string[]]$ScriptArgs
|
||||
)
|
||||
|
||||
# Attempt to set highest encryption available for SecurityProtocol.
|
||||
# PowerShell will not set this by default (until maybe .NET 4.6.x). This
|
||||
# will typically produce a message for PowerShell v2 (just an info
|
||||
# message though)
|
||||
try {
|
||||
# Set TLS 1.2 (3072), then TLS 1.1 (768), then TLS 1.0 (192), finally SSL 3.0 (48)
|
||||
# Use integers because the enumeration values for TLS 1.2 and TLS 1.1 won't
|
||||
# exist in .NET 4.0, even though they are addressable if .NET 4.5+ is
|
||||
# installed (.NET 4.5 is an in-place upgrade).
|
||||
[System.Net.ServicePointManager]::SecurityProtocol = 3072 -bor 768 -bor 192 -bor 48
|
||||
} catch {
|
||||
Write-Output 'Unable to set PowerShell to use TLS 1.2 and TLS 1.1 due to old .NET Framework installed. If you see underlying connection closed or trust errors, you may need to upgrade to .NET Framework 4.5+ and PowerShell v3'
|
||||
}
|
||||
|
||||
[Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null
|
||||
function MD5HashFile([string] $filePath)
|
||||
{
|
||||
@@ -85,7 +93,7 @@ function GetProxyEnabledWebClient
|
||||
{
|
||||
$wc = New-Object System.Net.WebClient
|
||||
$proxy = [System.Net.WebRequest]::GetSystemWebProxy()
|
||||
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
|
||||
$proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
|
||||
$wc.Proxy = $proxy
|
||||
return $wc
|
||||
}
|
||||
@@ -115,10 +123,11 @@ if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) {
|
||||
|
||||
# Make sure that packages.config exist.
|
||||
if (!(Test-Path $PACKAGES_CONFIG)) {
|
||||
Write-Verbose -Message "Downloading packages.config..."
|
||||
try {
|
||||
Write-Verbose -Message "Downloading packages.config..."
|
||||
try {
|
||||
$wc = GetProxyEnabledWebClient
|
||||
$wc.DownloadFile("https://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch {
|
||||
$wc.DownloadFile("https://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG)
|
||||
} catch {
|
||||
Throw "Could not download packages.config."
|
||||
}
|
||||
}
|
||||
@@ -225,8 +234,6 @@ if ($Configuration) { $cakeArguments += "-configuration=$Configuration" }
|
||||
if ($Verbosity) { $cakeArguments += "-verbosity=$Verbosity" }
|
||||
if ($ShowDescription) { $cakeArguments += "-showdescription" }
|
||||
if ($DryRun) { $cakeArguments += "-dryrun" }
|
||||
if ($Experimental) { $cakeArguments += "-experimental" }
|
||||
if ($Mono) { $cakeArguments += "-mono" }
|
||||
$cakeArguments += $ScriptArgs
|
||||
|
||||
# Start Cake
|
||||
|
||||
117
build.sh
Executable file
117
build.sh
Executable file
@@ -0,0 +1,117 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
##########################################################################
|
||||
# This is the Cake bootstrapper script for Linux and OS X.
|
||||
# This file was downloaded from https://github.com/cake-build/resources
|
||||
# Feel free to change this file to fit your needs.
|
||||
##########################################################################
|
||||
|
||||
# Define directories.
|
||||
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
||||
TOOLS_DIR=$SCRIPT_DIR/tools
|
||||
ADDINS_DIR=$TOOLS_DIR/Addins
|
||||
MODULES_DIR=$TOOLS_DIR/Modules
|
||||
NUGET_EXE=$TOOLS_DIR/nuget.exe
|
||||
CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe
|
||||
PACKAGES_CONFIG=$TOOLS_DIR/packages.config
|
||||
PACKAGES_CONFIG_MD5=$TOOLS_DIR/packages.config.md5sum
|
||||
ADDINS_PACKAGES_CONFIG=$ADDINS_DIR/packages.config
|
||||
MODULES_PACKAGES_CONFIG=$MODULES_DIR/packages.config
|
||||
|
||||
# Define md5sum or md5 depending on Linux/OSX
|
||||
MD5_EXE=
|
||||
if [[ "$(uname -s)" == "Darwin" ]]; then
|
||||
MD5_EXE="md5 -r"
|
||||
else
|
||||
MD5_EXE="md5sum"
|
||||
fi
|
||||
|
||||
# Define default arguments.
|
||||
SCRIPT="build.cake"
|
||||
CAKE_ARGUMENTS=()
|
||||
|
||||
# Parse arguments.
|
||||
for i in "$@"; do
|
||||
case $1 in
|
||||
-s|--script) SCRIPT="$2"; shift ;;
|
||||
--) shift; CAKE_ARGUMENTS+=("$@"); break ;;
|
||||
*) CAKE_ARGUMENTS+=("$1") ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# Make sure the tools folder exist.
|
||||
if [ ! -d "$TOOLS_DIR" ]; then
|
||||
mkdir "$TOOLS_DIR"
|
||||
fi
|
||||
|
||||
# Make sure that packages.config exist.
|
||||
if [ ! -f "$TOOLS_DIR/packages.config" ]; then
|
||||
echo "Downloading packages.config..."
|
||||
curl -Lsfo "$TOOLS_DIR/packages.config" https://cakebuild.net/download/bootstrapper/packages
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "An error occurred while downloading packages.config."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Download NuGet if it does not exist.
|
||||
if [ ! -f "$NUGET_EXE" ]; then
|
||||
echo "Downloading NuGet..."
|
||||
curl -Lsfo "$NUGET_EXE" https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "An error occurred while downloading nuget.exe."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Restore tools from NuGet.
|
||||
pushd "$TOOLS_DIR" >/dev/null
|
||||
if [ ! -f "$PACKAGES_CONFIG_MD5" ] || [ "$( cat "$PACKAGES_CONFIG_MD5" | sed 's/\r$//' )" != "$( $MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' )" ]; then
|
||||
find . -type d ! -name . ! -name 'Cake.Bakery' | xargs rm -rf
|
||||
fi
|
||||
|
||||
mono "$NUGET_EXE" install -ExcludeVersion
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Could not restore NuGet tools."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
$MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' >| "$PACKAGES_CONFIG_MD5"
|
||||
|
||||
popd >/dev/null
|
||||
|
||||
# Restore addins from NuGet.
|
||||
if [ -f "$ADDINS_PACKAGES_CONFIG" ]; then
|
||||
pushd "$ADDINS_DIR" >/dev/null
|
||||
|
||||
mono "$NUGET_EXE" install -ExcludeVersion
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Could not restore NuGet addins."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
popd >/dev/null
|
||||
fi
|
||||
|
||||
# Restore modules from NuGet.
|
||||
if [ -f "$MODULES_PACKAGES_CONFIG" ]; then
|
||||
pushd "$MODULES_DIR" >/dev/null
|
||||
|
||||
mono "$NUGET_EXE" install -ExcludeVersion
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Could not restore NuGet modules."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
popd >/dev/null
|
||||
fi
|
||||
|
||||
# Make sure that Cake has been installed.
|
||||
if [ ! -f "$CAKE_EXE" ]; then
|
||||
echo "Could not find Cake.exe at '$CAKE_EXE'."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Start Cake
|
||||
exec mono "$CAKE_EXE" $SCRIPT "${CAKE_ARGUMENTS[@]}"
|
||||
114
src/Jackett.Common/Definitions/3evils.yml
Normal file
114
src/Jackett.Common/Definitions/3evils.yml
Normal file
@@ -0,0 +1,114 @@
|
||||
---
|
||||
site: 3evils
|
||||
name: 3evils
|
||||
description: "3evils is a Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.3evils.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 2, cat: Console, desc: "Games"}
|
||||
- {id: 3, cat: Movies, desc: "Movies"}
|
||||
- {id: 4, cat: Audio, desc: "Music"}
|
||||
- {id: 9, cat: TV/Anime, desc: " Anime"}
|
||||
- {id: 17, cat: TV, desc: " TV"}
|
||||
- {id: 18, cat: PC, desc: "Appz"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
returnto: "/browse.php"
|
||||
error:
|
||||
- selector: h2:contains("Login failed!")
|
||||
message:
|
||||
selector: table tr td.colhead2
|
||||
test:
|
||||
path: /
|
||||
selector: :has(a[href$="/logout.php?hash_please="])
|
||||
|
||||
search:
|
||||
paths:
|
||||
# ttps://www.3evils.com/browse.php?search=black+lightning+s02e11&searchin=title&incldead=1
|
||||
# https://www.3evils.com/browse.php?c3=1&c4=1&search=&searchin=title&incldead=0
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{.Keywords}}"
|
||||
incldead: 1
|
||||
rows:
|
||||
selector: table.table-bordered tr:has(a[href^="browse.php?cat="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="details.php?id="] b
|
||||
title:
|
||||
# if this is available it is the full length title, as the one above can be abbreviated with ...
|
||||
optional: true
|
||||
selector: a[href^="details.php?id="][onmouseover]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Tip\\('<b>(.*?)</b>"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?torrent="]
|
||||
size:
|
||||
selector: td:nth-last-child(6)
|
||||
files:
|
||||
selector: td:nth-last-child(9)
|
||||
grabs:
|
||||
selector: td:nth-last-child(5)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Times", ""]
|
||||
# 2 flavours of dates
|
||||
date:
|
||||
# Today<br />10:20 AM
|
||||
# Yesterday<br />08:03 PM
|
||||
optional: true
|
||||
selector: td:nth-last-child(7):contains("day")
|
||||
date:
|
||||
# Feb 14 2019<br />10:20 AM
|
||||
optional: true
|
||||
selector: td:nth-last-child(7):not(:contains("day"))
|
||||
filters:
|
||||
- name: regex # drop break in between date and time
|
||||
args: ["(.+?)<[^>]*>(.+?)","$1 $2"]
|
||||
- name: dateparse
|
||||
args: "Jan 2 2006 03:04 pm"
|
||||
seeders:
|
||||
selector: td:nth-last-child(4)
|
||||
leechers:
|
||||
selector: td:nth-last-child(3)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"b:contains(\"[FREE]\")": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
116
src/Jackett.Common/Definitions/alein.yml
Normal file
116
src/Jackett.Common/Definitions/alein.yml
Normal file
@@ -0,0 +1,116 @@
|
||||
---
|
||||
site: alein
|
||||
name: Alein
|
||||
description: "Alein is a BULGARIAN Semi-Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://alein.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies/SD, desc: "Movies-XviD"}
|
||||
- {id: 15, cat: Movies/HD, desc: "Movies-x264"}
|
||||
- {id: 41, cat: Movies, desc: "Movies-BG"}
|
||||
- {id: 14, cat: Movies/HD, desc: "Movies-HD"}
|
||||
- {id: 48, cat: Movies/UHD, desc: "Movies-x265"}
|
||||
- {id: 39, cat: Movies/Foreign, desc: "Movies-XviD-Rus"}
|
||||
- {id: 40, cat: Movies/Foreign, desc: "Movies-x264-Rus"}
|
||||
- {id: 20, cat: Movies/Other, desc: "Movies-Animations"}
|
||||
- {id: 16, cat: Movies/3D, desc: "Movies-3D"}
|
||||
- {id: 5, cat: TV/Anime, desc: "Movies-Anime"}
|
||||
- {id: 21, cat: Movies/BluRay, desc: "Movies-Blu-ray"}
|
||||
- {id: 22, cat: TV/Documentary , desc: "Movies-Documentaries"}
|
||||
- {id: 11, cat: Movies/DVD, desc: "Movies-DVD-R"}
|
||||
- {id: 47, cat: TV/SD, desc: "TV-Episodes"}
|
||||
- {id: 46, cat: TV/HD, desc: "TV-Episodes-HD"}
|
||||
- {id: 3, cat: PC/ISO, desc: "Games-PC ISO"}
|
||||
- {id: 31, cat: Console/Xbox, desc: "Games-XBOX"}
|
||||
- {id: 33, cat: Console/PSP, desc: "Games-PS"}
|
||||
- {id: 2, cat: Audio/MP3, desc: "Music-MP3"}
|
||||
- {id: 50, cat: Audio/Lossless, desc: "Music-FLAC"}
|
||||
- {id: 18, cat: Audio/Video, desc: "Music-Video"}
|
||||
- {id: 9, cat: PC/0day, desc: "Software-Windows"}
|
||||
- {id: 8, cat: PC, desc: "Software-Linux"}
|
||||
- {id: 36, cat: Other, desc: "Trailer"}
|
||||
- {id: 34, cat: Other/Misc, desc: "Pictures"}
|
||||
- {id: 4, cat: Other, desc: "Other"}
|
||||
- {id: 6, cat: Books/Comics, desc: "Books-Comics"}
|
||||
- {id: 24, cat: PC/Phone-Other, desc: "Mobile-GSM"}
|
||||
- {id: 23, cat: TV/Sport, desc: "Sport"}
|
||||
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: form
|
||||
form: form[action*="/index.php?page=login"]
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.lista span[style="color:#FF0000;"]
|
||||
test:
|
||||
path: /
|
||||
selector: :has(a[href="logout.php"])
|
||||
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# http://alein.org/index.php?page=torrents&category=1%3B15%3B41%3B14%3B48%3B39%3B20%3B16%3B5%3B21%3B22%3B11&search=venom&active=1
|
||||
- path: index.php
|
||||
inputs:
|
||||
page: "torrents"
|
||||
category: "{{range .Categories}}{{.}};{{end}}"
|
||||
search: "{{if .Keywords }}{{.Keywords}}{{else}}{{end}}"
|
||||
active: "1"
|
||||
|
||||
rows:
|
||||
selector: tr.trclass
|
||||
fields:
|
||||
title:
|
||||
selector: td.lista-list a
|
||||
details:
|
||||
selector: td.lista-list a
|
||||
attribute: href
|
||||
category:
|
||||
selector: td.lista-cat a
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
download:
|
||||
selector: td.lista-list a
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
grabs:
|
||||
selector: td:nth-child(9)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "02/01/2006"
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: archetorrent
|
||||
name: ArcheTorrent
|
||||
description: "ArcheTorrent is a FRENCH Private Torrent Tracker"
|
||||
@@ -7,7 +7,38 @@
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://archetorrent.com
|
||||
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: filter_title
|
||||
type: checkbox
|
||||
label: Try to normalize releases names by moving year after the title
|
||||
default: false
|
||||
- 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 with ENGLISH
|
||||
default: false
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 18, cat: PC, desc: "Applications: PC"}
|
||||
@@ -109,11 +140,43 @@
|
||||
args: "Poster le: </b>(.*?)<br />"
|
||||
- name: dateparse
|
||||
args: "02-01-2006"
|
||||
title:
|
||||
|
||||
title_normal:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" - (Nouveau!)", ""]
|
||||
title_filtered:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" - (Nouveau!)", ""]
|
||||
- name: re_replace
|
||||
args: ["(?i)^(?:(.+?)((?:[\\.\\-\\s_\\[]+(?:imax|(?:dvd|bd|tv)(?:rip|scr)|bluray(?:\\-?rip)?|720\\s*p?|1080\\s*p?|vof?|vost(?:fr)?|multi|vf(?:f|q)?[1-3]?|(?:true)?french|eng?)[\\.\\-\\s_\\]]*)*)([\\(\\[]?(?:20|1[7-9])\\d{2}[\\)\\]]?)(.*)$|(.*))$", "$1 $3 $2 $4 $5"]
|
||||
- name: replace
|
||||
args: [".", " "]
|
||||
- name: trim
|
||||
- name: re_replace
|
||||
args: ["(?i)\\s(mkv|avi|divx|xvid|mp4)$", ""]
|
||||
- name: re_replace
|
||||
args: ["(\\s{2,5})", " "]
|
||||
- name: trim
|
||||
title_phase1:
|
||||
text: "{{if .Config.filter_title }}{{ .Result.title_filtered }}{{else}}{{ .Result.title_normal }}{{end}}"
|
||||
title_multilang:
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["[\\.\\s\\[\\-][Mm][Uu][Ll][Tt][Ii][\\.\\s\\]\\-]", ".{{ .Config.multilanguage }}."]
|
||||
title_phase2:
|
||||
text: "{{if .Config.multilang }}{{ .Result.title_multilang }}{{else}}{{ .Result.title_phase1 }}{{end}}"
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_phase2 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["[\\.\\s\\[\\-][Vv][Oo][Ss][Tt][Ff][Rr][\\.\\s\\]\\-]", ".ENGLISH."]
|
||||
title:
|
||||
text: "{{if .Config.vostfr }}{{ .Result.title_vostfr }}{{else}}{{ .Result.title_phase2 }}{{end}}"
|
||||
category:
|
||||
selector: a[href^="torrents.php?cat="]
|
||||
attribute: href
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
|
||||
@@ -57,7 +57,11 @@
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
|
||||
76
src/Jackett.Common/Definitions/btkitty.yml
Normal file
76
src/Jackett.Common/Definitions/btkitty.yml
Normal file
@@ -0,0 +1,76 @@
|
||||
---
|
||||
site: btkitty
|
||||
name: BTKitty
|
||||
description: "BTKITTY is a Public BitTorrent DHT search engine."
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://cnbtkitty.ws/
|
||||
legacylinks:
|
||||
- https://cnbtkitty.org/
|
||||
- http://cnbtkitty.org/
|
||||
- https://cnbtkitty.com/
|
||||
- http://cnbtkitty.com/
|
||||
- https://cnbtkitty.me/
|
||||
- http://cnbtkitty.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Other, desc: "Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: info
|
||||
type: info
|
||||
default: BTKitty does not use categories. In your software Indexer settings, set the category to 100001.
|
||||
|
||||
download:
|
||||
selector: a[href^="magnet:?"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: /
|
||||
method: post
|
||||
followredirect: true
|
||||
inputs:
|
||||
keyword: "{{if .Keywords }}{{.Keywords}}{{else}}test{{end}}"
|
||||
hidden: "true"
|
||||
rows:
|
||||
selector: dl.list-con
|
||||
filters:
|
||||
- name: andmatch
|
||||
fields:
|
||||
title:
|
||||
selector: dt a
|
||||
category:
|
||||
text: "1"
|
||||
details:
|
||||
selector: dt a
|
||||
attribute: href
|
||||
download:
|
||||
selector: dt a
|
||||
attribute: href
|
||||
size:
|
||||
selector: dd span:nth-of-type(4) b
|
||||
files:
|
||||
selector: dd span:nth-of-type(5) b
|
||||
date:
|
||||
selector: dd span:nth-of-type(3) b
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "2006-01-02"
|
||||
grabs:
|
||||
selector: dd span:nth-of-type(7) b
|
||||
seeders:
|
||||
text: "1"
|
||||
leechers:
|
||||
text: "1"
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
339
src/Jackett.Common/Definitions/casstudiotv.yml
Normal file
339
src/Jackett.Common/Definitions/casstudiotv.yml
Normal file
@@ -0,0 +1,339 @@
|
||||
---
|
||||
site: casstudiotv
|
||||
name: CasStudioTV
|
||||
description: "CasStudioTV is a RUSSIAN Private Torrent Tracker for TV"
|
||||
language: ru
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://casstudio.tv/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 259, cat: TV, desc: "Сериалы (TV Series)"}
|
||||
- {id: 56, cat: TV, desc: "Зарубежные сериалы (Foreign series)"}
|
||||
- {id: 310, cat: TV, desc: "9-1-1"}
|
||||
- {id: 246, cat: TV, desc: "11.22.63"}
|
||||
- {id: 158, cat: TV, desc: "4400 / The 4400"}
|
||||
- {id: 86, cat: TV, desc: "12 Обезьян / 12 Monkeys"}
|
||||
- {id: 120, cat: TV, desc: "Агенты Щ.И.Т. / Agents of S.H.I.E.L.D."}
|
||||
- {id: 72, cat: TV, desc: "Агент Картер / Agent Carter"}
|
||||
- {id: 103, cat: TV, desc: "Ад На Колёсах / Hell On Wheels"}
|
||||
- {id: 110, cat: TV, desc: "Американская семейка / Modern Family"}
|
||||
- {id: 62, cat: TV, desc: "Американцы / The Americans"}
|
||||
- {id: 70, cat: TV, desc: "Анатомия страсти / Анатомия Грей / Grey's Anatomy"}
|
||||
- {id: 210, cat: TV, desc: "База Куантико / Quantico"}
|
||||
- {id: 305, cat: TV, desc: "Беглецы / Runaways"}
|
||||
- {id: 122, cat: TV, desc: "Безумцы / Mad Men"}
|
||||
- {id: 134, cat: TV, desc: "Белый воротничок / White Collar"}
|
||||
- {id: 281, cat: TV, desc: "Барыги / Narcos"}
|
||||
- {id: 239, cat: TV, desc: "Баскетс / Baskets"}
|
||||
- {id: 155, cat: TV, desc: "Бешеные псы / Mad Dogs"}
|
||||
- {id: 243, cat: TV, desc: "Библиотекари / The Librarians"}
|
||||
- {id: 154, cat: TV, desc: "Блудливая Калифорния / Californication"}
|
||||
- {id: 208, cat: TV, desc: "Бойтесь ходячих мертвецов / Fear the Walking Dead"}
|
||||
- {id: 150, cat: TV, desc: "Больница Никербокер / The Knick"}
|
||||
- {id: 119, cat: TV, desc: "Бывает и хуже / The Middle"}
|
||||
- {id: 87, cat: TV, desc: "В поле зрения / Person of Interest"}
|
||||
- {id: 219, cat: TV, desc: "В пустыне смерти / Into the Badlands"}
|
||||
- {id: 118, cat: TV, desc: "Веб терапия / Web Therapy"}
|
||||
- {id: 123, cat: TV, desc: "Ведьмы Ист-Энда / Witches of East End"}
|
||||
- {id: 309, cat: TV, desc: "Видоизмененный углерод / Altered Carbon"}
|
||||
- {id: 241, cat: TV, desc: "Винил / Vinyl"}
|
||||
- {id: 91, cat: TV, desc: "Викинги / Vikings"}
|
||||
- {id: 172, cat: TV, desc: "Вице-Президент / Veep"}
|
||||
- {id: 204, cat: TV, desc: "Власть в ночном городе / Power"}
|
||||
- {id: 228, cat: TV, desc: "Волшебники / The Magicians"}
|
||||
- {id: 220, cat: TV, desc: "Восприятие / Perception"}
|
||||
- {id: 254, cat: TV, desc: "Восстание / Rebellion"}
|
||||
- {id: 248, cat: TV, desc: "Вместе / Togetherness"}
|
||||
- {id: 192, cat: TV, desc: "Водолей / Aquarius"}
|
||||
- {id: 65, cat: TV, desc: "Возмездие / Revenge"}
|
||||
- {id: 121, cat: TV, desc: "Все Ненавидят Криса / Everybody Hates Chris"}
|
||||
- {id: 166, cat: TV, desc: "Ганнибал / Hannibal"}
|
||||
- {id: 211, cat: TV, desc: "Герои: Возрождение / Heroes Reborn"}
|
||||
- {id: 293, cat: TV, desc: "Голубая кровь / Blue Bloods"}
|
||||
- {id: 145, cat: TV, desc: "Город Хищниц / Cougar Town"}
|
||||
- {id: 61, cat: TV, desc: "Готэм / Gotham"}
|
||||
- {id: 117, cat: TV, desc: "Гримм / Grimm"}
|
||||
- {id: 108, cat: TV, desc: "Две девицы на мели / 2 Broke Girls"}
|
||||
- {id: 66, cat: TV, desc: "Девочки / Girls"}
|
||||
- {id: 271, cat: TV, desc: "Девушка по вызову / The Girlfriend Experience"}
|
||||
- {id: 176, cat: TV, desc: "Декстер / Dexter"}
|
||||
- {id: 232, cat: TV, desc: "Десница Божья / Hand of God"}
|
||||
- {id: 307, cat: TV, desc: "Династия / Dynasty"}
|
||||
- {id: 102, cat: TV, desc: "Дневники вампира / The Vampire Diaries"}
|
||||
- {id: 229, cat: TV, desc: "Джессика Джонс / Jessica Jones"}
|
||||
- {id: 282, cat: TV, desc: "Дорожная команда / Roadies"}
|
||||
- {id: 205, cat: TV, desc: "До смерти красива / Drop Dead Diva"}
|
||||
- {id: 104, cat: TV, desc: "Древние / The Originals"}
|
||||
- {id: 278, cat: TV, desc: "Загадочные события / Stranger Things"}
|
||||
- {id: 182, cat: TV, desc: "Задержка в развитии / Arrested Development"}
|
||||
- {id: 201, cat: TV, desc: "За пределами / Выжившая / Род человеческий / Extant"}
|
||||
- {id: 301, cat: TV, desc: "Защитники / The Defenders"}
|
||||
- {id: 314, cat: TV, desc: "Звёздный путь / Star Trek"}
|
||||
- {id: 167, cat: TV, desc: "Зов крови / Потерянная / Фейри / Lost Girl"}
|
||||
- {id: 116, cat: TV, desc: "Зовите меня Фитц / Call Me Fitz"}
|
||||
- {id: 74, cat: TV, desc: "Империя / Empire"}
|
||||
- {id: 75, cat: TV, desc: "Как избежать наказания за убийство / How to Get Away with Murder"}
|
||||
- {id: 203, cat: TV, desc: "Как бы счастье / Happyish"}
|
||||
- {id: 141, cat: TV, desc: "Как Я Встретил Вашу Маму / How I Met Your Mother"}
|
||||
- {id: 277, cat: TV, desc: "Карантин / Containment"}
|
||||
- {id: 306, cat: TV, desc: "Каратель / The Punisher"}
|
||||
- {id: 174, cat: TV, desc: "Карточный домик / House of Cards"}
|
||||
- {id: 63, cat: TV, desc: "Касл / Castle"}
|
||||
- {id: 285, cat: TV, desc: "Квантовый скачок / Quantum Leap"}
|
||||
- {id: 169, cat: TV, desc: "Кей и Пил / Key and Peele"}
|
||||
- {id: 195, cat: TV, desc: "Киллджойс / Killjoys"}
|
||||
- {id: 222, cat: TV, desc: "Клуб жен астронавтов / The Astronaut Wives Club"}
|
||||
- {id: 197, cat: TV, desc: "Коварные горничные / Devious Maids"}
|
||||
- {id: 230, cat: TV, desc: "Колония / Colony"}
|
||||
- {id: 170, cat: TV, desc: "Континуум / Continuum"}
|
||||
- {id: 233, cat: TV, desc: "Конец детства / Childhood's End"}
|
||||
- {id: 147, cat: TV, desc: "Копы-новобранцы / Rookie Blue"}
|
||||
- {id: 291, cat: TV, desc: "Королева Юга / Queen of the South"}
|
||||
- {id: 193, cat: TV, desc: "Красавица и чудовище / Beauty and the Beast"}
|
||||
- {id: 132, cat: TV, desc: "Крах / The Fall"}
|
||||
- {id: 146, cat: TV, desc: "Красотки в Кливленде / Hot in Cleveland"}
|
||||
- {id: 171, cat: TV, desc: "Красавцы / Антураж / Entourage"}
|
||||
- {id: 207, cat: TV, desc: "Кремниевая долина / Silicon Valley"}
|
||||
- {id: 238, cat: TV, desc: "Легенды завтрашнего дня / Legends of Tomorrow"}
|
||||
- {id: 300, cat: TV, desc: "Легион / Legion"}
|
||||
- {id: 294, cat: TV, desc: "Лемони Сникет: 33 несчастья / A Series of Unfortunate Events"}
|
||||
- {id: 130, cat: TV, desc: "Лиллехаммер / Lilyhammer"}
|
||||
- {id: 276, cat: TV, desc: "Любовницы / Mistresses US"}
|
||||
- {id: 198, cat: TV, desc: "Люди / Humans"}
|
||||
- {id: 165, cat: TV, desc: "Лютер / Luther"}
|
||||
- {id: 247, cat: TV, desc: "Люцифер / Lucifer"}
|
||||
- {id: 313, cat: TV, desc: "МакГайвер / MacGyver"}
|
||||
- {id: 127, cat: TV, desc: "Майк и Молли / Mike & Molly"}
|
||||
- {id: 156, cat: TV, desc: "Мастера Секса / Masters of Sex"}
|
||||
- {id: 245, cat: TV, desc: "Медики Чикаго / Chicago Med"}
|
||||
- {id: 180, cat: TV, desc: "Миллеры в разводе / The Millers"}
|
||||
- {id: 244, cat: TV, desc: "Миллиарды / Billions"}
|
||||
- {id: 234, cat: TV, desc: "Мистер Робинсон / Mr. Robinson"}
|
||||
- {id: 200, cat: TV, desc: "Мистер робот / Mr. Robot"}
|
||||
- {id: 173, cat: TV, desc: "Мост / Broen / Bron"}
|
||||
- {id: 126, cat: TV, desc: "Мотель Бейтс / Bates Motel"}
|
||||
- {id: 231, cat: TV, desc: "Моцарт в джунглях / Mozart in the Jungle"}
|
||||
- {id: 69, cat: TV, desc: "Мушкетеры / The Musketeers"}
|
||||
- {id: 76, cat: TV, desc: "Мыслить как преступник / Criminal Minds"}
|
||||
- {id: 202, cat: TV, desc: "На грани / The Brink"}
|
||||
- {id: 175, cat: TV, desc: "Налёт / Braquo"}
|
||||
- {id: 125, cat: TV, desc: "Настоящая кровь / True Blood"}
|
||||
- {id: 152, cat: TV, desc: "Настоящий детектив / True Detective"}
|
||||
- {id: 79, cat: TV, desc: "Не те парни / The Wrong Mans"}
|
||||
- {id: 164, cat: TV, desc: "Нэшвилл / Nashville"}
|
||||
- {id: 58, cat: TV, desc: "Обитель лжи / House of Lies"}
|
||||
- {id: 137, cat: TV, desc: "Оборотень / Teen Wolf"}
|
||||
- {id: 303, cat: TV, desc: "Одаренные / The Gifted"}
|
||||
- {id: 92, cat: TV, desc: "Однажды в сказке / Once Upon A Time"}
|
||||
- {id: 279, cat: TV, desc: "Однажды ночью / The Night Of"}
|
||||
- {id: 275, cat: TV, desc: "Оранжевый - хит сезона / Orange is the New Black"}
|
||||
- {id: 304, cat: TV, desc: "Орвилл / The Orville"}
|
||||
- {id: 212, cat: TV, desc: "Оставленные / The Leftovers"}
|
||||
- {id: 139, cat: TV, desc: "Острые козырьки / Peaky Blinders"}
|
||||
- {id: 163, cat: TV, desc: "Отчаянные домохозяйки / Desperate Housewives"}
|
||||
- {id: 138, cat: TV, desc: "Отбросы / Misfits"}
|
||||
- {id: 80, cat: TV, desc: "Пересекающиеся линии / Пересекая черту / Crossing Lines"}
|
||||
- {id: 218, cat: TV, desc: "Плоть и кости / Flesh and Bone"}
|
||||
- {id: 99, cat: TV, desc: "Под куполом / Under The Dome"}
|
||||
- {id: 149, cat: TV, desc: "Подпольная Империя / Boardwalk Empire"}
|
||||
- {id: 78, cat: TV, desc: "Помнить все / Незабываемое / Unforgettable"}
|
||||
- {id: 272, cat: TV, desc: "Поворот / TURN"}
|
||||
- {id: 90, cat: TV, desc: "Пожарные Чикаго / Chicago Fire"}
|
||||
- {id: 236, cat: TV, desc: "Полицейские на велосипедах / Pacific Blue"}
|
||||
- {id: 144, cat: TV, desc: "Полиция Гавайев / Hawaii Five-0"}
|
||||
- {id: 77, cat: TV, desc: "Полиция Чикаго / Chicago PD"}
|
||||
- {id: 162, cat: TV, desc: "Последователи / The Following"}
|
||||
- {id: 287, cat: TV, desc: "Приговор / Conviction"}
|
||||
- {id: 135, cat: TV, desc: "ПригорАД / Suburgatory"}
|
||||
- {id: 274, cat: TV, desc: "Проповедник / Preacher"}
|
||||
- {id: 113, cat: TV, desc: "Просветленная / Enlightened"}
|
||||
- {id: 235, cat: TV, desc: "Пространство / The Expanse"}
|
||||
- {id: 290, cat: TV, desc: "Радиоволна / Frequency"}
|
||||
- {id: 112, cat: TV, desc: "Революция / Revolution"}
|
||||
- {id: 83, cat: TV, desc: "Родина / Homeland"}
|
||||
- {id: 128, cat: TV, desc: "Рэй Донован / Ray Donovan"}
|
||||
- {id: 136, cat: TV, desc: "Риццоли и Айлc / Rizzoli & Isles"}
|
||||
- {id: 160, cat: TV, desc: "Рухнувшие Небеса / Falling Skies"}
|
||||
- {id: 199, cat: TV, desc: "Салем / Salem"}
|
||||
- {id: 111, cat: TV, desc: "Сверхъестественное / Supernatural"}
|
||||
- {id: 157, cat: TV, desc: "Секретные материалы / X-Files"}
|
||||
- {id: 267, cat: TV, desc: "Семья / The Family"}
|
||||
- {id: 311, cat: TV, desc: "Сирена / Siren"}
|
||||
- {id: 64, cat: TV, desc: "Скандал / Scandal"}
|
||||
- {id: 213, cat: TV, desc: "Слепое пятно / Blindspot"}
|
||||
- {id: 129, cat: TV, desc: "Служба новостей / Новости / The Newsroom"}
|
||||
- {id: 286, cat: TV, desc: "Смертельное Оружие / Lethal Weapon"}
|
||||
- {id: 93, cat: TV, desc: "Сообщество / Community"}
|
||||
- {id: 179, cat: TV, desc: "Сопрано / The Sopranos"}
|
||||
- {id: 194, cat: TV, desc: "Сорвиголова / Daredevil"}
|
||||
- {id: 109, cat: TV, desc: "Сотня / 100 / The Hundred"}
|
||||
- {id: 153, cat: TV, desc: "Спартак / Spartacus"}
|
||||
- {id: 266, cat: TV, desc: "Страна чудес / Wonderland"}
|
||||
- {id: 191, cat: TV, desc: "Страшные сказки / Penny Dreadful"}
|
||||
- {id: 131, cat: TV, desc: "Стрела / Arrow"}
|
||||
- {id: 190, cat: TV, desc: "Супергёрл / Supergirl"}
|
||||
- {id: 82, cat: TV, desc: "Сыны Анархии / Sons of Anarchy"}
|
||||
- {id: 295, cat: TV, desc: "Табу / Taboo"}
|
||||
- {id: 273, cat: TV, desc: "Тайны Лауры / The Mysteries of Laura"}
|
||||
- {id: 178, cat: TV, desc: "Твин Пикс / Twin Peaks"}
|
||||
- {id: 107, cat: TV, desc: "Теория Большого Взрыва / The Big Bang Theory"}
|
||||
- {id: 196, cat: TV, desc: "Тёмная материя / Dark Matter"}
|
||||
- {id: 280, cat: TV, desc: "Тик / The Tick"}
|
||||
- {id: 181, cat: TV, desc: "Тугая струна / Wire in the Blood"}
|
||||
- {id: 95, cat: TV, desc: "Убийство / The Killing"}
|
||||
- {id: 81, cat: TV, desc: "Убить скуку / Bored to Death"}
|
||||
- {id: 98, cat: TV, desc: "Уилфред / Wilfred"}
|
||||
- {id: 187, cat: TV, desc: "Уэйуорд Пайнс / Wayward Pines"}
|
||||
- {id: 142, cat: TV, desc: "Флэш / Flash"}
|
||||
- {id: 168, cat: TV, desc: "Форс-мажоры / Костюмы / Suits"}
|
||||
- {id: 59, cat: TV, desc: "Ходячие мертвецы / The Walking Dead"}
|
||||
- {id: 308, cat: TV, desc: "Хороший доктор / The Good Doctor"}
|
||||
- {id: 143, cat: TV, desc: "Хранилище 13 / Warehouse 13"}
|
||||
- {id: 237, cat: TV, desc: "Хроники Шаннары / The Shannara Chronicles"}
|
||||
- {id: 94, cat: TV, desc: "Хэйвен / Haven"}
|
||||
- {id: 124, cat: TV, desc: "Царство / Reign"}
|
||||
- {id: 268, cat: TV, desc: "Час пик / Rush Hour"}
|
||||
- {id: 115, cat: TV, desc: "Чёрное зеркало / Black Mirror"}
|
||||
- {id: 73, cat: TV, desc: "Черные Паруса / Black Sails"}
|
||||
- {id: 177, cat: TV, desc: "Черный список / The Blacklist"}
|
||||
- {id: 189, cat: TV, desc: "Шёпот / The Whispers"}
|
||||
- {id: 106, cat: TV, desc: "Шпионка / Alias"}
|
||||
- {id: 85, cat: TV, desc: "Штамм / The Strain"}
|
||||
- {id: 288, cat: TV, desc: "Экзорцист / The Exorcist"}
|
||||
- {id: 105, cat: TV, desc: "Элементарно / Elementary"}
|
||||
- {id: 217, cat: TV, desc: "Эш против Зловещих мертвецов / Ash vs Evil Dead"}
|
||||
- {id: 270, cat: TV, desc: "яЗомби / iZombie"}
|
||||
- {id: 53, cat: TV, desc: "Другие сериалы (Other TV series)"}
|
||||
- {id: 240, cat: TV, desc: "Клим (Klim)"}
|
||||
- {id: 283, cat: TV, desc: "Amazon"}
|
||||
- {id: 284, cat: TV, desc: "Amazon English"}
|
||||
- {id: 88, cat: TV, desc: "Мультсериалы (Cartoons)"}
|
||||
- {id: 101, cat: TV, desc: "Южный Парк / South Park"}
|
||||
- {id: 89, cat: TV, desc: "Спецагент Арчер / Archer"}
|
||||
- {id: 225, cat: TV, desc: "Стендап / Stand Up"}
|
||||
- {id: 54, cat: TV, desc: "Особый раздел (Special section)"}
|
||||
- {id: 100, cat: TV, desc: "Короткометражки (Short films)"}
|
||||
- {id: 60, cat: TV, desc: "Документальные (Documentaries)"}
|
||||
- {id: 159, cat: TV, desc: "Разное (Misc.)"}
|
||||
- {id: 261, cat: TV, desc: "Спорт (Sport)"}
|
||||
- {id: 262, cat: TV, desc: "Автомотоспорт (Autosport)"}
|
||||
- {id: 263, cat: TV, desc: "Формула 1 / Formula 1"}
|
||||
- {id: 264, cat: TV, desc: "MotoGP / SBK"}
|
||||
- {id: 265, cat: TV, desc: "V8 supercars"}
|
||||
- {id: 31, cat: TV, desc: "Пользователи (Users)"}
|
||||
- {id: 188, cat: TV, desc: "Поздравления (Congratulations)"}
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: ucp.php?mode=login
|
||||
method: form
|
||||
form: form#login
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: fieldset:has(div.error)
|
||||
test:
|
||||
path: /
|
||||
selector: :has(a[href^="./ucp.php?mode=logout&sid="])
|
||||
|
||||
# download:
|
||||
# selector: a[href^="./download/file.php?id="]:not(img)
|
||||
|
||||
search:
|
||||
paths:
|
||||
#https://casstudio.tv/search.php?tracker_search=torrent&keywords=star&terms=all&author=&sc=1&sf=titleonly&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search
|
||||
- path: search.php
|
||||
inputs:
|
||||
tracker_search: "torrent"
|
||||
keywords: "{{if .Keywords }}{{.Keywords}}{{else}}star{{end}}"
|
||||
terms: "all"
|
||||
author: ""
|
||||
sc: "1"
|
||||
sf: "titleonly"
|
||||
sr: "topics"
|
||||
sk: "t"
|
||||
sd: "d"
|
||||
st: "0"
|
||||
ch: "300"
|
||||
t: "0"
|
||||
submit: "Search"
|
||||
|
||||
rows:
|
||||
selector: tr.row
|
||||
fields:
|
||||
title:
|
||||
selector: a.topictitle
|
||||
details:
|
||||
selector: a.topictitle
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href^="./viewforum.php?f="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: f
|
||||
download:
|
||||
selector: a[href^="./download/file.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: a[href^="./viewforum.php?f="] + b
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["ТБ", "TB"]
|
||||
- name: replace
|
||||
args: ["ГБ", "GB"]
|
||||
- name: replace
|
||||
args: ["МБ", "MB"]
|
||||
- name: replace
|
||||
args: ["КБ", "KB"]
|
||||
seeders:
|
||||
selector: td.forumtopics span.seed
|
||||
leechers:
|
||||
selector: td.forumtopics span.leech
|
||||
grabs:
|
||||
selector: td.forumposts span.complet
|
||||
date:
|
||||
# 12 янв 2019, 11:26
|
||||
selector: td.forumdetails span.forum-descriptions
|
||||
filters:
|
||||
# extract the date
|
||||
- name: regexp
|
||||
args: "(\\d{2} \\D{3} \\d{4}, \\d{2}:\\d{2})"
|
||||
# replace month abbreviations
|
||||
- name: replace
|
||||
args: ["янв", "Jan"]
|
||||
- name: replace
|
||||
args: ["фев", "Feb"]
|
||||
- name: replace
|
||||
args: ["мар", "Mar"]
|
||||
- name: replace
|
||||
args: ["апр", "Apr"]
|
||||
- name: replace
|
||||
args: ["май", "May"]
|
||||
- name: replace
|
||||
args: ["июн", "Jun"]
|
||||
- name: replace
|
||||
args: ["июл", "Jul"]
|
||||
- name: replace
|
||||
args: ["авг", "Aug"]
|
||||
- name: replace
|
||||
args: ["сен", "Sep"]
|
||||
- name: replace
|
||||
args: ["окт", "Oct"]
|
||||
- name: replace
|
||||
args: ["ноя", "Nov"]
|
||||
- name: replace
|
||||
args: ["дек", "Dec"]
|
||||
- name: dateparse
|
||||
args: "02 Jan 06, 15:04"
|
||||
downloadvolumefactor:
|
||||
text: "1"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
96
src/Jackett.Common/Definitions/cpasbienclone.yml
Normal file
96
src/Jackett.Common/Definitions/cpasbienclone.yml
Normal file
@@ -0,0 +1,96 @@
|
||||
---
|
||||
site: cpasbienclone
|
||||
name: cpasbien clone
|
||||
description: "cpasbien clone is a FRENCH Public site for TV / MOVIES / GENERAL"
|
||||
language: fr-fr
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://cpasbiens.cm/
|
||||
legacylinks:
|
||||
- https://www1.cpasbiens.ws/
|
||||
- https://www2.cpasbiens.ws/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: films, cat: Movies, desc: "Movies"}
|
||||
- {id: series, cat: TV, desc: "TV"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
settings: []
|
||||
|
||||
download:
|
||||
selector: div#btn-download a
|
||||
attribute: href
|
||||
search:
|
||||
paths:
|
||||
- path: "{{if .Keywords}}/recherche/{{.Keywords}}{{else}}{{end}}"
|
||||
rows:
|
||||
selector: div#gauche > table > tbody > tr:has(a)
|
||||
fields:
|
||||
site_date:
|
||||
selector: a
|
||||
filters:
|
||||
# date is at the end of the title, so we get it and name it site_date
|
||||
- name: regexp
|
||||
args: "(\\w+)$"
|
||||
title:
|
||||
selector: a
|
||||
filters:
|
||||
# now we put the date at the right place according scene naming rules using .Result.site_date
|
||||
- name: replace
|
||||
args: ["FRENCH", "{{ .Result.site_date }} FRENCH"]
|
||||
- name: replace
|
||||
args: ["TRUEFRENCH", "{{ .Result.site_date }} TRUEFRENCH"]
|
||||
- name: replace
|
||||
args: ["VOSTFR", "{{ .Result.site_date }} VOSTFR"]
|
||||
# and we delete it at the end
|
||||
- name: re_replace
|
||||
args: ["(\\w+)$", ""]
|
||||
details:
|
||||
selector: a
|
||||
attribute: href
|
||||
download:
|
||||
selector: a
|
||||
attribute: href
|
||||
size:
|
||||
selector: div.poid
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: [ "\\.(\\d) Ko", "$1X00"]
|
||||
- name: re_replace
|
||||
args: [ " Ko", "000"]
|
||||
- name: re_replace
|
||||
args: [ "\\.(\\d) Mo", "$1X00000"]
|
||||
- name: re_replace
|
||||
args: [ " Mo", "000000"]
|
||||
- name: re_replace
|
||||
args: [ "\\.(\\d) Go", "$1X00000000"]
|
||||
- name: re_replace
|
||||
args: [ " Go", "000000000"]
|
||||
- name: re_replace
|
||||
args: [ "\\.(\\d) To", "$1X00000000000"]
|
||||
- name: re_replace
|
||||
args: [ " To", "000000000000"]
|
||||
- name: replace
|
||||
args: [ "X", "" ]
|
||||
date:
|
||||
text: "now"
|
||||
seeders:
|
||||
text: 0
|
||||
seeders:
|
||||
selector: div.up
|
||||
optional: true
|
||||
leechers:
|
||||
text: 0
|
||||
leechers:
|
||||
selector: div.down
|
||||
optional: true
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
@@ -42,6 +42,10 @@
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
|
||||
74
src/Jackett.Common/Definitions/digbt.yml
Normal file
74
src/Jackett.Common/Definitions/digbt.yml
Normal file
@@ -0,0 +1,74 @@
|
||||
---
|
||||
site: digbt
|
||||
name: DIGBT
|
||||
description: "DIGBT is a Public BitTorrent DHT search engine"
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.digbt.org/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
# DIGBT does not support categories
|
||||
1: Other
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
settings: []
|
||||
|
||||
search:
|
||||
# DIGBT does not support a default empty search or provide trending/latest/new pages
|
||||
# attempt to fetch up to 50 results (10 per page)
|
||||
paths:
|
||||
- path: "search/{{if .Keywords}}{{.Keywords}}{{else}}test{{end}}?c=&s=time&u=y"
|
||||
- path: "search/{{if .Keywords}}{{.Keywords}}-time-2/{{else}}test-time-2/{{end}}?c=&s=time&u=y"
|
||||
- path: "search/{{if .Keywords}}{{.Keywords}}-time-3/{{else}}test-time-3/{{end}}?c=&s=time&u=y"
|
||||
- path: "search/{{if .Keywords}}{{.Keywords}}-time-4/{{else}}test-time-4/{{end}}?c=&s=time&u=y"
|
||||
- path: "search/{{if .Keywords}}{{.Keywords}}-time-5/{{else}}test-time-5/{{end}}?c=&s=time&u=y"
|
||||
rows:
|
||||
selector: tr td.x-item
|
||||
fields:
|
||||
title:
|
||||
selector: div a
|
||||
category:
|
||||
text: "1"
|
||||
details:
|
||||
selector: div a
|
||||
attribute: href
|
||||
download:
|
||||
selector: div.tail a[href^="magnet:?"]
|
||||
attribute: href
|
||||
magnet:
|
||||
selector: div.tail a[href^="magnet:?"]
|
||||
attribute: href
|
||||
date:
|
||||
selector: div span.ctime
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["yesterday", "1 day"]
|
||||
- name: timeago
|
||||
size:
|
||||
selector: div.tail
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Size: (.+?) Downloads:"
|
||||
files:
|
||||
selector: div.tail
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Files: (.+?) Size:"
|
||||
seeders:
|
||||
text: "1"
|
||||
leechers:
|
||||
text: "1"
|
||||
grabs:
|
||||
selector: div.tail
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Downloads: (.+?) Updated:"
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
@@ -65,7 +65,7 @@
|
||||
selector: a[href^="{{ .Config.downloadlink }}"]
|
||||
|
||||
search:
|
||||
path: torrents-search.php
|
||||
path: "{{if .Keywords}}torrents-search.php{{else}}torrents.php{{end}}"
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
|
||||
142
src/Jackett.Common/Definitions/film-paleis.yml
Normal file
142
src/Jackett.Common/Definitions/film-paleis.yml
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
site: film-paleis
|
||||
name: Film-Paleis
|
||||
description: "Film-Paleis is a DUTCH Semi-Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: nl-NL
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.film-paleis.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 2, cat: Movies/BluRay, desc: " Bluray/HD"}
|
||||
- {id: 3, cat: Movies/DVD, desc: " DVD Kids"}
|
||||
- {id: 4, cat: Audio/Video, desc: " DVD Muziek"}
|
||||
- {id: 5, cat: Movies/DVD, desc: " DVD Films"}
|
||||
- {id: 7, cat: Movies/UHD, desc: " 4K films"}
|
||||
- {id: 8, cat: XXX, desc: " Erotiek"}
|
||||
- {id: 9, cat: PC/Phone-Other, desc: " GSM/Navigatie"}
|
||||
- {id: 10, cat: Audio, desc: " Muziek Album"}
|
||||
- {id: 11, cat: Audio/Other, desc: " Muziek Diverse"}
|
||||
- {id: 12, cat: Console/NDS, desc: " Nintendo"}
|
||||
- {id: 13, cat: Movies, desc: " Classic"}
|
||||
- {id: 15, cat: Other, desc: " Overige"}
|
||||
- {id: 16, cat: PC/0day, desc: " PC Software"}
|
||||
- {id: 17, cat: PC, desc: " PC Spellen"}
|
||||
- {id: 19, cat: TV, desc: " TV Series"}
|
||||
- {id: 21, cat: Movies/SD, desc: " Divx/Xvid"}
|
||||
- {id: 24, cat: Books/Ebook, desc: " E-Books"}
|
||||
- {id: 26, cat: Audio/Other, desc: " Cabaret"}
|
||||
- {id: 27, cat: TV/Documentary, desc: " Documentaire"}
|
||||
- {id: 31, cat: Movies/HD, desc: " HD 265"}
|
||||
- {id: 32, cat: Audio/Audiobook, desc: " Luister Boeken"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
returnto: "/browse.php"
|
||||
error:
|
||||
- selector: table tr td font[color="yellow"]:not(contains("Torrents"))
|
||||
test:
|
||||
path: /
|
||||
selector: :has(a[href="logout.php"])
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{.Keywords}}"
|
||||
incldead: 1
|
||||
rows:
|
||||
selector: table.mainouter
|
||||
filters:
|
||||
- name: andmatch
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details", "download"]
|
||||
size:
|
||||
selector: td:nth-child(4) table tr td:nth-child(2)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(.+?) in"
|
||||
files:
|
||||
selector: td:nth-child(4) table tr td:nth-child(2)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "in (\\d{1,}) bestan"
|
||||
grabs:
|
||||
selector: td:nth-child(4) table tr:nth-child(2) td:nth-child(1)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(\\d{1,})"
|
||||
date:
|
||||
selector: td:nth-child(4) table tr:nth-child(2) td:nth-child(2)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["januari", "January"]
|
||||
- name: replace
|
||||
args: ["februari", "February"]
|
||||
- name: replace
|
||||
args: ["maart", "March"]
|
||||
- name: replace
|
||||
args: ["april", "April"]
|
||||
- name: replace
|
||||
args: ["mei", "May"]
|
||||
- name: replace
|
||||
args: ["juni", "June"]
|
||||
- name: replace
|
||||
args: ["juli", "July"]
|
||||
- name: replace
|
||||
args: ["augustus", "August"]
|
||||
- name: replace
|
||||
args: ["september", "September"]
|
||||
- name: replace
|
||||
args: ["oktober", "October"]
|
||||
- name: replace
|
||||
args: ["november", "November"]
|
||||
- name: replace
|
||||
args: ["december", "December"]
|
||||
- name: re_replace
|
||||
args: ["\\s*om\\s*"," "]
|
||||
- name: dateparse
|
||||
args: "2 January 2006 15:04:05"
|
||||
seeders:
|
||||
text: "0"
|
||||
seeders:
|
||||
optional: true
|
||||
selector: td:nth-child(4) table tr:nth-child(3) td:nth-child(5) b:nth-child(1)
|
||||
leechers:
|
||||
text: "0"
|
||||
leechers:
|
||||
optional: true
|
||||
selector: td:nth-child(4) table tr:nth-child(3) td:nth-child(5) b:nth-child(2)
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
86
src/Jackett.Common/Definitions/gdf76.yml
Normal file
86
src/Jackett.Common/Definitions/gdf76.yml
Normal file
@@ -0,0 +1,86 @@
|
||||
---
|
||||
site: gdf76
|
||||
name: gdf76
|
||||
description: "gdf76 is an ITALIAN semi-private site for ITA films in mp4 format optimized for streaming"
|
||||
language: en
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://gdf76.altervista.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 11, cat: Movies, desc: "Film 720p"}
|
||||
- {id: 13, cat: TV, desc: "Serie TV"}
|
||||
- {id: 2, cat: Audio, desc: "Music"}
|
||||
- {id: 3, cat: PC/Games, desc: "Games"}
|
||||
- {id: 5, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 6, cat: Books, desc: "Books"}
|
||||
- {id: 7, cat: PC/0day, desc: "Apps Win"}
|
||||
- {id: 8, cat: PC, desc: "Apps Linux"}
|
||||
- {id: 9, cat: PC/Mac, desc: "Apps Mac"}
|
||||
- {id: 4, cat: Other, desc: "Other"}
|
||||
- {id: 12, cat: XXX, desc: "Adult"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: index.php
|
||||
method: form
|
||||
form: form[action="index.php?page=login"]
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: tr td span[style="color:#FF0000;"]
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: index.php
|
||||
inputs:
|
||||
page: torrents
|
||||
search: "{{ if .Keywords }}{{ .Keywords }}{{else}}{{end}}"
|
||||
category: 0
|
||||
active: 0
|
||||
|
||||
rows:
|
||||
selector: tr:has(a[href^="index.php?page=torrent-details"])
|
||||
fields:
|
||||
title:
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
details:
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
attribute: href
|
||||
category:
|
||||
selector: td a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
download:
|
||||
selector: td a[href^="download.php"]
|
||||
attribute: href
|
||||
size:
|
||||
text: "500 MB"
|
||||
date:
|
||||
# 19/01/2019
|
||||
selector: td:nth-child(4)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "02/01/2006"
|
||||
seeders:
|
||||
selector: td:nth-child(5)
|
||||
leechers:
|
||||
selector: td:nth-child(6)
|
||||
grabs:
|
||||
selector: td:nth-child(7)
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
@@ -7,7 +7,7 @@
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://www.gktorrent.net/
|
||||
- https://www.gktorrent.tv/
|
||||
legacylinks:
|
||||
- https://www.gktorrent.com/
|
||||
- http://www.gktorrent.com/
|
||||
@@ -23,6 +23,7 @@
|
||||
- https://www.gktorrent.org/
|
||||
- https://www.gktorrent.me/
|
||||
- https://www.rantop.org/
|
||||
- https://www.gktorrent.net/
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: movies, cat: Movies, desc: "Movies"}
|
||||
|
||||
@@ -121,20 +121,20 @@
|
||||
download:
|
||||
text: "download2.php?torrent={{ .Result._id }}"
|
||||
size:
|
||||
selector: td:nth-last-child(3)
|
||||
selector: td:nth-last-child(4)
|
||||
date:
|
||||
selector: td:nth-last-child(5) > nobr
|
||||
selector: td:nth-last-child(6) > nobr
|
||||
filters:
|
||||
- name: append
|
||||
args: " +02:00"
|
||||
- name: dateparse
|
||||
args: "2006-01-0215:04:05 -07:00"
|
||||
files:
|
||||
selector: td:nth-last-child(6)
|
||||
selector: td:nth-last-child(8)
|
||||
seeders:
|
||||
selector: td:nth-last-child(2)
|
||||
selector: td:nth-last-child(3)
|
||||
leechers:
|
||||
selector: td:nth-last-child(1)
|
||||
selector: td:nth-last-child(2)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[src=\"pic/free.png\"]": "0"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
site: hdchina
|
||||
name: HDChina
|
||||
description: "A chinese tracker"
|
||||
description: "HDChina (HDWing) is a CHINESE Private Torrent Tracker for HD MOVIES / TV"
|
||||
language: zh-cn
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
@@ -41,6 +41,8 @@
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
@@ -114,10 +116,15 @@
|
||||
args: " ago"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown: ".5"
|
||||
img.pro_30pctdown: ".3"
|
||||
img.pro_free: "0"
|
||||
img.pro_free2up: "0"
|
||||
img.pro_50pctdown: "0.5"
|
||||
img.pro_50pctdown2up: "0.5"
|
||||
img.pro_30pctdown: "0.3"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
img.pro_50pctdown2up: "2"
|
||||
img.pro_free2up: "2"
|
||||
img.pro_2up: "2"
|
||||
"*": "1"
|
||||
|
||||
220
src/Jackett.Common/Definitions/hdforever.yml
Normal file
220
src/Jackett.Common/Definitions/hdforever.yml
Normal file
@@ -0,0 +1,220 @@
|
||||
---
|
||||
site: hdforever
|
||||
name: HD-Forever
|
||||
description: "A french private HD tracker"
|
||||
language: fr-fr
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hdf.world
|
||||
|
||||
caps:
|
||||
categories:
|
||||
1: Movies
|
||||
2: Movies
|
||||
3: Movies
|
||||
4: Movies
|
||||
5: TV
|
||||
6: TV/Anime
|
||||
7: Movies
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
keeplogged: 1
|
||||
login: "Log in"
|
||||
error:
|
||||
- selector: form#loginform > span.warning
|
||||
test:
|
||||
path: torrents.php
|
||||
|
||||
ratio:
|
||||
path: torrents.php
|
||||
selector: li#stats_ratio > span
|
||||
|
||||
search:
|
||||
path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Query.Keywords }}"
|
||||
order_by: time
|
||||
order_way: desc
|
||||
action: basic
|
||||
searchsubmit: 1
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.torrent
|
||||
fields:
|
||||
download:
|
||||
selector: a[href^="torrents.php?action=download&"]
|
||||
attribute: href
|
||||
title:
|
||||
selector: div.group_info
|
||||
remove: span:nth-child(1), div.tags
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\n", ""]
|
||||
- name: re_replace
|
||||
args: ["^(.+) (.+)", "$2-$1"]
|
||||
- name: replace
|
||||
args: [" ", " "]
|
||||
- name: replace
|
||||
args: ["Blu-Ray Original", "Complete.BluRay"]
|
||||
- name: replace
|
||||
args: ["Blu-Ray Remux", "Remux"]
|
||||
- name: replace
|
||||
args: ["Blu-Ray Rip", "BluRay.Rip"]
|
||||
- name: replace
|
||||
args: ["mHD", "mHD.BluRay.Rip"]
|
||||
- name: replace
|
||||
args: ["/ DC", "/ Directors.Cut"]
|
||||
- name: replace
|
||||
args: ["/ VL", "/ Extended"]
|
||||
- name: replace
|
||||
args: ["/ RM", "/ Remastered"]
|
||||
- name: replace
|
||||
args: ["/ UC", "/ Uncut"]
|
||||
- name: replace
|
||||
args: ["/ ES", "/ Special.Edition"]
|
||||
- name: replace
|
||||
args: [" / Cust_sub", ""]
|
||||
- name: replace
|
||||
args: [" / Cust", ""]
|
||||
- name: replace
|
||||
args: ["/ UN", "/ Unrated"]
|
||||
- name: replace
|
||||
args: [" / Crit", ""]
|
||||
- name: replace
|
||||
args: [" / WAC", ""]
|
||||
- name: replace
|
||||
args: [" / MoC", ""]
|
||||
- name: replace
|
||||
args: [" / BFI", ""]
|
||||
- name: replace
|
||||
args: [" / MUET", ""]
|
||||
- name: replace
|
||||
args: ["/ Exc NF", "/ NF"]
|
||||
- name: replace
|
||||
args: ["/ Exc AMZ", "/ AMZ"]
|
||||
- name: replace
|
||||
args: ["/ Exc YOU", "/ YT"]
|
||||
- name: replace
|
||||
args: [" / ↓25%", ""]
|
||||
- name: replace
|
||||
args: [" / ↓50%", ""]
|
||||
- name: replace
|
||||
args: [" / ↓75%", ""]
|
||||
- name: replace
|
||||
args: [" / Free", ""]
|
||||
- name: replace
|
||||
args: [" / Complété!", ""]
|
||||
- name: replace
|
||||
args: [" / ", "."]
|
||||
- name: trim
|
||||
- name: replace
|
||||
args: [".VFF.VFQ.StFr.MULTI", ".MULTI.VFF.VFQ"]
|
||||
- name: replace
|
||||
args: [".VFF.VFQ.VO.StFr.MULTI", ".MULTI.VFF.VFQ"]
|
||||
- name: replace
|
||||
args: [".VFF.VFQ.VO.StFr", ".MULTI.VFF.VFQ"]
|
||||
- name: replace
|
||||
args: [".VFQ.VO.StFr", ".MULTI.VFQ"]
|
||||
- name: replace
|
||||
args: [".VO.VFI.StFr", ".MULTI"]
|
||||
- name: replace
|
||||
args: [".VO.VF?.StFr", ".MULTI"]
|
||||
- name: replace
|
||||
args: [".VFF.VO.StFr", ".MULTI.VFF"]
|
||||
- name: replace
|
||||
args: [".VOF.StFr", ".FRENCH"]
|
||||
- name: replace
|
||||
args: [".VFQ.StFr", ".FRENCH"]
|
||||
- name: replace
|
||||
args: [".VFF.StFr.MULTI", ".MULTI.VFF"]
|
||||
- name: replace
|
||||
args: [".VFF.StFr", ".FRENCH"]
|
||||
- name: replace
|
||||
args: [".VFI.MULTI", ".MULTI"]
|
||||
- name: replace
|
||||
args: [".VO.StFr", ".VOSTFR"]
|
||||
- name: replace
|
||||
args: [".VFQ.VO", ".MULTI.VFQ"]
|
||||
- name: replace
|
||||
args: [".VFF.VO", ".MULTI.VFF"]
|
||||
- name: replace
|
||||
args: [".VO.VF?.StFr", ".MULTI"]
|
||||
- name: replace
|
||||
args: [".VFI.StFr", ".FRENCH"]
|
||||
- name: replace
|
||||
args: [".VOF.MULTI", ".MULTI.FRENCH"]
|
||||
- name: replace
|
||||
args: [".VOF", ".FRENCH"]
|
||||
- name: replace
|
||||
args: [".VFQ.MULTI", ".MULTI.VFQ"]
|
||||
description:
|
||||
selector: div.group_info
|
||||
details:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
comments:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: td.cats_col
|
||||
case:
|
||||
div.cats_film: 1
|
||||
div.cats_dessinanimé: 2
|
||||
div.cats_bonusbd: 3
|
||||
div.cats_concert: 4
|
||||
div.cats_série: 5
|
||||
div.cats_sérieanim: 6
|
||||
div.cats_doc: 7
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Il y a ", ""]
|
||||
- name: replace
|
||||
args: ["heures", "hours"]
|
||||
- name: replace
|
||||
args: ["heure", "hour"]
|
||||
- name: replace
|
||||
args: ["jours", "days"]
|
||||
- name: replace
|
||||
args: ["jour", "day"]
|
||||
- name: replace
|
||||
args: ["semaines", "weeks"]
|
||||
- name: replace
|
||||
args: ["semaine", "week"]
|
||||
- name: replace
|
||||
args: ["mois", "months"]
|
||||
- name: replace
|
||||
args: ["ans", "years"]
|
||||
- name: replace
|
||||
args: ["an", "year"]
|
||||
- name: append
|
||||
args: " ago"
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"div.group_info:contains(\"↓Free\")": "0"
|
||||
"div.group_info:contains(\"↓75%\")": "0.75"
|
||||
"div.group_info:contains(\"↓50%\")": "0.50"
|
||||
"div.group_info:contains(\"↓25%\")": "0.25"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -132,7 +132,7 @@
|
||||
- name: prepend
|
||||
args: "magnet:?xt=urn:btih:"
|
||||
- name: append
|
||||
args: "&dn={{ .Result.title }}.torrent"
|
||||
args: "&dn={{ .Result.title }}.torrent&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://tracker.opentrackr.org:1337"
|
||||
size:
|
||||
selector: td:nth-child(3) font
|
||||
date:
|
||||
|
||||
@@ -91,7 +91,11 @@
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
test:
|
||||
|
||||
74
src/Jackett.Common/Definitions/monova.yml
Normal file
74
src/Jackett.Common/Definitions/monova.yml
Normal file
@@ -0,0 +1,74 @@
|
||||
---
|
||||
site: monova
|
||||
name: Monova
|
||||
description: "Monova is a Public torrent index."
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://monova.org/
|
||||
- https://monova.to/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
"video-camera": Movies
|
||||
"music": Audio
|
||||
"book": Books
|
||||
"gamepad": PC/Games
|
||||
"cog": PC/0day
|
||||
"venus-mars": XXX
|
||||
"list": Other
|
||||
"picture-o": Other/Misc
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings: []
|
||||
|
||||
download:
|
||||
selector: a#download-file
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://monova.to/search?term=vikings+s05e05
|
||||
# https://monova.to/video
|
||||
- path: "{{if .Keywords}}/search?term={{.Keywords}}{{else}}/video{{end}}"
|
||||
rows:
|
||||
selector: tr.desktop:not(tr.success)
|
||||
filters:
|
||||
- name: andmatch
|
||||
fields:
|
||||
title:
|
||||
selector: td.torrent_name a
|
||||
category:
|
||||
selector: td.torrent_name i
|
||||
attribute: class
|
||||
filters:
|
||||
# remove fa fa- prefix
|
||||
- name: replace
|
||||
args: ["fa fa-", ""]
|
||||
details:
|
||||
selector: td.torrent_name a
|
||||
attribute: href
|
||||
download:
|
||||
selector: td.torrent_name a
|
||||
attribute: href
|
||||
size:
|
||||
selector: td.center-align
|
||||
seeders:
|
||||
text: "1"
|
||||
leechers:
|
||||
text: "1"
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
date:
|
||||
selector: td.torrent_name
|
||||
remove: a
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["added ",""]
|
||||
- name: timeago
|
||||
126
src/Jackett.Common/Definitions/pt99.yml
Normal file
126
src/Jackett.Common/Definitions/pt99.yml
Normal file
@@ -0,0 +1,126 @@
|
||||
---
|
||||
site: pt99
|
||||
name: PT99
|
||||
description: "PT99 is a CHINESE Private Torrent Tracker for 0DAY / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://pt.j99.info/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies(电影)"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries(记录片)"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Animations(动漫)"}
|
||||
- {id: 402, cat: TV, desc: "TV Series(电视剧)"}
|
||||
- {id: 403, cat: TV/OTHER, desc: "TV Shows(电视节目)"}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Videos(音乐视频)"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports(体育节目)"}
|
||||
- {id: 408, cat: Audio/Lossless, desc: "HQ Audio(高品质音频)"}
|
||||
- {id: 410, cat: Audio, desc: "Music(音乐)"}
|
||||
- {id: 411, cat: PC, desc: "Software(软件)"}
|
||||
- {id: 412, cat: Books, desc: "Document(文档)"}
|
||||
- {id: 413, cat: PC/Games, desc: "PC_Game(PC游戏)"}
|
||||
- {id: 414, cat: Console, desc: "Other_Game(其他游戏)"}
|
||||
- {id: 409, cat: Other, desc: "Misc(其他)"}
|
||||
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
ratio:
|
||||
path: index.php
|
||||
selector: table#info_block
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["分享率:","Ratio:"] # for simplified chinese language setting
|
||||
- name: regexp
|
||||
args: "Ratio:\\s(.*?)\\s\\s"
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
|
||||
incldead: "0"
|
||||
spstate: "0"
|
||||
inclbookmarked: "0"
|
||||
search: "{{if .Query.IMDBID}}{{.Query.IMDBID}}{{else}}{{.Keywords}}{{end}}"
|
||||
search_area: "{{if .Query.IMDBID}}4{{else}}0{{end}}"
|
||||
search_mode: "0"
|
||||
|
||||
rows:
|
||||
selector: table.torrents tr:has(a[href^="?cat="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
title:
|
||||
selector: td.progresstd a
|
||||
attribute: title
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php", "download.php"]
|
||||
imdb:
|
||||
selector: a[href^="http://www.imdb.com/title/tt"]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
date:
|
||||
selector: td:nth-child(4) span
|
||||
attribute: title
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: "0"
|
||||
img.pro_free2up: "0"
|
||||
img.pro_50pctdown: "0.5"
|
||||
img.pro_50pctdown2up: "0.5"
|
||||
img.pro_30pctdown: "0.3"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: "2"
|
||||
img.pro_free2up: "2"
|
||||
img.pro_2up: "2"
|
||||
"*": "1"
|
||||
104
src/Jackett.Common/Definitions/pwtorrents.yml
Normal file
104
src/Jackett.Common/Definitions/pwtorrents.yml
Normal file
@@ -0,0 +1,104 @@
|
||||
---
|
||||
site: pwtorrents
|
||||
name: PWTorrents
|
||||
description: "PWTorrents (PWT) is a Private Torrent Tracker for PROFESSIONAL WRESTLING"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://pwtorrents.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: TV/Sport, desc: "Boxing"}
|
||||
- {id: 2, cat: TV/Sport, desc: "Documentaries"}
|
||||
- {id: 3, cat: TV/Sport, desc: "DVD"}
|
||||
- {id: 4, cat: TV/Sport, desc: "ECW"}
|
||||
- {id: 5, cat: TV/Sport, desc: "Games and Software"}
|
||||
- {id: 6, cat: TV/Sport, desc: "Indy's"}
|
||||
- {id: 7, cat: TV/Sport, desc: "Matches"}
|
||||
- {id: 8, cat: TV/Sport, desc: "Misc."}
|
||||
- {id: 9, cat: TV/Sport, desc: "MMA"}
|
||||
- {id: 11, cat: TV/Sport, desc: "Puro"}
|
||||
- {id: 10, cat: TV/Sport, desc: "PWT Packs"}
|
||||
- {id: 12, cat: TV/Sport, desc: "Ring Of Honor"}
|
||||
- {id: 13, cat: TV/Sport, desc: "TNA PPV's"}
|
||||
- {id: 14, cat: TV/Sport, desc: "TNA Weekly"}
|
||||
- {id: 15, cat: TV/Sport, desc: "WCW"}
|
||||
- {id: 18, cat: TV/Sport, desc: "WWE Network"}
|
||||
- {id: 16, cat: TV/Sport, desc: "WWE PPV's"}
|
||||
- {id: 17, cat: TV/Sport, desc: "WWE Weekly"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table.main:contains("Login failed!")
|
||||
test:
|
||||
path: my.php
|
||||
|
||||
ratio:
|
||||
path: browse.php
|
||||
selector: span.smallfont:has(a[href="logout.php"])
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Ratio:\\s(.*?)\\s\\s"
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://pwtorrents.net/browse.php?c18=1&c16=1&c17=1&incldead=0
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
incldead: "1"
|
||||
search: "{{ .Keywords }}"
|
||||
sort: "4" # date
|
||||
type: "desc"
|
||||
rows:
|
||||
selector: table[border="1"][cellspacing="0"][cellpadding="5"] tr:has(a[href^="download.php?id="])
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
grabs:
|
||||
selector: td:nth-child(6) a
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["times", ""]
|
||||
- name: replace
|
||||
args: ["time", ""]
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "2006-01-0215:04:05"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -30,6 +30,10 @@
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://rutor.info/
|
||||
- http://new-rutor.org/
|
||||
- http://live-rutor.org/
|
||||
|
||||
caps:
|
||||
# unfortunately RuTor does not display categories anywhere in its search results page :-(
|
||||
@@ -35,12 +37,12 @@
|
||||
search:
|
||||
paths:
|
||||
# http://rutor.info/search/0/0/000/0/gotham%2004x01
|
||||
- path: "{{ if .Query.Q }}search/0/0/{{ .Config.method }}00/0/{{ .Query.Q }}{{else}}top{{end}}"
|
||||
- path: "{{ if .Keywords }}search/0/0/{{ .Config.method }}00/0/{{ .Keywords }}/{{else}}top/{{end}}"
|
||||
rows:
|
||||
selector: table > tbody > tr:has(td:has(a.downgif))
|
||||
selector: tr:has(td:has(a.downgif))
|
||||
fields:
|
||||
title:
|
||||
selector: td:nth-of-type(2) a:nth-of-type(3)
|
||||
selector: td:nth-of-type(2) a[href^="/torrent/"]
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: [".+\\/\\s([^а-яА-я\\/]+)\\s.*\\[(?:S*(\\d+))(?:x*(\\d+-*\\d*).*)*\\].*\\)\\s+(.+)\\s+(?:\\||от)\\s*(.+)","$1 - S$2E$3 - rus - $4 - $5"]
|
||||
@@ -49,13 +51,14 @@
|
||||
- name: replace
|
||||
args: ["Кураж-Бамбей", "kurazh"]
|
||||
details:
|
||||
selector: td:nth-of-type(2) a:nth-of-type(3)
|
||||
selector: td:nth-of-type(2) a[href^="/torrent/"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: td:nth-of-type(2) a:nth-of-type(1)
|
||||
selector: td:nth-of-type(2) a.downgif
|
||||
attribute: href
|
||||
magnet:
|
||||
selector: td:nth-of-type(2) a:nth-of-type(2)
|
||||
optional: true
|
||||
selector: td:nth-of-type(2) a[href^="magnet:?xt="]
|
||||
attribute: href
|
||||
date:
|
||||
# 27 Окт 17
|
||||
@@ -108,9 +111,9 @@
|
||||
optional: true
|
||||
selector: td:contains(\00a0B)
|
||||
seeders:
|
||||
selector: td span:has(img[alt="S"])
|
||||
selector: td span.green
|
||||
leechers:
|
||||
selector: td:has(img[alt="L"]) span
|
||||
selector: td span.red
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
|
||||
@@ -35,6 +35,10 @@
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
|
||||
@@ -80,6 +80,42 @@
|
||||
search:
|
||||
paths:
|
||||
- path: /index.php
|
||||
inputs:
|
||||
pages: 1
|
||||
- path: /index.php
|
||||
inputs:
|
||||
pages: 2
|
||||
- path: /index.php
|
||||
inputs:
|
||||
pages: 3
|
||||
- path: /index.php
|
||||
inputs:
|
||||
pages: 4
|
||||
- path: /index.php
|
||||
inputs:
|
||||
pages: 5
|
||||
- path: /index.php
|
||||
inputs:
|
||||
pages: 6
|
||||
- path: /index.php
|
||||
inputs:
|
||||
pages: 7
|
||||
- path: /index.php
|
||||
inputs:
|
||||
pages: 8
|
||||
- path: /index.php
|
||||
inputs:
|
||||
pages: 9
|
||||
- path: /index.php
|
||||
inputs:
|
||||
pages: 10
|
||||
inputs:
|
||||
search: "{{ .Keywords }}"
|
||||
category: "{{range .Categories}}{{.}};{{end}}"
|
||||
page: torrents
|
||||
active: 0
|
||||
order: 3
|
||||
by: 2
|
||||
keywordsfilters:
|
||||
- name: diacritics
|
||||
args: replace
|
||||
@@ -87,11 +123,6 @@
|
||||
args: ["(?i)\\bS0*(\\d+)\\b", "$1"]
|
||||
- name: re_replace # S01E01 to 1 1
|
||||
args: ["(?i)\\bS0*(\\d+)E0*(\\d+)\\b", "$1 $2"]
|
||||
inputs:
|
||||
search: "{{ .Keywords }}"
|
||||
category: "{{range .Categories}}{{.}};{{end}}"
|
||||
page: torrents
|
||||
active: 0
|
||||
rows:
|
||||
selector: div.b-content > table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
|
||||
filters:
|
||||
|
||||
74
src/Jackett.Common/Definitions/shokweb.yml
Normal file
74
src/Jackett.Common/Definitions/shokweb.yml
Normal file
@@ -0,0 +1,74 @@
|
||||
---
|
||||
site: shokweb
|
||||
name: shokweb
|
||||
description: "shokweb is a CHINESE Public tracker"
|
||||
language: zh-CN
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://shokweb.com/
|
||||
certificates:
|
||||
- ba7fb6290a9d7d821e73efb0eac4ed95a7fd2d11 # expired
|
||||
|
||||
settings: []
|
||||
|
||||
caps:
|
||||
categories:
|
||||
"影视": Movies # Movie
|
||||
"安装包": PC/ISO # installation package
|
||||
"其他": Other # Other
|
||||
"音乐": Audio # Music
|
||||
"文档书籍": Books # Documents Book
|
||||
"压缩文件": PC # Compressed Files
|
||||
"图像": Other/Misc # Image
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://shokweb.com/ (latest)
|
||||
# https://shokweb.com/search/supergirl%20s04e01 (search)
|
||||
- path: "{{if .Keywords}}{{.Keywords}}{{else}}{{end}}"
|
||||
rows:
|
||||
selector: div:has(a[href^="magnet:?"])
|
||||
filters:
|
||||
- name: andmatch
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="/post/"]
|
||||
category:
|
||||
selector: p:has(img) span:nth-last-child(4)
|
||||
details:
|
||||
selector: a[href^="/post/"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="magnet:?"]
|
||||
attribute: href
|
||||
size:
|
||||
selector: p:has(img) span:nth-last-child(2)
|
||||
grabs:
|
||||
selector: p:has(img) span:nth-last-child(5)
|
||||
date:
|
||||
selector: p:has(img) span:nth-last-child(1)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["时", " hours"]
|
||||
- name: replace
|
||||
args: ["分", " minutes"]
|
||||
- name: replace
|
||||
args: ["天", " days"]
|
||||
- name: replace
|
||||
args: ["年", " year"]
|
||||
- name: replace
|
||||
args: ["月", " months"]
|
||||
- name: replace
|
||||
args: ["前", " ago"]
|
||||
seeders:
|
||||
text: "1"
|
||||
leechers:
|
||||
text: "1"
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
@@ -28,7 +28,15 @@
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings: []
|
||||
settings:
|
||||
- name: itorrents-links
|
||||
type: checkbox
|
||||
label: Add download links via itorrents.org
|
||||
default: true
|
||||
- name: info
|
||||
type: info
|
||||
label: ITorrents Note
|
||||
default: Without the itorrents option only magnet links will be provided.
|
||||
|
||||
search:
|
||||
# https://www.skytorrents.lol/?query=mr+mercedes+s02e05&sort=created
|
||||
@@ -54,9 +62,11 @@
|
||||
details:
|
||||
selector: td a
|
||||
attribute: href
|
||||
download:
|
||||
download-itorrents:
|
||||
selector: a[href^="//itorrents"]
|
||||
attribute: href
|
||||
download:
|
||||
text: "{{if .Config.itorrents-links}}{{ .Result.download-itorrents }}{{else}}{{end}}"
|
||||
magnet:
|
||||
selector: a[href^="magnet:?"]
|
||||
attribute: href
|
||||
|
||||
@@ -86,6 +86,10 @@
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
|
||||
148
src/Jackett.Common/Definitions/takeabyte.yml
Normal file
148
src/Jackett.Common/Definitions/takeabyte.yml
Normal file
@@ -0,0 +1,148 @@
|
||||
---
|
||||
site: takeabyte
|
||||
name: TakeaByte
|
||||
description: "TakeaByte is a NORDIC Private Torrent Tracker for 0DAY / GENERAL"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://takeabyte-nordic.org/
|
||||
certificates:
|
||||
- 8b88d216d270b9b672ba44fbbdd5ca3d8919e5fd # expired Nov 2015
|
||||
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 3, cat: Movies, desc: "Movies"}
|
||||
- {id: 9, cat: Movies/3D, desc: "Movies 3D"}
|
||||
- {id: 47, cat: Movies/BluRay, desc: "Movies BD 1080p"}
|
||||
- {id: 21, cat: Movies/Other, desc: "Movies Boxset"}
|
||||
- {id: 43, cat: Movies, desc: "Movies TBN"}
|
||||
- {id: 40, cat: Movies, desc: "Movies Danish"}
|
||||
- {id: 34, cat: Movies/DVD, desc: "Movies DVD-R"}
|
||||
- {id: 10, cat: Movies/SD, desc: "Movies XviD"}
|
||||
- {id: 19, cat: Movies, desc: "Movies Kids"}
|
||||
- {id: 41, cat: Movies, desc: "Movies Swedish"}
|
||||
- {id: 20, cat: Movies, desc: "Movies MP4"}
|
||||
- {id: 49, cat: Movies, desc: "Movies Nordisk"}
|
||||
- {id: 42, cat: Movies, desc: "Movies Norway"}
|
||||
- {id: 11, cat: Movies/HD, desc: "HD 1080p"}
|
||||
- {id: 25, cat: Movies/HD, desc: "HD-1080p Custom"}
|
||||
- {id: 14, cat: Movies/HD, desc: "HD-720p"}
|
||||
- {id: 26, cat: Movies/HD, desc: "HD-720p Custom"}
|
||||
- {id: 23, cat: Audio/Other, desc: "Music Boxset"}
|
||||
- {id: 35, cat: Audio/Lossless, desc: "Music Flac"}
|
||||
- {id: 22, cat: Audio/MP3, desc: "Music MP3"}
|
||||
- {id: 24, cat: Audio/Video, desc: "Music Video"}
|
||||
- {id: 32, cat: Audio/Audiobook, desc: "Audio-Books"}
|
||||
- {id: 33, cat: Books/Ebook, desc: "E-Books"}
|
||||
- {id: 30, cat: PC/Mac, desc: "Apps Mac"}
|
||||
- {id: 31, cat: PC/Phone-Other, desc: "Apps Mobile"}
|
||||
- {id: 1, cat: PC/0day, desc: "Apps Windows"}
|
||||
- {id: 15, cat: Console, desc: "Games Other"}
|
||||
- {id: 45, cat: Console/NDS, desc: "Games NDS"}
|
||||
- {id: 13, cat: Console, desc: "Games Others"}
|
||||
- {id: 37, cat: Console/PS Vita, desc: "Games PS2"}
|
||||
- {id: 38, cat: Console/PS3, desc: "Games PS3"}
|
||||
- {id: 36, cat: Console/PSP, desc: "Games PSP"}
|
||||
- {id: 7, cat: Console/Wii, desc: "Games Wii"}
|
||||
- {id: 39, cat: Console/Xbox, desc: "Games XBOX"}
|
||||
- {id: 8, cat: PC/Games, desc: "Games PC"}
|
||||
- {id: 12, cat: PC/Games, desc: "Games PC Rips"}
|
||||
- {id: 46, cat: Other, desc: "Wallpapers"}
|
||||
- {id: 27, cat: TV/Other, desc: "TV Boxset"}
|
||||
- {id: 28, cat: TV, desc: "TV-Series"}
|
||||
- {id: 52, cat: XXX, desc: "XXX"}
|
||||
- {id: 53, cat: XXX/Packs, desc: "XXX-Pack"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
returnto: "/browse.php"
|
||||
error:
|
||||
- selector: h2:contains("Login failed!")
|
||||
message:
|
||||
selector: table tr td.colhead2
|
||||
test:
|
||||
path: /
|
||||
selector: :has(a[href^="logout.php?hash_please="])
|
||||
|
||||
search:
|
||||
paths:
|
||||
# http://takeabyte-nordic.org/browse.php?search=first+man&searchin=title&incldead=0
|
||||
# http://takeabyte-nordic.org/browse.php?c9=1&c47=1&c21=1&c11=1&c25=1&c14=1&c26=1&c3=1&search=%22first+man%22&searchin=title&incldead=0
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
search: "{{.Keywords}}"
|
||||
searchin: "title"
|
||||
incldead: 1
|
||||
rows:
|
||||
selector: table tr:has(a[href^="browse.php?cat="]):has(a[href^="details.php?id="])
|
||||
filters:
|
||||
- name: andmatch
|
||||
fields:
|
||||
title:
|
||||
selector: a[href^="details.php?id="] b
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
download:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["details.php?id=", "download.php?torrent="]
|
||||
size:
|
||||
selector: td:nth-last-child(4)
|
||||
files:
|
||||
selector: td:nth-last-child(7)
|
||||
grabs:
|
||||
selector: td:nth-last-child(3)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["times", ""]
|
||||
- name: replace
|
||||
args: ["time", ""]
|
||||
# 2 flavours of dates
|
||||
date:
|
||||
# Today<br />13:20:59
|
||||
# Yesterday<br />08:03:01
|
||||
optional: true
|
||||
selector: td:nth-last-child(5):contains("day")
|
||||
date:
|
||||
# Feb 14 2019<br />14:20:12
|
||||
optional: true
|
||||
selector: td:nth-last-child(5):not(:contains("day"))
|
||||
filters:
|
||||
- name: regex # drop break in between date and time
|
||||
args: ["(.+?)<[^>]*>(.+?)","$1 $2"]
|
||||
- name: dateparse
|
||||
args: "Jan 2 2006 15:04:05"
|
||||
seeders:
|
||||
selector: td:nth-last-child(2)
|
||||
leechers:
|
||||
selector: td:nth-last-child(1)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"b:contains(\"[Free and Double]\")": "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"b:contains(\"[Free and Double]\")": "2"
|
||||
"*": "1"
|
||||
@@ -6,6 +6,8 @@
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://tntvillage.scambioetico.org/
|
||||
legacylinks:
|
||||
- http://www.tntvillage.scambioetico.org/
|
||||
|
||||
caps:
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.torlock2.com/
|
||||
legacylinks:
|
||||
- https://www.torlock.com/
|
||||
- https://torlock.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://www.torrent9.uno/
|
||||
- https://wvw.torrent9.uno/
|
||||
legacylinks:
|
||||
- http://www.torrent9.ec/
|
||||
- http://www.torrent9.red/
|
||||
@@ -22,6 +22,7 @@
|
||||
- https://www.torrent9.ph/
|
||||
- https://ww1.torrent9.ph/
|
||||
- https://torrent9.ga/
|
||||
- https://www.torrent9.uno/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -5,10 +5,13 @@
|
||||
language: fr-fr
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://www.torrent9.ch/
|
||||
- https://www2.torrent9.ch/
|
||||
legacylinks:
|
||||
- https://www.torrents9.pw/
|
||||
- https://www.torrent9.ch/
|
||||
- https://www1.torrent9.ch/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -35,16 +35,16 @@
|
||||
selector: article
|
||||
fields:
|
||||
title:
|
||||
selector: h2 a
|
||||
selector: h1.entry-title a
|
||||
category:
|
||||
text: "1"
|
||||
details:
|
||||
selector: h2 a
|
||||
selector: h1.entry-title a
|
||||
attribute: href
|
||||
description:
|
||||
selector: p
|
||||
download:
|
||||
selector: h2 a
|
||||
selector: h1.entry-title a
|
||||
attribute: href
|
||||
size:
|
||||
text: "500 MB"
|
||||
@@ -53,7 +53,10 @@
|
||||
leechers:
|
||||
text: "1"
|
||||
date:
|
||||
text: now
|
||||
selector: span.posted-on a time
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "January 2, 2006"
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
|
||||
119
src/Jackett.Common/Definitions/torrentfunk.yml
Normal file
119
src/Jackett.Common/Definitions/torrentfunk.yml
Normal file
@@ -0,0 +1,119 @@
|
||||
---
|
||||
site: torrentfunk
|
||||
name: TorrentFunk
|
||||
description: "TorrentFunk is a Public torrent index"
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.torrentfunk.com/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
1: Movies
|
||||
2: Audio
|
||||
3: TV
|
||||
4: PC/Games
|
||||
5: PC
|
||||
6: TV/Anime
|
||||
7: XXX
|
||||
8: Other
|
||||
9: Other
|
||||
10: Books
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: category
|
||||
type: select
|
||||
label: Category
|
||||
default: "all"
|
||||
options:
|
||||
"all": "All"
|
||||
"movie": "Movies"
|
||||
"music": "Music"
|
||||
"television": "TV"
|
||||
"game": "Games"
|
||||
"software": "Software"
|
||||
"anime": "Anime"
|
||||
"ebook": "eBooks"
|
||||
"adult": "Adult"
|
||||
- name: verified
|
||||
type: select
|
||||
label: Verified
|
||||
default: "_"
|
||||
options:
|
||||
"_": "Any"
|
||||
"on": "Verified Only"
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort Desc
|
||||
default: "added"
|
||||
options:
|
||||
"added": "Date"
|
||||
"seeds": "Seeders"
|
||||
"peers": "Leechers"
|
||||
"size": "Size"
|
||||
"name": "Title"
|
||||
|
||||
download:
|
||||
selector: a[href^="/tor/"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://www.torrentfunk.com/all/torrents/vikings.html?v=&smi=&sma=&i=50&sort=added&o=desc
|
||||
- path: "{{.Config.category}}/torrents/{{.Keywords}}.html?v={{re_replace .Config.verified \"_\" \"\"}}&smi=&sma=&i=50&sort={{.Config.sort}}&o=desc"
|
||||
|
||||
rows:
|
||||
selector: table.tmain tbody tr:has(a[href^="/torrent/"])
|
||||
filters:
|
||||
- name: andmatch
|
||||
fields:
|
||||
title:
|
||||
selector: div a[href^="/torrent/"]
|
||||
category:
|
||||
selector: td[class^="tv"], td[class^="tn"]
|
||||
attribute: class
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(\\d)"
|
||||
details:
|
||||
selector: div a[href^="/torrent/"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: div a[href^="/torrent/"]
|
||||
attribute: href
|
||||
# two types of dates
|
||||
date:
|
||||
# Today
|
||||
optional: true
|
||||
selector: td:nth-child(2):contains("Today")
|
||||
filters:
|
||||
- name: fuzzytime
|
||||
date:
|
||||
# Yesterday
|
||||
optional: true
|
||||
selector: td:nth-child(2):contains("Yesterday")
|
||||
filters:
|
||||
- name: fuzzytime
|
||||
date:
|
||||
# 7 Jul
|
||||
# 25 Dec
|
||||
selector: td:nth-child(2):contains(" ")
|
||||
optional: true
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "2 Jan"
|
||||
size:
|
||||
selector: td:nth-child(3)
|
||||
seeders:
|
||||
selector: td:nth-child(4)
|
||||
leechers:
|
||||
selector: td:nth-child(5)
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
100
src/Jackett.Common/Definitions/torrentkitty.yml
Normal file
100
src/Jackett.Common/Definitions/torrentkitty.yml
Normal file
@@ -0,0 +1,100 @@
|
||||
---
|
||||
site: torrentkitty
|
||||
name: TorrentKitty
|
||||
description: "TorrentKitty is a CHINESE Public torrent search engine."
|
||||
language: cn
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://cntorrentkitty.com/
|
||||
- http://cntorrentkitty.xyz/
|
||||
|
||||
settings:
|
||||
- name: category
|
||||
type: select
|
||||
label: Category
|
||||
default: "0"
|
||||
options:
|
||||
"0": "All"
|
||||
"1": "Other"
|
||||
"2": "Video"
|
||||
"3": "Music"
|
||||
"4": "Documents"
|
||||
"5": "Software"
|
||||
"6": "Compress"
|
||||
"7": "Images"
|
||||
"8": "Image"
|
||||
|
||||
caps:
|
||||
categories:
|
||||
"[其他]": Other # other
|
||||
"[视频]": Movies # video
|
||||
"[音乐]": Audio # music
|
||||
"[文档]": Books # documents
|
||||
"[软件]": PC/0day # software
|
||||
"[压缩]": PC # compress
|
||||
"[图片]": Other/Misc # images
|
||||
"[映像]": Other/Misc # image
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
download:
|
||||
selector: a[href^="magnet:?"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# http://cntorrentkitty.com/tk/what%20men%20want/1-0-0.html (10 hits)
|
||||
# http://cntorrentkitty.com/newest/ (100 hits)
|
||||
# try and fetch at least 50 keyword results
|
||||
- path: "{{if .Keywords}}tk/{{.Keywords}}/1-0-{{.Config.category}}.html{{else}}newest/{{end}}"
|
||||
- path: "{{if .Keywords}}tk/{{.Keywords}}/2-0-{{.Config.category}}.html{{else}}{{end}}"
|
||||
- path: "{{if .Keywords}}tk/{{.Keywords}}/3-0-{{.Config.category}}.html{{else}}{{end}}"
|
||||
- path: "{{if .Keywords}}tk/{{.Keywords}}/4-0-{{.Config.category}}.html{{else}}{{end}}"
|
||||
- path: "{{if .Keywords}}tk/{{.Keywords}}/5-0-{{.Config.category}}.html{{else}}{{end}}"
|
||||
rows:
|
||||
selector: p.p1:not(p.filelist), p.p0:not(p.filelist)
|
||||
after: 1
|
||||
fields:
|
||||
category:
|
||||
selector: span:nth-child(1)
|
||||
title:
|
||||
selector: a[target="_blank"]
|
||||
details:
|
||||
selector: a[target="_blank"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[target="_blank"]
|
||||
attribute: href
|
||||
size:
|
||||
selector: b:contains(" GB"), b:contains(" MB"), b:contains(" KB")
|
||||
date:
|
||||
text: "now"
|
||||
date:
|
||||
selector: b:contains("收录"):contains(":")
|
||||
optional: true
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["收录",""]
|
||||
- name: dateparse
|
||||
args: "2006-01-02 15:04:05"
|
||||
date:
|
||||
selector: b:contains(收录):not(:contains(":"))
|
||||
optional: true
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["收录",""]
|
||||
- name: dateparse
|
||||
args: "2006-01-02"
|
||||
files:
|
||||
selector: b:contains("个文件")
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["个文件",""]
|
||||
seeders:
|
||||
text: "1"
|
||||
leechers:
|
||||
text: "1"
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
@@ -20,7 +20,11 @@
|
||||
- {id: 15, cat: Movies/DVD, desc: "Peliculas - DVDRip"}
|
||||
- {id: 71, cat: Movies/Other, desc: "Peliculas - Peliculas V.O."}
|
||||
- {id: 72, cat: Movies/3D, desc: "Peliculas - 3D"}
|
||||
- {id: 75, cat: Movies/HD, desc: "Peliculas - 4K"}
|
||||
- {id: 75, cat: Movies/UHD, desc: "Peliculas - 4K"}
|
||||
- {id: 80, cat: Movies/BluRay, desc: "Peliculas - JMBD"}
|
||||
- {id: 81, cat: Movies/UHD, desc: "Peliculas - 4K Remux"}
|
||||
- {id: 82, cat: Movies/BluRay, desc: "Peliculas - CUSTOM FULLBR"}
|
||||
- {id: 83, cat: Movies/UHD, desc: "Peliculas - 4K CUSTOM"}
|
||||
#Eml HDTeam
|
||||
- {id: 69, cat: Movies/BluRay, desc: "Eml HDTeam - FULLBR"}
|
||||
- {id: 68, cat: Movies/BluRay, desc: "Eml HDTeam - JMBD"}
|
||||
@@ -31,7 +35,7 @@
|
||||
- {id: 73, cat: Movies/3D, desc: "EML HDTeam - 3D"}
|
||||
- {id: 74, cat: Movies/DVD, desc: "EML HDTeam - DVD"}
|
||||
- {id: 77, cat: Movies/Other, desc: "EML HDTeam - Animacion"}
|
||||
- {id: 78, cat: Movies/HD, desc: "EML HDTeam - 4K"}
|
||||
- {id: 78, cat: Movies/UHD, desc: "EML HDTeam - 4K"}
|
||||
- {id: 79, cat: Movies/BluRay, desc: "EML HDTeam - CUSTOM BR"}
|
||||
#Series
|
||||
- {id: 50, cat: TV/HD, desc: "Series - Full BluRay"}
|
||||
@@ -39,6 +43,7 @@
|
||||
- {id: 20, cat: TV/SD, desc: "Series - HDRip"}
|
||||
- {id: 22, cat: TV/SD, desc: "Series - DVD"}
|
||||
- {id: 51, cat: TV/OTHER, desc: "Series - Otros Formatos"}
|
||||
- {id: 84, cat: TV/HD, desc: "Series - H265"}
|
||||
#Documentales
|
||||
- {id: 53, cat: TV/Documentary, desc: "Documentales - HD"}
|
||||
- {id: 52, cat: TV/Documentary, desc: "Documentales - SD"}
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
- name: prepend
|
||||
args: "magnet:?xt=urn:btih:"
|
||||
- name: append
|
||||
args: "&dn={{ .Result.magfile }}.torrent"
|
||||
args: "&dn={{ .Result.magfile }}.torrent&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://tracker.opentrackr.org:1337"
|
||||
category:
|
||||
optional: true
|
||||
selector: dt
|
||||
|
||||
117
src/Jackett.Common/Definitions/torrof.yml
Normal file
117
src/Jackett.Common/Definitions/torrof.yml
Normal file
@@ -0,0 +1,117 @@
|
||||
---
|
||||
site: torrof
|
||||
name: Torrof
|
||||
description: "Torrof (Torrentoff) is meta-search engine for torrents"
|
||||
language: en-us
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://www.torrof.com/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
"Software": PC
|
||||
"Book": Books
|
||||
"Video": Movies
|
||||
"Music": Audio
|
||||
"Other": Other
|
||||
"Picture": Other/Misc
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: category
|
||||
type: select
|
||||
label: Category
|
||||
default: "_"
|
||||
options:
|
||||
"_": "All"
|
||||
"Book": "Book"
|
||||
"Music": "Music"
|
||||
"Other": "Other"
|
||||
"Picture": "Picture"
|
||||
"Software": "Software"
|
||||
"Video": "Video"
|
||||
- name: verified
|
||||
type: select
|
||||
label: Verified
|
||||
default: "_"
|
||||
options:
|
||||
"_": "Any"
|
||||
"1": "Verified Only"
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort
|
||||
default: "_"
|
||||
options:
|
||||
"_": "Default"
|
||||
"creation_date desc": "Age desc"
|
||||
"creation_date asc": "Age asc"
|
||||
"total_size desc": "Size desc"
|
||||
"total_size asc": "Size asc"
|
||||
|
||||
download:
|
||||
selector: section.file-info a:nth-child(2)
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: "{{if .Keywords}}{{.Keywords}}{{else}}test{{end}}"
|
||||
method: post
|
||||
inputs:
|
||||
# torrof does not support trending/latest/new pages
|
||||
text: "{{if .Keywords}}{{.Keywords}}{{else}}test{{end}}"
|
||||
size: "0:inf"
|
||||
date: "0:inf"
|
||||
verified_only: "{{ re_replace .Config.verified \"_\" \"\" }}"
|
||||
category: "{{ re_replace .Config.category \"_\" \"\" }}"
|
||||
tags: ""
|
||||
mode: "titles"
|
||||
sort: "{{ re_replace .Config.sort \"_\" \"\" }}"
|
||||
page: "0"
|
||||
|
||||
rows:
|
||||
# ignore adverts
|
||||
selector: tr:has(a[href^="/view/"])
|
||||
filters:
|
||||
# torrof uses fuzzy search logic
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
title:
|
||||
selector: td:nth-child(2) a:nth-child(1)
|
||||
category:
|
||||
selector: td:nth-child(1) span
|
||||
attribute: title
|
||||
filters:
|
||||
# grab first word
|
||||
- name: split
|
||||
args: [" ", 0]
|
||||
details:
|
||||
selector: td:nth-child(2) a:nth-child(1)
|
||||
attribute: href
|
||||
download:
|
||||
selector: td:nth-child(2) a:nth-child(1)
|
||||
attribute: href
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "Jan 2006"
|
||||
size:
|
||||
selector: td:nth-child(3) span:nth-child(1)
|
||||
files:
|
||||
selector: td:nth-child(3) span:nth-last-child(1)
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" Files", ""]
|
||||
seeders:
|
||||
text: "1"
|
||||
leechers:
|
||||
text: "1"
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
171
src/Jackett.Common/Definitions/vanila.yml
Normal file
171
src/Jackett.Common/Definitions/vanila.yml
Normal file
@@ -0,0 +1,171 @@
|
||||
---
|
||||
site: vanila
|
||||
name: Vanila
|
||||
description: "Vanila is a RUSSIAN Semi-Private Torrent Tracker for MOVIES / TV / MUSIC"
|
||||
language: ru
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://vanila.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# TV
|
||||
- {id: 1252, cat: TV, desc: "All TV Shows"}
|
||||
- {id: 503, cat: TV, desc: "Russian TV Series"}
|
||||
- {id: 504, cat: TV, desc: "TV Series"}
|
||||
- {id: 1355, cat: TV/Foreign, desc: "Asian TV Series"}
|
||||
- {id: 1415, cat: TV/Foreign, desc: "Indian, Latina, Turc TV Series"}
|
||||
- {id: 585, cat: TV/Other, desc: "Video Lessons"}
|
||||
- {id: 1036, cat: TV/Sport, desc: "TV Sport"}
|
||||
# Movies
|
||||
- {id: 442, cat: Movies, desc: "All Movies"}
|
||||
- {id: 463, cat: Movies/HD, desc: "World Movies HD"}
|
||||
- {id: 962, cat: Movies/UHD, desc: "World Movies UHD"}
|
||||
- {id: 963, cat: Movies/3D, desc: "World Movies 3D"}
|
||||
- {id: 465, cat: Movies/Other, desc: "World Movies Collection"}
|
||||
- {id: 466, cat: Movies/DVD, desc: "World Movies DVD/BD Rip"}
|
||||
- {id: 199, cat: Movies/Other, desc: "World Cartoons"}
|
||||
- {id: 467, cat: Movies, desc: "Classic World Movies"}
|
||||
- {id: 1382, cat: Movies, desc: "CIS Movies"}
|
||||
- {id: 468, cat: Movies/Other, desc: "ART Movies"}
|
||||
- {id: 469, cat: Movies/Other, desc: "ART Movies Rip"}
|
||||
# Cartoons
|
||||
- {id: 28, cat: TV/Anime, desc: "All Cartoons/Anime"}
|
||||
- {id: 202, cat: TV/Anime, desc: "Cartoons"}
|
||||
- {id: 342, cat: TV/Anime, desc: "Cartoons - Disney/Pixar"}
|
||||
- {id: 893, cat: TV/Anime, desc: "Cartoons - Anime"}
|
||||
- {id: 200, cat: TV/Anime, desc: "Cartoons - Russian"}
|
||||
# Music
|
||||
- {id: 214, cat: Audio/MP3, desc: "All Lossy Music"}
|
||||
- {id: 165, cat: Audio/Lossless, desc: "All Lossless Music"}
|
||||
- {id: 139, cat: Audio/Video, desc: "Music Video"}
|
||||
- {id: 874, cat: Audio/Audiobook, desc: "Audiobook"}
|
||||
- {id: 7, cat: Audio/Other, desc: "Music Compilation"}
|
||||
# Books
|
||||
- {id: 536, cat: Books, desc: "All Books"}
|
||||
- {id: 537, cat: Books, desc: "Published Books"}
|
||||
- {id: 552, cat: Books/Magazines, desc: "Magazines"}
|
||||
- {id: 611, cat: Books/Technical, desc: "Technical"}
|
||||
# Other
|
||||
- {id: 3, cat: PC, desc: "PC Programs"}
|
||||
- {id: 4, cat: PC/Games, desc: "PC Games"}
|
||||
- {id: 5, cat: Console, desc: "Console Games"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
|
||||
login:
|
||||
path: ucp.php?mode=login
|
||||
method: form
|
||||
form: form#login
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: fieldset:has(div.error)
|
||||
test:
|
||||
path: /
|
||||
selector: :has(a[href^="./ucp.php?mode=logout&sid="])
|
||||
|
||||
download:
|
||||
selector: a[href^="./download/file.php?id="]:not(img)
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://vanila.org/search.php?sr=topics&sf=titleonly&tracker_search=torrent&keywords=venom&submit.x=0&submit.y=0
|
||||
- path: search.php
|
||||
inputs:
|
||||
sr: "topics"
|
||||
sf: "titleonly"
|
||||
tracker_search: "torrent"
|
||||
keywords: "{{if .Keywords }}{{.Keywords}}{{else}}test{{end}}"
|
||||
submit.x: "0"
|
||||
submit.y: "0"
|
||||
|
||||
rows:
|
||||
selector: li.row
|
||||
fields:
|
||||
title:
|
||||
selector: a.topictitle
|
||||
details:
|
||||
selector: a.topictitle
|
||||
attribute: href
|
||||
category:
|
||||
selector: a[href^="./viewforum.php?f="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: f
|
||||
download:
|
||||
selector: a.topictitle
|
||||
attribute: href
|
||||
banner:
|
||||
optional: true
|
||||
selector: img.tt_poster
|
||||
attribute: src
|
||||
size:
|
||||
selector: a[href^="./viewforum.php?f="] + b
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["ТБ", "TB"]
|
||||
- name: replace
|
||||
args: ["ГБ", "GB"]
|
||||
- name: replace
|
||||
args: ["МБ", "MB"]
|
||||
- name: replace
|
||||
args: ["КБ", "KB"]
|
||||
seeders:
|
||||
selector: dd.posts span.seed
|
||||
leechers:
|
||||
selector: dd.posts span.leech
|
||||
grabs:
|
||||
selector: dd.views span.complet
|
||||
date:
|
||||
# 12 янв 2019, 11:26
|
||||
selector: dt
|
||||
filters:
|
||||
# extract the date
|
||||
- name: regexp
|
||||
args: "(\\d{2} \\D{3} \\d{4}, \\d{2}:\\d{2})"
|
||||
# replace month abbreviations
|
||||
- name: replace
|
||||
args: ["янв", "Jan"]
|
||||
- name: replace
|
||||
args: ["фев", "Feb"]
|
||||
- name: replace
|
||||
args: ["мар", "Mar"]
|
||||
- name: replace
|
||||
args: ["апр", "Apr"]
|
||||
- name: replace
|
||||
args: ["май", "May"]
|
||||
- name: replace
|
||||
args: ["июн", "Jun"]
|
||||
- name: replace
|
||||
args: ["июл", "Jul"]
|
||||
- name: replace
|
||||
args: ["авг", "Aug"]
|
||||
- name: replace
|
||||
args: ["сен", "Sep"]
|
||||
- name: replace
|
||||
args: ["окт", "Oct"]
|
||||
- name: replace
|
||||
args: ["ноя", "Nov"]
|
||||
- name: replace
|
||||
args: ["дек", "Dec"]
|
||||
- name: dateparse
|
||||
args: "02 Jan 06, 15:04"
|
||||
downloadvolumefactor:
|
||||
text: "0"
|
||||
uploadvolumefactor:
|
||||
text: "1"
|
||||
138
src/Jackett.Common/Definitions/xwtorrents.yml
Normal file
138
src/Jackett.Common/Definitions/xwtorrents.yml
Normal file
@@ -0,0 +1,138 @@
|
||||
---
|
||||
site: xwtorrents
|
||||
name: XWtorrents
|
||||
description: "XtremeWrestlingTorrents (XWT) is a Private Torrent Tracker for PROFESSIONAL WRESTLING / MMA"
|
||||
language: en-us
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://xtremewrestlingtorrents.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 47, cat: TV/Sport, desc: "Boxing"}
|
||||
- {id: 14, cat: TV/Sport, desc: "Documentary"}
|
||||
- {id: 20, cat: TV/Sport, desc: "DVD"}
|
||||
- {id: 2, cat: TV/Sport, desc: "ECW Original"}
|
||||
- {id: 26, cat: TV/Sport, desc: "ECW Weekly"}
|
||||
- {id: 21, cat: TV/Sport, desc: "Int Indy's"}
|
||||
- {id: 69, cat: TV/Sport, desc: "Lucha Libre"}
|
||||
- {id: 70, cat: TV/Sport, desc: "Lucha Libre HD"}
|
||||
- {id: 23, cat: TV/Sport, desc: "Misc"}
|
||||
- {id: 24, cat: TV/Sport, desc: "MMA"}
|
||||
- {id: 59, cat: TV/Sport, desc: "MMA HD"}
|
||||
- {id: 30, cat: TV/Sport, desc: "Packs"}
|
||||
- {id: 68, cat: TV/Sport, desc: "Podcasts"}
|
||||
- {id: 29, cat: TV/Sport, desc: "Puro"}
|
||||
- {id: 18, cat: TV/Sport, desc: "ROH"}
|
||||
- {id: 52, cat: TV/Sport, desc: "ROH HD"}
|
||||
- {id: 45, cat: TV/Sport, desc: "Shoot Interviews"}
|
||||
- {id: 4, cat: TV/Sport, desc: "Single Matches"}
|
||||
- {id: 7, cat: TV/Sport, desc: "TNA Impact"}
|
||||
- {id: 49, cat: TV/Sport, desc: "TNA Impact HD"}
|
||||
- {id: 6, cat: TV/Sport, desc: "TNA PPV's"}
|
||||
- {id: 55, cat: TV/Sport, desc: "TNA PPV's HD"}
|
||||
- {id: 66, cat: TV/Sport, desc: "Total Divas"}
|
||||
- {id: 67, cat: TV/Sport, desc: "Total Divas HD"}
|
||||
- {id: 57, cat: TV/Sport, desc: "Tough Enough"}
|
||||
- {id: 58, cat: TV/Sport, desc: "Tough Enough HD"}
|
||||
- {id: 22, cat: TV/Sport, desc: "USA Indy's"}
|
||||
- {id: 12, cat: TV/Sport, desc: "WCW"}
|
||||
- {id: 71, cat: TV/Sport, desc: "Womens Wrestling"}
|
||||
- {id: 15, cat: TV/Sport, desc: "Wrestling Films"}
|
||||
- {id: 72, cat: TV/Sport, desc: "WWE 205 Live"}
|
||||
- {id: 73, cat: TV/Sport, desc: "WWE 205 Live HD"}
|
||||
- {id: 16, cat: TV/Sport, desc: "WWE Heat"}
|
||||
- {id: 63, cat: TV/Sport, desc: "WWE Main Event"}
|
||||
- {id: 64, cat: TV/Sport, desc: "WWE Network"}
|
||||
- {id: 65, cat: TV/Sport, desc: "WWE Network HD"}
|
||||
- {id: 46, cat: TV/Sport, desc: "WWE NXT"}
|
||||
- {id: 50, cat: TV/Sport, desc: "WWE NXT HD"}
|
||||
- {id: 9, cat: TV/Sport, desc: "WWE PPV's"}
|
||||
- {id: 56, cat: TV/Sport, desc: "WWE PPV's HD"}
|
||||
- {id: 10, cat: TV/Sport, desc: "WWE RAW"}
|
||||
- {id: 51, cat: TV/Sport, desc: "WWE RAW HD"}
|
||||
- {id: 11, cat: TV/Sport, desc: "WWE Smackdown"}
|
||||
- {id: 53, cat: TV/Sport, desc: "WWE Smackdown HD"}
|
||||
- {id: 43, cat: TV/Sport, desc: "WWE Superstars"}
|
||||
- {id: 54, cat: TV/Sport, desc: "WWE Superstars HD"}
|
||||
- {id: 19, cat: TV/Sport, desc: "WWE Velocity"}
|
||||
- {id: 31, cat: TV/Sport, desc: "WWE Vintage"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="tlogin.php"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table.main:contains("Login failed!")
|
||||
message:
|
||||
selector: table tr td.text
|
||||
test:
|
||||
path: browse.php
|
||||
selector: div#wel-messeng:has(a[href="logout.php"])
|
||||
|
||||
ratio:
|
||||
path: browse.php
|
||||
selector: div#wel-radio b:nth-child(2)
|
||||
|
||||
search:
|
||||
paths:
|
||||
# http://xtremewrestlingtorrents.net/browse.php?search=halftime+heat&c16=1&c65=1&c10=1&c54=1&c76=1&c46=1&c51=1&c31=1&c11=1&incldead=1
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
|
||||
incldead: "1"
|
||||
search: "{{ .Keywords }}"
|
||||
sort: "4" # date
|
||||
type: "desc"
|
||||
rows:
|
||||
selector: table[border="0"][cellspacing="0"][cellpadding="5"] tr:has(a[href^="download.php?id="])
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: title
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
grabs:
|
||||
selector: td:nth-child(7)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["times", ""]
|
||||
- name: replace
|
||||
args: ["time", ""]
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-last-child(3)
|
||||
leechers:
|
||||
selector: td:nth-last-child(2)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "2006-01-0215:04:05"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/freeleech.png"]: "0"
|
||||
"*": "1"
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"*": "1"
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
---
|
||||
site: yggtorrent
|
||||
name: YGGtorrent
|
||||
description: "YGGTorrent is a FRENCH Semi-Private Torrent Tracker for 0DAY / GENERAL"
|
||||
@@ -25,6 +25,7 @@
|
||||
- https://ygg.to/
|
||||
- https://www.ygg.to/
|
||||
- https://ww3.yggtorrent.gg/
|
||||
- https://yggtorrent.gg/
|
||||
- https://www.yggtorrent.gg/
|
||||
|
||||
caps:
|
||||
@@ -131,6 +132,10 @@
|
||||
type: checkbox
|
||||
label: Replace VOSTFR with ENGLISH
|
||||
default: false
|
||||
- name: enhancedAnime
|
||||
type: checkbox
|
||||
label: Enhance sonarr compatibility with anime by renaming episode (xxx to exxx). Works only if episode is at the end of the query. Can disturb movies search. (back to the future 3 -> back to the future e3)
|
||||
default: false
|
||||
login:
|
||||
method: form
|
||||
path: /
|
||||
@@ -143,12 +148,13 @@
|
||||
- selector: "#login_msg_pass[style=\"\"][style] > center"
|
||||
test:
|
||||
path: /
|
||||
selector: a[href$="/user/logout"]
|
||||
selector: div#top_panel:contains("Déconnexion")
|
||||
|
||||
search:
|
||||
followredirect: true
|
||||
paths:
|
||||
- path: "/engine/search?category={{ .Config.category }}&name={{ .Keywords }}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date"
|
||||
- path: "/engine/search?category={{ .Config.category }}&name={{ .Keywords }}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date&page=50"
|
||||
- path: "/engine/search?category={{ .Config.category }}&name={{if .Config.enhancedAnime}}{{ re_replace .Keywords \"([\\.\\s\\[\\-])(\\d+)$\" \"$1e$2\" }}{{else}}{{ re_replace .Keywords \"\\s\" \"\"\"\" }}{{end}}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date"
|
||||
- path: "/engine/search?category={{ .Config.category }}&name={{if .Config.enhancedAnime}}{{ re_replace .Keywords \"([\\.\\s\\[\\-])(\\d+)$\" \"$1e$2\" }}{{else}}{{ re_replace .Keywords \"\\s\" \"\"\"\" }}{{end}}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date&page=50"
|
||||
|
||||
rows:
|
||||
selector: "table.table > tbody > tr"
|
||||
@@ -286,7 +292,7 @@
|
||||
leechers:
|
||||
text: 0
|
||||
leechers:
|
||||
selector: "td:nth-child(*)"
|
||||
selector: "td:nth-child(9)"
|
||||
optional: true
|
||||
downloadvolumefactor:
|
||||
text: "1"
|
||||
|
||||
@@ -4,7 +4,7 @@ using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
@@ -172,7 +172,7 @@ namespace Jackett.Common.Indexers
|
||||
string RowsSelector = "ul.topics > li.row";
|
||||
|
||||
var ResultParser = new HtmlParser();
|
||||
var SearchResultDocument = ResultParser.Parse(results.Content);
|
||||
var SearchResultDocument = ResultParser.ParseDocument(results.Content);
|
||||
var Rows = SearchResultDocument.QuerySelectorAll(RowsSelector);
|
||||
foreach (var Row in Rows)
|
||||
{
|
||||
@@ -190,7 +190,7 @@ namespace Jackett.Common.Indexers
|
||||
release.Guid = release.Comments;
|
||||
|
||||
var detailsResult = await RequestStringWithCookies(SiteLink + qDetailsLink.GetAttribute("href"));
|
||||
var DetailsResultDocument = ResultParser.Parse(detailsResult.Content);
|
||||
var DetailsResultDocument = ResultParser.ParseDocument(detailsResult.Content);
|
||||
var qDownloadLink = DetailsResultDocument.QuerySelector("table.table2 > tbody > tr > td > a[href^=\"/download/torrent.php?id\"]");
|
||||
|
||||
release.Link = new Uri(SiteLink + qDownloadLink.GetAttribute("href").TrimStart('/'));
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
@@ -1647,7 +1647,7 @@ namespace Jackett.Common.Indexers
|
||||
string RowsSelector = "ul.topics > li";
|
||||
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var SearchResultDocument = SearchResultParser.Parse(results.Content);
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results.Content);
|
||||
var Rows = SearchResultDocument.QuerySelectorAll(RowsSelector);
|
||||
foreach (var Row in Rows)
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@ using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
@@ -78,7 +78,7 @@ namespace Jackett.Common.Indexers.Abstract
|
||||
await ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("logout.php"), () =>
|
||||
{
|
||||
var loginResultParser = new HtmlParser();
|
||||
var loginResultDocument = loginResultParser.Parse(response.Content);
|
||||
var loginResultDocument = loginResultParser.ParseDocument(response.Content);
|
||||
var loginform = loginResultDocument.QuerySelector("#loginform");
|
||||
if (loginform == null)
|
||||
throw new ExceptionWithConfigData(response.Content, configData);
|
||||
|
||||
@@ -7,7 +7,7 @@ using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Dom;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
@@ -144,7 +144,7 @@ namespace Jackett.Common.Indexers
|
||||
const string rowsSelector = "table.torrent_table > tbody > tr:not(tr.colhead)";
|
||||
|
||||
var searchResultParser = new HtmlParser();
|
||||
var searchResultDocument = searchResultParser.Parse(results.Content);
|
||||
var searchResultDocument = searchResultParser.ParseDocument(results.Content);
|
||||
var rows = searchResultDocument.QuerySelectorAll(rowsSelector);
|
||||
foreach (var row in rows)
|
||||
{
|
||||
@@ -276,7 +276,7 @@ namespace Jackett.Common.Indexers
|
||||
const string rowsSelector = "table.torrent_table > tbody > tr:not(tr.colhead)";
|
||||
|
||||
var searchResultParser = new HtmlParser();
|
||||
var searchResultDocument = searchResultParser.Parse(results.Content);
|
||||
var searchResultDocument = searchResultParser.ParseDocument(results.Content);
|
||||
var rows = searchResultDocument.QuerySelectorAll(rowsSelector);
|
||||
|
||||
ICollection<int> groupCategory = null;
|
||||
|
||||
@@ -8,8 +8,8 @@ using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Dom;
|
||||
using AngleSharp.Dom.Html;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Dom;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Helpers;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
@@ -371,7 +371,7 @@ namespace Jackett.Common.Indexers
|
||||
return true; // no error
|
||||
|
||||
var ResultParser = new HtmlParser();
|
||||
var ResultDocument = ResultParser.Parse(loginResult.Content);
|
||||
var ResultDocument = ResultParser.ParseDocument(loginResult.Content);
|
||||
foreach (errorBlock error in errorBlocks)
|
||||
{
|
||||
var selection = ResultDocument.QuerySelector(error.Selector);
|
||||
@@ -445,7 +445,7 @@ namespace Jackett.Common.Indexers
|
||||
// request real login page again
|
||||
landingResult = await RequestStringWithCookies(LoginUrl, null, SiteLink);
|
||||
var htmlParser = new HtmlParser();
|
||||
landingResultDocument = htmlParser.Parse(landingResult.Content);
|
||||
landingResultDocument = htmlParser.ParseDocument(landingResult.Content);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -719,7 +719,7 @@ namespace Jackett.Common.Indexers
|
||||
if (Login.Test.Selector != null)
|
||||
{
|
||||
var testResultParser = new HtmlParser();
|
||||
var testResultDocument = testResultParser.Parse(testResult.Content);
|
||||
var testResultDocument = testResultParser.ParseDocument(testResult.Content);
|
||||
var selection = testResultDocument.QuerySelectorAll(Login.Test.Selector);
|
||||
if (selection.Length == 0)
|
||||
{
|
||||
@@ -784,7 +784,7 @@ namespace Jackett.Common.Indexers
|
||||
landingResult = await RequestStringWithCookies(LoginUrl.AbsoluteUri, null, SiteLink);
|
||||
|
||||
var htmlParser = new HtmlParser();
|
||||
landingResultDocument = htmlParser.Parse(landingResult.Content);
|
||||
landingResultDocument = htmlParser.ParseDocument(landingResult.Content);
|
||||
|
||||
var hasCaptcha = false;
|
||||
|
||||
@@ -1237,7 +1237,7 @@ namespace Jackett.Common.Indexers
|
||||
try
|
||||
{
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var SearchResultDocument = SearchResultParser.Parse(results);
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
|
||||
// check if we need to login again
|
||||
var loginNeeded = CheckIfLoginIsNeeded(response, SearchResultDocument);
|
||||
@@ -1257,7 +1257,7 @@ namespace Jackett.Common.Indexers
|
||||
await FollowIfRedirect(response);
|
||||
|
||||
results = response.Content;
|
||||
SearchResultDocument = SearchResultParser.Parse(results);
|
||||
SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
}
|
||||
|
||||
checkForError(response, Definition.Search.Error);
|
||||
@@ -1265,7 +1265,7 @@ namespace Jackett.Common.Indexers
|
||||
if (Search.Preprocessingfilters != null)
|
||||
{
|
||||
results = applyFilters(results, Search.Preprocessingfilters, variables);
|
||||
SearchResultDocument = SearchResultParser.Parse(results);
|
||||
SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
logger.Debug(string.Format("CardigannIndexer ({0}): result after preprocessingfilters: {1}", ID, results));
|
||||
}
|
||||
|
||||
@@ -1652,7 +1652,7 @@ namespace Jackett.Common.Indexers
|
||||
response = await RequestStringWithCookies(response.RedirectingTo);
|
||||
var results = response.Content;
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var SearchResultDocument = SearchResultParser.Parse(results);
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
var DlUri = SearchResultDocument.QuerySelector(selector);
|
||||
if (DlUri != null)
|
||||
{
|
||||
|
||||
@@ -5,7 +5,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models.IndexerConfig.Bespoke;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
@@ -170,7 +170,7 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
var RowsSelector = "table[id='sortabletable'] > tbody > tr";
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var SearchResultDocument = SearchResultParser.Parse(results.Content);
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results.Content);
|
||||
var Rows = SearchResultDocument.QuerySelectorAll(RowsSelector);
|
||||
var lastDate = DateTime.Now;
|
||||
|
||||
@@ -236,7 +236,7 @@ namespace Jackett.Common.Indexers
|
||||
banner.Remove();
|
||||
}
|
||||
|
||||
tooltip.QuerySelector("div:contains(\"Total Hits : \")").Remove();
|
||||
tooltip.QuerySelector("div:contains(\"Total Hits\")").Remove();
|
||||
|
||||
var longtitle = tooltip.QuerySelectorAll("div").First();
|
||||
release.Title = longtitle.TextContent;
|
||||
|
||||
@@ -5,7 +5,7 @@ using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
@@ -233,7 +233,7 @@ namespace Jackett.Common.Indexers
|
||||
string RowsSelector = ".torrent_table > tbody > tr";
|
||||
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var SearchResultDocument = SearchResultParser.Parse(results.Content);
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results.Content);
|
||||
var Rows = SearchResultDocument.QuerySelectorAll(RowsSelector);
|
||||
|
||||
bool stickyGroup = false;
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
using Jackett.Common.Indexers.Abstract;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using Jackett.Common.Utils.Clients;
|
||||
using NLog;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
{
|
||||
public class HDForever : GazelleTracker
|
||||
{
|
||||
public HDForever(IIndexerConfigurationService configService, WebClient webClient, Logger logger, IProtectionService protectionService)
|
||||
: base(name: "HD-Forever",
|
||||
desc: "HD-Forever (HD-F) is a FRENCH Private Torrent Tracker for HD MOVIES",
|
||||
link: "https://hdf.world/",
|
||||
configService: configService,
|
||||
logger: logger,
|
||||
protectionService: protectionService,
|
||||
webClient: webClient,
|
||||
supportsFreeleechTokens: true
|
||||
)
|
||||
{
|
||||
Language = "fr-fr";
|
||||
Type = "private";
|
||||
|
||||
this.supportsCategories = false; // they have categories but the API never returns the category, always default to Movie
|
||||
AddCategoryMapping(1, TorznabCatType.MoviesHD, "Movie");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ using Jackett.Common.Utils.Clients;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using System.Text.RegularExpressions;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
{
|
||||
@@ -83,7 +83,7 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
return releases.ToArray();
|
||||
}
|
||||
var dom = ResultParser.Parse(response.Content);
|
||||
var dom = ResultParser.ParseDocument(response.Content);
|
||||
var resultLinks = dom.QuerySelectorAll("ul > li > a");
|
||||
var uniqueShowLinks = new HashSet<string>();
|
||||
foreach (var resultLink in resultLinks)
|
||||
@@ -125,7 +125,7 @@ namespace Jackett.Common.Indexers
|
||||
return releases.ToArray();
|
||||
}
|
||||
|
||||
var dom = ResultParser.Parse(response.Content);
|
||||
var dom = ResultParser.ParseDocument(response.Content);
|
||||
var latestresults = dom.QuerySelectorAll("ul > li > a");
|
||||
foreach (var resultLink in latestresults)
|
||||
{
|
||||
@@ -173,7 +173,7 @@ namespace Jackett.Common.Indexers
|
||||
while(true)
|
||||
{
|
||||
var showAPIResponse = await RequestStringWithCookiesAndRetry(apiUrl + "&nextid=" + nextId, string.Empty);
|
||||
var showAPIdom = ResultParser.Parse(showAPIResponse.Content);
|
||||
var showAPIdom = ResultParser.ParseDocument(showAPIResponse.Content);
|
||||
var releaseRowResults = showAPIdom.QuerySelectorAll("div.rls-info-container");
|
||||
releaserows.AddRange(releaseRowResults);
|
||||
nextId++;
|
||||
|
||||
@@ -24,6 +24,7 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
public override string[] AlternativeSiteLinks { get; protected set; } = new string[] {
|
||||
"https://iptorrents.com/",
|
||||
"https://www.iptorrents.com/",
|
||||
"https://ipt-update.com/",
|
||||
"https://iptorrents.eu/",
|
||||
"https://nemo.iptorrents.com/",
|
||||
|
||||
@@ -7,7 +7,7 @@ using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Dom;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using CsQuery;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
@@ -351,7 +351,7 @@ namespace Jackett.Common.Indexers
|
||||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.Parse(results.Content);
|
||||
var document = parser.ParseDocument(results.Content);
|
||||
var rows = document.QuerySelectorAll("div.row");
|
||||
|
||||
foreach (var row in rows)
|
||||
@@ -380,7 +380,7 @@ namespace Jackett.Common.Indexers
|
||||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.Parse(results.Content);
|
||||
var document = parser.ParseDocument(results.Content);
|
||||
|
||||
var playButton = document.QuerySelector("div.external-btn");
|
||||
if (playButton != null && !playButton.ClassList.Contains("inactive"))
|
||||
@@ -428,7 +428,7 @@ namespace Jackett.Common.Indexers
|
||||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.Parse(results.Content);
|
||||
var document = parser.ParseDocument(results.Content);
|
||||
var seasons = document.QuerySelectorAll("div.serie-block");
|
||||
var rowSelector = "table.movie-parts-list > tbody > tr";
|
||||
|
||||
@@ -585,7 +585,7 @@ namespace Jackett.Common.Indexers
|
||||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.Parse(results.Content);
|
||||
var document = parser.ParseDocument(results.Content);
|
||||
var meta = document.QuerySelector("meta");
|
||||
var metaContent = meta.GetAttribute("content");
|
||||
|
||||
@@ -611,7 +611,7 @@ namespace Jackett.Common.Indexers
|
||||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.Parse(results.Content);
|
||||
var document = parser.ParseDocument(results.Content);
|
||||
var rows = document.QuerySelectorAll("div.inner-box--item");
|
||||
|
||||
logger.Debug("> Parsing " + rows.Count().ToString() + " releases");
|
||||
|
||||
@@ -4,8 +4,8 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Dom.Html;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Dom;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
@@ -762,7 +762,7 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
var result = await mt.RequestBytesWithCookies(uri.AbsoluteUri, null, method, null, data, headers);
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var doc = SearchResultParser.Parse(mt.Encoding.GetString(result.Content));
|
||||
var doc = SearchResultParser.ParseDocument(mt.Encoding.GetString(result.Content));
|
||||
return doc;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Dom;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using CsQuery;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
@@ -120,7 +120,7 @@ namespace Jackett.Common.Indexers
|
||||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.Parse(response.Content);
|
||||
var document = parser.ParseDocument(response.Content);
|
||||
var groups = document.QuerySelectorAll(".torrent_table > tbody > tr.group");
|
||||
var torrents = document.QuerySelectorAll(".torrent_table > tbody > tr.torrent");
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
@@ -373,7 +373,7 @@ namespace Jackett.Common.Indexers
|
||||
private IEnumerable<NewpctRelease> ParseDailyContent(string content)
|
||||
{
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var doc = SearchResultParser.Parse(content);
|
||||
var doc = SearchResultParser.ParseDocument(content);
|
||||
|
||||
List<NewpctRelease> releases = new List<NewpctRelease>();
|
||||
|
||||
@@ -425,7 +425,7 @@ namespace Jackett.Common.Indexers
|
||||
private string ParseSeriesListContent(string content, string title)
|
||||
{
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var doc = SearchResultParser.Parse(content);
|
||||
var doc = SearchResultParser.ParseDocument(content);
|
||||
|
||||
Dictionary<string, string> results = new Dictionary<string, string>();
|
||||
|
||||
@@ -450,7 +450,7 @@ namespace Jackett.Common.Indexers
|
||||
private IEnumerable<NewpctRelease> ParseEpisodesListContent(string content)
|
||||
{
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var doc = SearchResultParser.Parse(content);
|
||||
var doc = SearchResultParser.ParseDocument(content);
|
||||
|
||||
List<NewpctRelease> releases = new List<NewpctRelease>();
|
||||
|
||||
@@ -517,7 +517,7 @@ namespace Jackett.Common.Indexers
|
||||
private IEnumerable<NewpctRelease> ParseSearchContent(string content)
|
||||
{
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var doc = SearchResultParser.Parse(content);
|
||||
var doc = SearchResultParser.ParseDocument(content);
|
||||
|
||||
List<NewpctRelease> releases = new List<NewpctRelease>();
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ using System.Collections.Specialized;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
@@ -57,7 +57,7 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
var loginPage = await RequestStringWithCookies(LoginUrl, string.Empty);
|
||||
var LoginParser = new HtmlParser();
|
||||
var LoginDocument = LoginParser.Parse(loginPage.Content);
|
||||
var LoginDocument = LoginParser.ParseDocument(loginPage.Content);
|
||||
|
||||
configData.CaptchaCookie.Value = loginPage.Cookies;
|
||||
|
||||
@@ -104,7 +104,7 @@ namespace Jackett.Common.Indexers
|
||||
await ConfigureIfOK(result.Cookies, result.Content.Contains("logout.php"), () =>
|
||||
{
|
||||
var LoginParser = new HtmlParser();
|
||||
var LoginDocument = LoginParser.Parse(result.Content);
|
||||
var LoginDocument = LoginParser.ParseDocument(result.Content);
|
||||
var errorMessage = LoginDocument.QuerySelector("span.warning[id!=\"no-cookies\"]:has(br)").TextContent;
|
||||
throw new ExceptionWithConfigData(errorMessage, configData);
|
||||
});
|
||||
@@ -144,7 +144,7 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
Regex IMDBRegEx = new Regex(@"tt(\d+)", RegexOptions.Compiled);
|
||||
var hParser = new HtmlParser();
|
||||
var ResultDocument = hParser.Parse(results.Content);
|
||||
var ResultDocument = hParser.ParseDocument(results.Content);
|
||||
try
|
||||
{
|
||||
var Groups = ResultDocument.QuerySelectorAll("div.browsePoster");
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace Jackett.Common.Indexers
|
||||
client: w,
|
||||
logger: l,
|
||||
p: ps,
|
||||
configData: new ConfigurationDataBasicLogin())
|
||||
configData: new ConfigurationDataCookie())
|
||||
{
|
||||
Encoding = Encoding.UTF8;
|
||||
Language = "sv-sw";
|
||||
|
||||
@@ -4,7 +4,7 @@ using System.Collections.Specialized;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
@@ -95,7 +95,7 @@ namespace Jackett.Common.Indexers
|
||||
string RowsSelector = "table.torrent_table > tbody > tr.torrent";
|
||||
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var SearchResultDocument = SearchResultParser.Parse(results.Content);
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results.Content);
|
||||
var Rows = SearchResultDocument.QuerySelectorAll(RowsSelector);
|
||||
foreach (var Row in Rows)
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@ using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Dom;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
@@ -106,7 +106,7 @@ namespace Jackett.Common.Indexers
|
||||
string RowsSelector = "div.borderwrap:has(div.maintitle) > table > tbody > tr:has(a[href*=\"index.php?showtopic=\"])";
|
||||
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var SearchResultDocument = SearchResultParser.Parse(results.Content);
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results.Content);
|
||||
var Rows = SearchResultDocument.QuerySelectorAll(RowsSelector);
|
||||
foreach (var Row in Rows)
|
||||
{
|
||||
@@ -201,7 +201,7 @@ namespace Jackett.Common.Indexers
|
||||
var response = await RequestStringWithCookies(link.ToString());
|
||||
var results = response.Content;
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var SearchResultDocument = SearchResultParser.Parse(results);
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results);
|
||||
var downloadSelector = "a[title=\"Download attachment\"]";
|
||||
var DlUri = SearchResultDocument.QuerySelector(downloadSelector);
|
||||
if (DlUri != null)
|
||||
|
||||
@@ -5,7 +5,7 @@ using System.Net;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
@@ -64,7 +64,7 @@ namespace Jackett.Common.Indexers
|
||||
await ConfigureIfOK(response.Cookies, response.Content != null && response.Content.Contains("logout.php"), () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.Parse(response.Content);
|
||||
var document = parser.ParseDocument(response.Content);
|
||||
var messageEl = document.QuerySelector("form > span[class='warning']");
|
||||
var errorMessage = response.Content;
|
||||
if (messageEl != null)
|
||||
@@ -104,7 +104,7 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
var globalFreeleech = false;
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.Parse(htmlResponse);
|
||||
var document = parser.ParseDocument(htmlResponse);
|
||||
|
||||
if (document.QuerySelector("div.nicebar > span:contains(\"Personal Freeleech\")") != null)
|
||||
globalFreeleech = true;
|
||||
|
||||
@@ -4,7 +4,7 @@ using System.Collections.Specialized;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Parser.Html;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Models.IndexerConfig.Bespoke;
|
||||
@@ -1443,7 +1443,7 @@ namespace Jackett.Common.Indexers
|
||||
configData.CookieHeader.Value = null;
|
||||
var response = await RequestStringWithCookies(LoginUrl);
|
||||
var LoginResultParser = new HtmlParser();
|
||||
var LoginResultDocument = LoginResultParser.Parse(response.Content);
|
||||
var LoginResultDocument = LoginResultParser.ParseDocument(response.Content);
|
||||
var captchaimg = LoginResultDocument.QuerySelector("img[src^=\"https://static.t-ru.org/captcha/\"]");
|
||||
if (captchaimg != null)
|
||||
{
|
||||
@@ -1489,7 +1489,7 @@ namespace Jackett.Common.Indexers
|
||||
logger.Debug(result.Content);
|
||||
var errorMessage = "Unknown error message, please report";
|
||||
var LoginResultParser = new HtmlParser();
|
||||
var LoginResultDocument = LoginResultParser.Parse(result.Content);
|
||||
var LoginResultDocument = LoginResultParser.ParseDocument(result.Content);
|
||||
var errormsg = LoginResultDocument.QuerySelector("h4[class=\"warnColor1 tCenter mrg_16\"]");
|
||||
if (errormsg != null)
|
||||
errorMessage = errormsg.TextContent;
|
||||
@@ -1534,7 +1534,7 @@ namespace Jackett.Common.Indexers
|
||||
string RowsSelector = "table#tor-tbl > tbody > tr";
|
||||
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var SearchResultDocument = SearchResultParser.Parse(results.Content);
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results.Content);
|
||||
var Rows = SearchResultDocument.QuerySelectorAll(RowsSelector);
|
||||
foreach (var Row in Rows)
|
||||
{
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AngleSharp" Version="0.9.11" />
|
||||
<PackageReference Include="AngleSharp" Version="0.10.1" />
|
||||
<PackageReference Include="Autofac" Version="4.8.1" />
|
||||
<PackageReference Include="AutoMapper" Version="8.0.0" />
|
||||
<PackageReference Include="BencodeNET" Version="2.2.24" />
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace Jackett.Common.Services
|
||||
ITrayLockService lockService;
|
||||
private ServerConfig serverConfig;
|
||||
bool forceupdatecheck = false;
|
||||
Variants.JackettVariant variant = Variants.JackettVariant.NotFound;
|
||||
|
||||
public UpdateService(Logger l, WebClient c, IConfigurationService cfg, ITrayLockService ls, ServerConfig sc)
|
||||
{
|
||||
@@ -88,6 +89,11 @@ namespace Jackett.Common.Services
|
||||
logger.Info($"Skipping update check as it is disabled.");
|
||||
return;
|
||||
}
|
||||
|
||||
Variants variants = new Variants();
|
||||
variant = variants.GetVariant();
|
||||
logger.Info("Jackett variant: " + variant.ToString());
|
||||
|
||||
if (DotNetCoreUtil.IsRunningOnDotNetCore)
|
||||
{
|
||||
logger.Info($"Skipping update check as running Jackett on .NET Core is still in preview. Updates must be performed manually at this time.");
|
||||
@@ -223,7 +229,9 @@ namespace Jackett.Common.Services
|
||||
|
||||
private async Task<string> DownloadRelease(List<Asset> assets, bool isWindows, string version)
|
||||
{
|
||||
var targetAsset = assets.Where(a => isWindows ? a.Browser_download_url.EndsWith(".zip", StringComparison.OrdinalIgnoreCase) : a.Browser_download_url.EndsWith(".gz", StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
|
||||
Variants variants = new Variants();
|
||||
string artifactFileName = variants.GetArtifactFileName(variant);
|
||||
Asset targetAsset = assets.Where(a => a.Browser_download_url.EndsWith(artifactFileName, StringComparison.OrdinalIgnoreCase) && artifactFileName.Length > 0).FirstOrDefault();
|
||||
|
||||
if (targetAsset == null)
|
||||
{
|
||||
|
||||
110
src/Jackett.Common/Utils/Variants.cs
Normal file
110
src/Jackett.Common/Utils/Variants.cs
Normal file
@@ -0,0 +1,110 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
namespace Jackett.Common.Utils
|
||||
{
|
||||
public class Variants
|
||||
{
|
||||
public enum JackettVariant
|
||||
{
|
||||
NotFound,
|
||||
FullFrameworkWindows,
|
||||
Mono,
|
||||
CoreWindows,
|
||||
CoreMacOs,
|
||||
CoreLinuxAmd64,
|
||||
CoreLinuxArm32,
|
||||
CoreLinuxArm64
|
||||
}
|
||||
|
||||
public JackettVariant GetVariant()
|
||||
{
|
||||
if (DotNetCoreUtil.IsRunningOnDotNetCore)
|
||||
{
|
||||
//Dot Net Core
|
||||
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
return JackettVariant.CoreWindows;
|
||||
}
|
||||
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
|
||||
{
|
||||
return JackettVariant.CoreMacOs;
|
||||
}
|
||||
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.X64)
|
||||
{
|
||||
return JackettVariant.CoreLinuxAmd64;
|
||||
}
|
||||
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.Arm)
|
||||
{
|
||||
return JackettVariant.CoreLinuxArm32;
|
||||
}
|
||||
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
|
||||
{
|
||||
return JackettVariant.CoreLinuxArm64;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Full framework
|
||||
|
||||
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
|
||||
{
|
||||
return JackettVariant.FullFrameworkWindows;
|
||||
}
|
||||
else
|
||||
{
|
||||
return JackettVariant.Mono;
|
||||
}
|
||||
}
|
||||
|
||||
return JackettVariant.NotFound;
|
||||
}
|
||||
|
||||
|
||||
public string GetArtifactFileName(JackettVariant variant)
|
||||
{
|
||||
switch (variant)
|
||||
{
|
||||
case JackettVariant.FullFrameworkWindows:
|
||||
{
|
||||
return "Jackett.Binaries.Windows.zip";
|
||||
}
|
||||
case JackettVariant.Mono:
|
||||
{
|
||||
return "Jackett.Binaries.Mono.tar.gz";
|
||||
}
|
||||
case JackettVariant.CoreWindows:
|
||||
{
|
||||
return ""; //Not implemented yet
|
||||
}
|
||||
case JackettVariant.CoreMacOs:
|
||||
{
|
||||
return "Jackett.Binaries.macOS.tar.gz";
|
||||
}
|
||||
case JackettVariant.CoreLinuxAmd64:
|
||||
{
|
||||
return "Jackett.Binaries.LinuxAMD64.tar.gz";
|
||||
}
|
||||
case JackettVariant.CoreLinuxArm32:
|
||||
{
|
||||
return "Jackett.Binaries.LinuxARM32.tar.gz";
|
||||
}
|
||||
case JackettVariant.CoreLinuxArm64:
|
||||
{
|
||||
return "Jackett.Binaries.LinuxARM64.tar.gz";
|
||||
}
|
||||
default:
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,8 +8,12 @@
|
||||
<NoWarn>NU1605</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(TargetFramework)' != 'net461' and $(RuntimeIdentifier.Contains('win')) == 'false'">
|
||||
<AssemblyName>jackett</AssemblyName>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp2.2'">
|
||||
<RuntimeIdentifiers>win-x86;osx-x64;linux-x64;linux-arm</RuntimeIdentifiers>
|
||||
<RuntimeIdentifiers>win-x86;osx-x64;linux-x64;linux-arm;linux-arm64</RuntimeIdentifiers>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(TargetFramework)' == 'net461'">
|
||||
@@ -51,15 +55,6 @@
|
||||
<Content Include="..\..\LICENSE" Visible="false">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\Upstart.config" Visible="false">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\install_service_macos" Visible="false">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\install_service_systemd.sh" Visible="false">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -91,6 +91,9 @@ namespace Jackett.Server.Services
|
||||
var runtimedir = RuntimeEnvironment.GetRuntimeDirectory();
|
||||
logger.Info("Environment version: " + Environment.Version.ToString() + " (" + runtimedir + ")");
|
||||
logger.Info("OS version: " + Environment.OSVersion.ToString() + (Environment.Is64BitOperatingSystem ? " (64bit OS)" : "") + (Environment.Is64BitProcess ? " (64bit process)" : ""));
|
||||
Variants variants = new Variants();
|
||||
Variants.JackettVariant variant = variants.GetVariant();
|
||||
logger.Info("Jackett variant: " + variant.ToString());
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user