From d767a82e84cfb9d9d1a627ec20626b8afd98e642 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 15 Feb 2023 18:31:54 +0200 Subject: [PATCH] Fixed: (RuTracker) Add "Use Magnet Links" and "Add RUS to title" options --- .../Indexers/Definitions/RuTracker.cs | 59 +++++++++++++++---- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs b/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs index 074c58bb7..779e8fec0 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/RuTracker.cs @@ -51,6 +51,32 @@ namespace NzbDrone.Core.Indexers.Definitions return new RuTrackerParser(Settings, Capabilities.Categories); } + public override async Task Download(Uri link) + { + if (Settings.UseMagnetLinks && link.PathAndQuery.Contains("viewtopic.php?t=")) + { + var request = new HttpRequestBuilder(link.ToString()) + .SetCookies(GetCookies() ?? new Dictionary()) + .Accept(HttpAccept.Html) + .Build(); + + var response = await _httpClient.ExecuteProxiedAsync(request, Definition); + + var parser = new HtmlParser(); + var dom = parser.ParseDocument(response.Content); + var magnetLink = dom.QuerySelector("table.attach a.magnet-link[href^=\"magnet:?\"]")?.GetAttribute("href"); + + if (magnetLink == null) + { + throw new Exception($"Failed to fetch magnet link from {link}"); + } + + link = new Uri(magnetLink); + } + + return await base.Download(link); + } + protected override async Task DoLogin() { var loginUrl = $"{Settings.BaseUrl}forum/login.php"; @@ -1597,8 +1623,8 @@ namespace NzbDrone.Core.Indexers.Definitions { Guid = infoUrl, InfoUrl = infoUrl, - DownloadUrl = downloadUrl, - Title = _titleParser.Parse(title, categories, _settings.RussianLetters, _settings.MoveFirstTagsToEndOfReleaseTitle, _settings.MoveAllTagsToEndOfReleaseTitle), + DownloadUrl = _settings.UseMagnetLinks ? infoUrl : downloadUrl, + Title = _titleParser.Parse(title, categories, _settings.RussianLetters, _settings.MoveFirstTagsToEndOfReleaseTitle, _settings.MoveAllTagsToEndOfReleaseTitle, _settings.AddRussianToTitle), Description = title, Categories = categories, Size = size, @@ -1671,7 +1697,12 @@ namespace NzbDrone.Core.Indexers.Definitions private readonly Regex _tvTitleRusEpisodeOfRegex = new (@"(?:Серии|Эпизод|Выпуски)+\s*[:]*\s+(\d+(?:-\d+)?)\s*из\s*([\w?])", RegexOptions.Compiled | RegexOptions.IgnoreCase); private readonly Regex _tvTitleRusEpisodeRegex = new (@"(?:Серии|Эпизод|Выпуски)+\s*[:]*\s+(\d+(?:-\d+)?)", RegexOptions.Compiled | RegexOptions.IgnoreCase); - public string Parse(string title, ICollection categories, bool stripCyrillicLetters = true, bool moveFirstTagsToEndOfReleaseTitle = false, bool moveAllTagsToEndOfReleaseTitle = false) + public string Parse(string title, + ICollection categories, + bool stripCyrillicLetters = true, + bool moveFirstTagsToEndOfReleaseTitle = false, + bool moveAllTagsToEndOfReleaseTitle = false, + bool addRussianToTitle = false) { // https://www.fileformat.info/info/unicode/category/Pd/list.htm title = Regex.Replace(title, @"\p{Pd}", "-", RegexOptions.Compiled | RegexOptions.IgnoreCase); @@ -1714,12 +1745,12 @@ namespace NzbDrone.Core.Indexers.Definitions // Remove Sub languages from release names title = Regex.Replace(title, @"(\bSub\b.*$|\b[\+]*Sub[\+]*\b)", string.Empty); + } - // language fix: all rutracker releases contains russian track - if (title.IndexOf("rus", StringComparison.OrdinalIgnoreCase) < 0) - { - title += " rus"; - } + // language fix: all rutracker releases contains russian track + if (addRussianToTitle && (IsAnyTvCategory(categories) || IsAnyMovieCategory(categories)) && !Regex.Match(title, "\bRUS\b", RegexOptions.IgnoreCase).Success) + { + title += " RUS"; } if (stripCyrillicLetters) @@ -1820,6 +1851,8 @@ namespace NzbDrone.Core.Indexers.Definitions public RuTrackerSettings() { RussianLetters = false; + UseMagnetLinks = false; + AddRussianToTitle = false; MoveFirstTagsToEndOfReleaseTitle = false; MoveAllTagsToEndOfReleaseTitle = false; } @@ -1827,10 +1860,16 @@ namespace NzbDrone.Core.Indexers.Definitions [FieldDefinition(4, Label = "Strip Russian letters", Type = FieldType.Checkbox, HelpText = "Removes russian letters")] public bool RussianLetters { get; set; } - [FieldDefinition(5, Label = "Move first tags to end of release title", Type = FieldType.Checkbox)] + [FieldDefinition(5, Label = "Use Magnet Links", Type = FieldType.Checkbox, HelpText = "When enabled this option will disable torrent links")] + public bool UseMagnetLinks { get; set; } + + [FieldDefinition(6, Label = "Add RUS to titles", Type = FieldType.Checkbox, HelpText = "Add RUS to end of all titles to improve language detection by Sonarr and Radarr. Will cause English-only results to be misidentified.")] + public bool AddRussianToTitle { get; set; } + + [FieldDefinition(7, Label = "Move first tags to end of release title", Type = FieldType.Checkbox)] public bool MoveFirstTagsToEndOfReleaseTitle { get; set; } - [FieldDefinition(6, Label = "Move all tags to end of release title", Type = FieldType.Checkbox)] + [FieldDefinition(8, Label = "Move all tags to end of release title", Type = FieldType.Checkbox)] public bool MoveAllTagsToEndOfReleaseTitle { get; set; } } }