Ensure the correct use of disposable parsed documents

pull/1889/head
Bogdan 8 months ago
parent 93ec6cf89b
commit 19a196e2c7

@ -200,7 +200,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("div#content table > tbody > tr");
foreach (var row in rows)

@ -77,7 +77,7 @@ namespace NzbDrone.Core.Indexers.Definitions
else
{
var parser = new HtmlParser();
var document = await parser.ParseDocumentAsync(response.Content);
using var document = await parser.ParseDocumentAsync(response.Content);
var errorMessage = document.QuerySelector("#content .berror .berror_c")?.TextContent.Trim();
throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report.");
@ -433,7 +433,7 @@ namespace NzbDrone.Core.Indexers.Definitions
{
var torrentInfos = new List<TorrentInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
foreach (var t in dom.QuerySelectorAll("#tabs .torrent_c > div"))
{
@ -465,7 +465,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var torrentInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var links = dom.QuerySelectorAll(".searchitem > h3 > a[href], #dle-content > .story > .story_h > .lcol > h2 > a[href]");
foreach (var link in links)

@ -275,7 +275,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("table tr");
foreach (var (row, index) in rows.Skip(1).Select((v, i) => (v, i)))

@ -253,7 +253,7 @@ namespace NzbDrone.Core.Indexers.Definitions
{
var torrentInfos = new List<TorrentInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
foreach (var t in dom.QuerySelectorAll("ul.media__tabs__nav > li > a"))
{
@ -291,7 +291,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var torrentInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var links = dom.QuerySelectorAll("a.ads-list__item__title");
foreach (var link in links)

@ -72,7 +72,7 @@ namespace NzbDrone.Core.Indexers.Definitions
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var errorMessage = dom.QuerySelector("form#loginform")?.TextContent.Trim();
throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report.");
@ -206,7 +206,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var torrentInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var doc = parser.ParseDocument(indexerResponse.Content);
using var doc = parser.ParseDocument(indexerResponse.Content);
var rows = doc.QuerySelectorAll("table.torrent_table > tbody > tr.torrent");
foreach (var row in rows)
{

@ -37,7 +37,7 @@ public class AroLol : GazelleBase<AroLolSettings>
if (response.Content.Contains("loginform"))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var errorMessage = dom.QuerySelector("#loginform > .warning")?.TextContent.Trim();
throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report.");

@ -88,7 +88,7 @@ public class AudioBookBay : TorrentIndexerBase<NoAuthTorrentBaseSettings>
var response = await _httpClient.ExecuteProxiedAsync(request, Definition);
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var hash = dom.QuerySelector("td:contains(\"Info Hash:\") ~ td")?.TextContent.Trim();
if (hash == null)
@ -333,7 +333,7 @@ public class AudioBookBayParser : IParseIndexerResponse
private static IHtmlDocument ParseHtmlDocument(string response)
{
var parser = new HtmlParser();
var doc = parser.ParseDocument(response);
using var doc = parser.ParseDocument(response);
var hidden = doc.QuerySelectorAll("div.post.re-ab");
foreach (var element in hidden)

@ -72,7 +72,7 @@ namespace NzbDrone.Core.Indexers.Definitions
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var messageEl = dom.QuerySelectorAll("#loginform");
var messages = new List<string>();
for (var i = 0; i < 13; i++)
@ -242,7 +242,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var torrentInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("#torrent_table > tbody > tr.torrent");
foreach (var row in rows)

@ -55,7 +55,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var response = await _httpClient.ExecuteProxiedAsync(request, Definition);
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var downloadLink = dom.QuerySelector(".download_link")?.GetAttribute("href");
if (downloadLink.IsNullOrWhiteSpace())
@ -82,7 +82,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var loginPage = await ExecuteAuth(new HttpRequest(loginUrl));
var parser = new HtmlParser();
var dom = await parser.ParseDocumentAsync(loginPage.Content);
using var dom = await parser.ParseDocumentAsync(loginPage.Content);
var loginKey = dom.QuerySelector("input[name=\"loginKey\"]");
if (loginKey != null)
{
@ -102,7 +102,7 @@ namespace NzbDrone.Core.Indexers.Definitions
if (CheckIfLoginNeeded(response))
{
var htmlParser = new HtmlParser();
var document = await htmlParser.ParseDocumentAsync(response.Content);
using var document = await htmlParser.ParseDocumentAsync(response.Content);
var errorMessage = document.QuerySelector("#loginError, .error")?.TextContent.Trim();
throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report.");
@ -247,7 +247,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll(".torrents tr.torrent, .torrents tr.torrent_alt");
var currentCategories = new List<IndexerCategory> { NewznabStandardCategory.TVAnime };

@ -161,7 +161,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var doc = parser.ParseDocument(indexerResponse.Content);
using var doc = parser.ParseDocument(indexerResponse.Content);
var rows = doc.QuerySelectorAll("table.xMenuT > tbody > tr").Skip(1);
foreach (var row in rows)
{

@ -185,7 +185,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var torrentInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
foreach (var child in dom.QuerySelectorAll("#needseed"))
{
child.Remove();

@ -598,7 +598,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
}
var resultParser = new HtmlParser();
var resultDocument = resultParser.ParseDocument(loginResult.Content);
using var resultDocument = resultParser.ParseDocument(loginResult.Content);
foreach (var error in errorBlocks)
{
var selection = resultDocument.QuerySelector(error.Selector);
@ -984,7 +984,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
var selectorText = ApplyGoTemplateText(selector.Selector, variables);
var parser = new HtmlParser();
var resultDocument = parser.ParseDocument(response.Content);
using var resultDocument = parser.ParseDocument(response.Content);
var element = resultDocument.QuerySelector(selectorText);
if (element == null)
@ -1045,7 +1045,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann
if (_definition.Login.Test?.Selector != null && (response.Headers.ContentType?.Contains("text/html") ?? true))
{
var parser = new HtmlParser();
var document = parser.ParseDocument(response.Content);
using var document = parser.ParseDocument(response.Content);
var selection = document.QuerySelectorAll(_definition.Login.Test.Selector);
if (selection.Length == 0)

@ -70,7 +70,7 @@ public class FunFile : TorrentIndexerBase<UserPassTorrentBaseSettings>
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = await parser.ParseDocumentAsync(response.Content);
var errorMessage = dom.QuerySelector("td.mf_content")?.TextContent.Trim();
throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report.");
@ -276,7 +276,7 @@ public class FunFileParser : IParseIndexerResponse
var releaseInfos = new List<TorrentInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("table.mainframe table[cellpadding=\"2\"] > tbody > tr:has(td.row3)");
foreach (var row in rows)

@ -73,7 +73,7 @@ namespace NzbDrone.Core.Indexers.Definitions
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var errorMessages = dom
.QuerySelectorAll("table.lista td.lista span[style*=\"#FF0000\"], table.lista td.header:contains(\"login attempts\")")
.Select(r => r.TextContent.Trim())

@ -74,7 +74,7 @@ namespace NzbDrone.Core.Indexers.Definitions
if (response.Content != null && !response.Content.ContainsIgnoreCase("If your browser doesn't have javascript enabled"))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = await parser.ParseDocumentAsync(response.Content);
var errorMessage = dom.QuerySelector("div > font[color=\"#FF0000\"]")?.TextContent.Trim();
@ -256,7 +256,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var userInfo = dom.QuerySelector("table.navus tr");
var userRank = userInfo?.Children[1].TextContent.Replace("Rank:", string.Empty).Trim();

@ -291,7 +291,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var torrentInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var doc = parser.ParseDocument(indexerResponse.Content);
using var doc = parser.ParseDocument(indexerResponse.Content);
var rows = doc.QuerySelectorAll("table[id=\"torrents\"] > tbody > tr");
foreach (var row in rows)

@ -266,7 +266,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("table#sortabletable > tbody > tr:has(a[href*=\"details.php?id=\"])");
foreach (var row in rows)

@ -77,7 +77,7 @@ public class Libble : TorrentIndexerBase<LibbleSettings>
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var errorMessage = dom.QuerySelector("#loginform > .warning")?.TextContent.Trim();
throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report.");
@ -238,7 +238,7 @@ public class LibbleParser : IParseIndexerResponse
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var doc = parser.ParseDocument(indexerResponse.Content);
using var doc = parser.ParseDocument(indexerResponse.Content);
var groups = doc.QuerySelectorAll("table#torrent_table > tbody > tr.group:has(strong > a[href*=\"torrents.php?id=\"])");
foreach (var group in groups)

@ -177,7 +177,7 @@ public class MoreThanTVParser : IParseIndexerResponse
try
{
var parser = new HtmlParser();
var document = parser.ParseDocument(indexerResponse.Content);
using var document = parser.ParseDocument(indexerResponse.Content);
var torrents = document.QuerySelectorAll("#torrent_table > tbody > tr.torrent");
var movies = new[] { "movie" };
var tv = new[] { "season", "episode" };

@ -263,7 +263,7 @@ public class NorBitsParser : IParseIndexerResponse
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("#torrentTable > tbody > tr").Skip(1).ToCollection();

@ -234,7 +234,7 @@ public class PirateTheNetParser : IParseIndexerResponse
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("table.main > tbody > tr");
foreach (var row in rows.Skip(1))

@ -171,7 +171,7 @@ public class PixelHDParser : IParseIndexerResponse
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var groups = dom.QuerySelectorAll("div.browsePoster");
foreach (var group in groups)

@ -85,7 +85,7 @@ public class PreToMe : TorrentIndexerBase<PreToMeSettings>
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var errorMessage = dom.QuerySelector("table.body_table font[color~=\"red\"]")?.TextContent.Trim();
throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report.");
@ -340,7 +340,7 @@ public class PreToMeParser : IParseIndexerResponse
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("table > tbody > tr.browse");
foreach (var row in rows)

@ -249,7 +249,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var torrentInfos = new List<TorrentInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("#torrents-table > tbody > tr");
foreach (var row in rows.Skip(1))

@ -63,7 +63,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var response = await _httpClient.ExecuteProxiedAsync(request, Definition);
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var magnetLink = dom.QuerySelector("table.attach a.magnet-link[href^=\"magnet:?\"]")?.GetAttribute("href");
if (magnetLink == null)
@ -104,7 +104,7 @@ namespace NzbDrone.Core.Indexers.Definitions
if (!response.Content.Contains("id=\"logged-in-username\""))
{
var parser = new HtmlParser();
var document = await parser.ParseDocumentAsync(response.Content);
using var document = await parser.ParseDocumentAsync(response.Content);
var errorMessage = document.QuerySelector("h4.warnColor1.tCenter.mrg_16, div.msg-main")?.TextContent.Trim();
throw new IndexerAuthException(errorMessage ?? "RuTracker Auth Failed");
@ -1580,7 +1580,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var doc = parser.ParseDocument(indexerResponse.Content);
using var doc = parser.ParseDocument(indexerResponse.Content);
var rows = doc.QuerySelectorAll("table#tor-tbl > tbody > tr");
foreach (var row in rows)

@ -225,7 +225,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var table = dom.QuerySelector("table.movehere");
if (table == null)

@ -78,7 +78,7 @@ public class Shazbat : TorrentIndexerBase<ShazbatSettings>
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = await parser.ParseDocumentAsync(response.Content);
var errorMessage = dom.QuerySelector("div#fail .modal-body")?.TextContent.Trim();
throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report.");
@ -223,7 +223,7 @@ public class ShazbatParser : IParseIndexerResponse
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var hasGlobalFreeleech = dom.QuerySelector("span:contains(\"Freeleech until:\"):has(span.datetime)") != null;
@ -303,7 +303,7 @@ public class ShazbatParser : IParseIndexerResponse
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
if (!hasGlobalFreeleech)
{

@ -96,7 +96,7 @@ public class SpeedCD : TorrentIndexerBase<SpeedCDSettings>
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var errorMessage = dom.QuerySelector("h5")?.TextContent.Trim();
if (response.Content.Contains("Wrong Captcha!"))
@ -323,7 +323,7 @@ public class SpeedCDParser : IParseIndexerResponse
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("div.boxContent > table > tbody > tr");
foreach (var row in rows)

@ -75,7 +75,7 @@ namespace NzbDrone.Core.Indexers.Definitions
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var errorMessage = dom.QuerySelector("form#loginform")?.TextContent.Trim();
throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report.");
@ -224,7 +224,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var torrentInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var doc = parser.ParseDocument(indexerResponse.Content);
using var doc = parser.ParseDocument(indexerResponse.Content);
// get params to build download link (user could be banned without those params)
var rssFeedUri = new Uri(_settings.BaseUrl + doc.QuerySelector("link[href^=\"/feeds.php?feed=\"]")

@ -74,7 +74,7 @@ namespace NzbDrone.Core.Indexers.Definitions
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = await parser.ParseDocumentAsync(response.Content);
var errorMessage = dom.QuerySelector("table.forumline table span.gen")?.FirstChild?.TextContent;
throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report.");
@ -367,7 +367,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("table.forumline > tbody > tr[class*=prow]");
foreach (var row in rows)

@ -71,7 +71,7 @@ namespace NzbDrone.Core.Indexers.Definitions
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var errorMessage = dom.QuerySelector("td.embedded")?.TextContent.Trim();
throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report.");
@ -245,7 +245,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var torrentInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var doc = parser.ParseDocument(indexerResponse.Content);
using var doc = parser.ParseDocument(indexerResponse.Content);
var rows = doc.QuerySelectorAll("table > tbody:has(tr > td.colhead) > tr:not(:has(td.colhead))");
foreach (var row in rows)
{

@ -65,7 +65,7 @@ public class Uniotaku : TorrentIndexerBase<UniotakuSettings>
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = await parser.ParseDocumentAsync(response.Content);
var errorMessage = dom.QuerySelector(".login-content span.text-red")?.TextContent.Trim();
throw new IndexerAuthException(errorMessage ?? "Unknown error message, please report.");
@ -92,7 +92,7 @@ public class Uniotaku : TorrentIndexerBase<UniotakuSettings>
var response = await _httpClient.ExecuteProxiedAsync(request, Definition);
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = parser.ParseDocument(response.Content);
var downloadLink = dom.QuerySelector("a[href^=\"download.php?id=\"]")?.GetAttribute("href")?.Trim();
if (downloadLink == null)
@ -250,9 +250,9 @@ public class UniotakuParser : IParseIndexerResponse
var publishDate = DateTime.Now;
foreach (var item in jsonContent.Value<JArray>("data"))
{
var detailsDom = parser.ParseDocument(item.SelectToken("[0]").Value<string>());
var categoryDom = parser.ParseDocument(item.SelectToken("[1]").Value<string>());
var groupDom = parser.ParseDocument(item.SelectToken("[7]").Value<string>());
using var detailsDom = parser.ParseDocument(item.SelectToken("[0]").Value<string>());
using var categoryDom = parser.ParseDocument(item.SelectToken("[1]").Value<string>());
using var groupDom = parser.ParseDocument(item.SelectToken("[7]").Value<string>());
var qTitleLink = detailsDom.QuerySelector("a[href^=\"torrents-details.php?id=\"]");
var title = qTitleLink?.TextContent.Trim();

@ -72,7 +72,7 @@ public class XSpeeds : TorrentIndexerBase<UserPassTorrentBaseSettings>
if (CheckIfLoginNeeded(response))
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.Content);
using var dom = await parser.ParseDocumentAsync(response.Content);
var errorMessage = dom.QuerySelector(".left_side table:nth-of-type(1) tr:nth-of-type(2)")?.TextContent.Trim().Replace("\n\t", " ");
if (errorMessage.IsNullOrWhiteSpace())
{
@ -289,7 +289,7 @@ public class XSpeedsParser : IParseIndexerResponse
var releaseInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var dom = parser.ParseDocument(indexerResponse.Content);
using var dom = parser.ParseDocument(indexerResponse.Content);
var rows = dom.QuerySelectorAll("table#sortabletable > tbody > tr:has(a[href*=\"details.php?id=\"])");
foreach (var row in rows)

@ -59,7 +59,7 @@ namespace NzbDrone.Core.Indexers.Definitions
// The first page set the cookies and the session_id
var loginPage = await ExecuteAuth(new HttpRequest(Login1Url));
var parser = new HtmlParser();
var dom = parser.ParseDocument(loginPage.Content);
using var dom = parser.ParseDocument(loginPage.Content);
var sessionId = dom.QuerySelector("input#session_id")?.GetAttribute("value");
if (string.IsNullOrWhiteSpace(sessionId))
{
@ -315,7 +315,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var torrentInfos = new List<ReleaseInfo>();
var parser = new HtmlParser();
var doc = parser.ParseDocument(indexerResponse.Content);
using var doc = parser.ParseDocument(indexerResponse.Content);
var rows = doc.QuerySelectorAll("table.torrent_list > tbody > tr");

Loading…
Cancel
Save