From 2fb045e94af123ec77471df1274b15f5884fbc55 Mon Sep 17 00:00:00 2001 From: gregorij89 Date: Sun, 14 May 2017 18:53:49 +0200 Subject: [PATCH] Add Trezzor (#1354) * Add Trezzor * Add Trezzor * Fixing AooVeyor.yml - removing the file from commit, there is no valuable changes. --- .github/appveyor.yml | 198 ++++++++++++++--------------- README.md | 1 + src/Jackett/Indexers/Trezzor.cs | 217 ++++++++++++++++++++++++++++++++ src/Jackett/Jackett.csproj | 1 + 4 files changed, 318 insertions(+), 99 deletions(-) create mode 100644 src/Jackett/Indexers/Trezzor.cs diff --git a/.github/appveyor.yml b/.github/appveyor.yml index e7d4273cc..33704838c 100644 --- a/.github/appveyor.yml +++ b/.github/appveyor.yml @@ -1,100 +1,100 @@ -version: 0.7.{build} -skip_tags: true -image: Visual Studio 2015 -configuration: Release -assembly_info: - patch: true - file: '**\AssemblyInfo.*' - assembly_version: '{version}' - assembly_file_version: '{version}' - assembly_informational_version: '{version}' -install: -- cmd: choco install InnoSetup -before_build: -- cmd: nuget restore src\Jackett.sln -build: - verbosity: minimal -after_build: -- cmd: >- - xcopy src\Jackett.Console\bin\Release build.windows\ /e /y - - copy /Y src\Jackett.Service\bin\Release\JackettService.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\ - - copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\ - - copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\ - - copy /Y LICENSE build.windows\LICENSE - - copy /Y README.md build.windows\README.md - - - xcopy build.windows WindowsBuild\Jackett\ /e /y - - - msbuild src\Jackett.sln /t:Clean /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" - - "C:\Program Files (x86)\Mono\bin\xbuild.bat" src\Jackett.sln /t:Build /p:Configuration=Release /verbosity:minimal /tv:12.0 - - - xcopy src\Jackett.Console\bin\Release build.mono\ /e /y - - copy /Y src\Jackett.Service\bin\Release\JackettService.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\ - - copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\ - - copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\ - - copy /Y LICENSE build.mono\LICENSE - - copy /Y README.md build.mono\README.md - - copy /Y Upstart.config build.mono\Upstart.config - - - xcopy build.mono MonoBuild\Jackett\ /e /y - - - "C:\Program Files (x86)\Inno Setup 5\ISCC.exe" Installer.iss - - RENAME Output\setup.exe Jackett.Installer.Windows.exe - - MOVE Output\Jackett.Installer.Windows.exe %APPVEYOR_BUILD_FOLDER% - - - cd WindowsBuild - - 7z a -tzip -r "%APPVEYOR_BUILD_FOLDER%\Jackett.Binaries.Windows.zip" "Jackett\" - - - cd %APPVEYOR_BUILD_FOLDER% - - cd MonoBuild - - 7z a -ttar "%APPVEYOR_BUILD_FOLDER%\Jackett.Binaries.Mono.tar" "Jackett\" - - cd %APPVEYOR_BUILD_FOLDER% - - 7z a -tgzip "Jackett.Binaries.Mono.tar.gz" "Jackett.Binaries.Mono.tar" - - - appveyor PushArtifact Jackett.Installer.Windows.exe - - appveyor PushArtifact Jackett.Binaries.Windows.zip - - appveyor PushArtifact Jackett.Binaries.Mono.tar.gz -deploy: -- provider: GitHub - tag: v$(appveyor_build_version) - auth_token: - secure: hOg+16YTIbq4kO9u4D1YVOTbWDqgCX6mAQYMbnmBBSw2CiUsZh7OKbupoUb3FtWa - draft: true - on: - branch: master -notifications: -- provider: GitHubPullRequest - auth_token: - secure: k6ZZACPbKcvAFiXe/uOmY6Ofs4aw2rgKEWMNA8EilQpdJ6o7ef31we4DPn3SXZzx - on_build_success: true - on_build_failure: true +version: 0.7.{build} +skip_tags: true +image: Visual Studio 2015 +configuration: Release +assembly_info: + patch: true + file: '**\AssemblyInfo.*' + assembly_version: '{version}' + assembly_file_version: '{version}' + assembly_informational_version: '{version}' +install: +- cmd: choco install InnoSetup +before_build: +- cmd: nuget restore src\Jackett.sln +build: + verbosity: minimal +after_build: +- cmd: >- + xcopy src\Jackett.Console\bin\Release build.windows\ /e /y + + copy /Y src\Jackett.Service\bin\Release\JackettService.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\ + + copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\ + + copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\ + + copy /Y LICENSE build.windows\LICENSE + + copy /Y README.md build.windows\README.md + + + xcopy build.windows WindowsBuild\Jackett\ /e /y + + + msbuild src\Jackett.sln /t:Clean /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + + "C:\Program Files (x86)\Mono\bin\xbuild.bat" src\Jackett.sln /t:Build /p:Configuration=Release /verbosity:minimal /tv:12.0 + + + xcopy src\Jackett.Console\bin\Release build.mono\ /e /y + + copy /Y src\Jackett.Service\bin\Release\JackettService.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\ + + copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\ + + copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\ + + copy /Y LICENSE build.mono\LICENSE + + copy /Y README.md build.mono\README.md + + copy /Y Upstart.config build.mono\Upstart.config + + + xcopy build.mono MonoBuild\Jackett\ /e /y + + + "C:\Program Files (x86)\Inno Setup 5\ISCC.exe" Installer.iss + + RENAME Output\setup.exe Jackett.Installer.Windows.exe + + MOVE Output\Jackett.Installer.Windows.exe %APPVEYOR_BUILD_FOLDER% + + + cd WindowsBuild + + 7z a -tzip -r "%APPVEYOR_BUILD_FOLDER%\Jackett.Binaries.Windows.zip" "Jackett\" + + + cd %APPVEYOR_BUILD_FOLDER% + + cd MonoBuild + + 7z a -ttar "%APPVEYOR_BUILD_FOLDER%\Jackett.Binaries.Mono.tar" "Jackett\" + + cd %APPVEYOR_BUILD_FOLDER% + + 7z a -tgzip "Jackett.Binaries.Mono.tar.gz" "Jackett.Binaries.Mono.tar" + + + appveyor PushArtifact Jackett.Installer.Windows.exe + + appveyor PushArtifact Jackett.Binaries.Windows.zip + + appveyor PushArtifact Jackett.Binaries.Mono.tar.gz +deploy: +- provider: GitHub + tag: v$(appveyor_build_version) + auth_token: + secure: hOg+16YTIbq4kO9u4D1YVOTbWDqgCX6mAQYMbnmBBSw2CiUsZh7OKbupoUb3FtWa + draft: true + on: + branch: master +notifications: +- provider: GitHubPullRequest + auth_token: + secure: k6ZZACPbKcvAFiXe/uOmY6Ofs4aw2rgKEWMNA8EilQpdJ6o7ef31we4DPn3SXZzx + on_build_success: true + on_build_failure: true on_build_status_changed: true \ No newline at end of file diff --git a/README.md b/README.md index 1e99091db..7b4e748e7 100644 --- a/README.md +++ b/README.md @@ -209,6 +209,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/ * Torrent-Syndikat * ToTheGlory * TranceTraffic + * Trezzor * TV Chaos UK * TV-Vault * u-Torrent diff --git a/src/Jackett/Indexers/Trezzor.cs b/src/Jackett/Indexers/Trezzor.cs new file mode 100644 index 000000000..db9c9e795 --- /dev/null +++ b/src/Jackett/Indexers/Trezzor.cs @@ -0,0 +1,217 @@ +using CsQuery; +using Jackett.Models; +using Jackett.Services; +using Jackett.Utils; +using Jackett.Utils.Clients; +using Newtonsoft.Json.Linq; +using NLog; +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Globalization; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using System.Web; +using Jackett.Models.IndexerConfig; + +namespace Jackett.Indexers +{ + public class Trezzor : BaseIndexer, IIndexer + { + string LoginUrl { get { return SiteLink + "prihlasenie.php"; } } + private string SearchUrl { get { return SiteLink + "torrents.php?"; } } + + + new ConfigurationDataBasicLogin configData + { + get { return (ConfigurationDataBasicLogin)base.configData; } + set { base.configData = value; } + } + + public Trezzor(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps) + : base(name: "Trezzor", + description: "SK/CZ Tracker.", + link: "https://tracker.czech-server.com/", + caps: new TorznabCapabilities(), + manager: i, + client: wc, + logger: l, + p: ps, + configData: new ConfigurationDataBasicLogin()) + { + Encoding = Encoding.GetEncoding("windows-1250"); + Language = "cs-cz"; + Type = "private"; + + AddCategoryMapping(1, TorznabCatType.MoviesDVD, "DVD CZ/SK dabing"); + AddCategoryMapping(2, TorznabCatType.MoviesDVD, "DVD CZ/SK titulky"); + AddCategoryMapping(3, TorznabCatType.AudioVideo, "DVD Hudební video"); + AddCategoryMapping(4, TorznabCatType.MoviesSD, "XviD, DivX CZ/SK dabing"); + AddCategoryMapping(13, TorznabCatType.Audio, "Hudba CZ/SK scéna"); + AddCategoryMapping(24, TorznabCatType.Audio, "Mluv. slovo CZ/SK dabing"); + AddCategoryMapping(10, TorznabCatType.AudioOther, "DTS audio"); + AddCategoryMapping(14, TorznabCatType.PCGames, "Hry"); + AddCategoryMapping(17, TorznabCatType.PC, "Programy"); + AddCategoryMapping(14, TorznabCatType.PC, "Cestiny,patche,upgrady"); + AddCategoryMapping(18, TorznabCatType.Books, "Knihy CZ/SK lokalizace"); + AddCategoryMapping(18, TorznabCatType.BooksComics, "Komiks CZ/SK lokalizace"); + AddCategoryMapping(16, TorznabCatType.Other, "Foto,obrázky"); + AddCategoryMapping(20, TorznabCatType.Console, "Konzole"); + AddCategoryMapping(21, TorznabCatType.PCPhoneOther, "Mobilmánia"); + AddCategoryMapping(22, TorznabCatType.Other, "Ostatní CZ/SK scéna"); + AddCategoryMapping(23, TorznabCatType.Other, "Na prani non CZ/SK"); + AddCategoryMapping(27, TorznabCatType.Other, "TreZzoR rls"); + AddCategoryMapping(35, TorznabCatType.AudioVideo, "HDTV Hudební video"); + AddCategoryMapping(36, TorznabCatType.MoviesSD, "XviD, DivX CZ/SK titulky"); + AddCategoryMapping(31, TorznabCatType.MoviesHD, "HDTV CZ/SK Dabing"); + AddCategoryMapping(33, TorznabCatType.MoviesHD, "HDTV CZ/SK Titulky"); + AddCategoryMapping(39, TorznabCatType.Movies3D, "3D HDTV CZ/SK Dabing"); + AddCategoryMapping(40, TorznabCatType.Movies3D, "3D HDTV CZ/SK Titulky"); + AddCategoryMapping(5, TorznabCatType.MoviesSD, "TV-rip CZ/SK dabing"); + + AddCategoryMapping(41, TorznabCatType.TVHD, "HD Seriály CZ/SK dabing"); + AddCategoryMapping(42, TorznabCatType.TVHD, "HD Seriály CZ/SK titulky"); + AddCategoryMapping(7, TorznabCatType.TVSD, "Seriály CZ/SK dabing"); + AddCategoryMapping(37, TorznabCatType.TVSD, "Seriály CZ/SK titulky"); + + AddCategoryMapping(9, TorznabCatType.XXXXviD, "XXX CZ/SK dabing"); + AddCategoryMapping(32, TorznabCatType.XXXx264, "XXX HD CZ/SK dabing"); + AddCategoryMapping(27, TorznabCatType.Other, "TreZzoR rls"); + + } + + public async Task ApplyConfiguration(JToken configJson) + { + LoadValuesFromJson(configJson); + + var loginPage = await RequestStringWithCookies(LoginUrl, string.Empty); + + var pairs = new Dictionary { + { "uid", configData.Username.Value }, + { "pwd", configData.Password.Value } + }; + + var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, null, LoginUrl); + + await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("If your browser doesn't have javascript enabled"), () => + { + var errorMessage = "Couldn't login"; + throw new ExceptionWithConfigData(errorMessage, configData); + }); + return IndexerConfigurationStatus.RequiresTesting; + } + + public async Task> PerformQuery(TorznabQuery query) + { + var releases = new List(); + var searchurls = new List(); + var searchUrl = SearchUrl; + var queryCollection = new NameValueCollection(); + var searchString = query.GetQueryString(); + + + // assign category only if one cat is required, otherwise search in whole tracker (tracker has ability to search only in one category or in everything) + var _cats = MapTorznabCapsToTrackers(query); + if (_cats.Count == 1) searchUrl += "category=" + _cats.First() + "&"; + + + + if (!string.IsNullOrWhiteSpace(searchString)) + { + queryCollection.Add("search", searchString); + } + + + + queryCollection.Add("active", "1"); + + searchUrl += queryCollection.GetQueryString().Replace("(", "%28").Replace(")", "%29"); // maually url encode brackets to prevent "hacking" detection + + + var results = await RequestStringWithCookiesAndRetry(searchUrl); + + // Check for being logged out + if (results.IsRedirect) + if (results.RedirectingTo.Contains("prihlasenie.php")) + throw new ExceptionWithConfigData("Login failed, please reconfigure the tracker to update the cookies", configData); + else + throw new ExceptionWithConfigData(string.Format("Got a redirect to {0}, please adjust your the alternative link", results.RedirectingTo), configData); + + if (results.Content.Contains("prihlasenie.php")) throw new ExceptionWithConfigData("Login failed, please reconfigure the tracker to update the cookies", configData); + + try + { + CQ dom = results.Content; + ReleaseInfo release; + + var rows = dom[".torrenty_lista"]; + foreach (var row in rows) + { + CQ qRow = row.Cq(); + + release = new ReleaseInfo(); + + string _cat = qRow.Find("td").Get(0).FirstChild.GetAttribute("href"); + string _catName = qRow.Find("td a img").Get(0).GetAttribute("alt"); + int _from = _cat.IndexOf("="); + _cat = _cat.Substring(_from + 1); + + // filter results from categories, that were not requested + if ((_cats.Count > 1) && (!_cats.Contains(_cat))) continue; + release.Category = MapTrackerCatToNewznab(_cat); + + string _guid = qRow.Find("td").Get(1).FirstChild.GetAttribute("href"); + release.Guid = new Uri(SiteLink + _guid); + + string _title = qRow.Find("td").Get(1).FirstChild.InnerText; + release.Title = _title + " [" + _catName + "]"; + + string _commentsLink = qRow.Find("td").Get(2).FirstChild.GetAttribute("href"); + release.Comments = new Uri(SiteLink + _guid); + + string _downloadLink = qRow.Find("td").Get(3).FirstChild.GetAttribute("href"); + release.Link = new Uri(SiteLink + _downloadLink); + + string _publishDate = qRow.Find("td").Get(5).InnerText; + DateTime _parsed; + DateTime.TryParse(_publishDate, out _parsed); + release.PublishDate = _parsed; + + string _size = qRow.Find("td").Get(6).InnerText; + release.Size = ReleaseInfo.GetBytes(_size); + + string _seeds = qRow.Find("td").Get(7).FirstChild.InnerText; + string _leechs = qRow.Find("td").Get(8).FirstChild.InnerText; + int seeders, peers; + if (ParseUtil.TryCoerceInt(_seeds, out seeders)) + { + release.Seeders = seeders; + if (ParseUtil.TryCoerceInt(_leechs, out peers)) + { + release.Peers = peers + release.Seeders; + } + } + + release.MinimumRatio = 1; + release.MinimumSeedTime = 172800; + + release.UploadVolumeFactor = 1; + + if (release.Title.Contains("FREELEECH")) release.DownloadVolumeFactor = 0; + else release.DownloadVolumeFactor = 1; + + releases.Add(release); + } + } + catch (Exception ex) + { + OnParseError(results.Content, ex); + } + + return releases; + } + } +} diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj index d19e38dc6..5249f1aa5 100644 --- a/src/Jackett/Jackett.csproj +++ b/src/Jackett/Jackett.csproj @@ -198,6 +198,7 @@ +