From 7daa5083277401412365096d2dec3d933dbc0d48 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 28 Apr 2026 18:05:46 +0300 Subject: [PATCH] Add CancellationToken to HttpClient async methods --- .../Http/Dispatchers/IHttpDispatcher.cs | 3 +- .../Http/Dispatchers/ManagedHttpDispatcher.cs | 5 +- src/NzbDrone.Common/Http/HttpClient.cs | 49 ++++++++++--------- .../DownloadClientFixtureBase.cs | 3 +- .../HadoukenTests/HadoukenFixture.cs | 3 +- .../BroadcastheNetFixture.cs | 13 ++--- .../IndexerTests/FanzubTests/FanzubFixture.cs | 3 +- .../FileListTests/FileListFixture.cs | 3 +- .../IndexerTests/HDBitsTests/HDBitsFixture.cs | 5 +- .../IPTorrentsTests/IPTorrentsFixture.cs | 3 +- .../NewznabTests/NewznabFixture.cs | 9 ++-- .../IndexerTests/NyaaTests/NyaaFixture.cs | 3 +- .../IndexerTests/SeasonSearchFixture.cs | 3 +- .../TorrentRssIndexerFixture.cs | 3 +- .../TorrentleechTests/TorrentleechFixture.cs | 3 +- .../TorznabTests/TorznabFixture.cs | 11 +++-- .../Download/TorrentClientBase.cs | 2 +- .../Download/UsenetClientBase.cs | 2 +- 18 files changed, 71 insertions(+), 55 deletions(-) diff --git a/src/NzbDrone.Common/Http/Dispatchers/IHttpDispatcher.cs b/src/NzbDrone.Common/Http/Dispatchers/IHttpDispatcher.cs index a5565f26b..47d19331b 100644 --- a/src/NzbDrone.Common/Http/Dispatchers/IHttpDispatcher.cs +++ b/src/NzbDrone.Common/Http/Dispatchers/IHttpDispatcher.cs @@ -1,10 +1,11 @@ using System.Net; +using System.Threading; using System.Threading.Tasks; namespace NzbDrone.Common.Http.Dispatchers { public interface IHttpDispatcher { - Task GetResponseAsync(HttpRequest request, CookieContainer cookies); + Task GetResponseAsync(HttpRequest request, CookieContainer cookies, CancellationToken cancellationToken = default); } } diff --git a/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs b/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs index 43061ab0c..487a50dfb 100644 --- a/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs +++ b/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs @@ -44,7 +44,7 @@ public ManagedHttpDispatcher(IHttpProxySettingsProvider proxySettingsProvider, _httpHappyEyeballs = new HttpHappyEyeballs(logger); } - public async Task GetResponseAsync(HttpRequest request, CookieContainer cookies) + public async Task GetResponseAsync(HttpRequest request, CookieContainer cookies, CancellationToken cancellationToken = default) { using var requestMessage = new HttpRequestMessage(request.Method, (Uri)request.Url); requestMessage.Version = HttpVersion.Version20; @@ -58,7 +58,8 @@ public async Task GetResponseAsync(HttpRequest request, CookieCont requestMessage.Headers.Add("Cookie", cookieHeader); } - using var cts = new CancellationTokenSource(); + using var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); + if (request.RequestTimeout != TimeSpan.Zero) { cts.CancelAfter(request.RequestTimeout); diff --git a/src/NzbDrone.Common/Http/HttpClient.cs b/src/NzbDrone.Common/Http/HttpClient.cs index dee92460b..503f307fd 100644 --- a/src/NzbDrone.Common/Http/HttpClient.cs +++ b/src/NzbDrone.Common/Http/HttpClient.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Net; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using NLog; using NzbDrone.Common.Cache; @@ -27,14 +28,14 @@ HttpResponse Get(HttpRequest request) HttpResponse Post(HttpRequest request) where T : new(); - Task ExecuteAsync(HttpRequest request); - Task DownloadFileAsync(string url, string fileName); - Task GetAsync(HttpRequest request); - Task> GetAsync(HttpRequest request) + Task ExecuteAsync(HttpRequest request, CancellationToken cancellationToken = default); + Task DownloadFileAsync(string url, string fileName, CancellationToken cancellationToken = default); + Task GetAsync(HttpRequest request, CancellationToken cancellationToken = default); + Task> GetAsync(HttpRequest request, CancellationToken cancellationToken = default) where T : new(); - Task HeadAsync(HttpRequest request); - Task PostAsync(HttpRequest request); - Task> PostAsync(HttpRequest request) + Task HeadAsync(HttpRequest request, CancellationToken cancellationToken = default); + Task PostAsync(HttpRequest request, CancellationToken cancellationToken = default); + Task> PostAsync(HttpRequest request, CancellationToken cancellationToken = default) where T : new(); } @@ -62,11 +63,11 @@ public HttpClient(IEnumerable requestInterceptors, _cookieContainerCache = cacheManager.GetCache(typeof(HttpClient)); } - public virtual async Task ExecuteAsync(HttpRequest request) + public virtual async Task ExecuteAsync(HttpRequest request, CancellationToken cancellationToken = default) { var cookieContainer = InitializeRequestCookies(request); - var response = await ExecuteRequestAsync(request, cookieContainer); + var response = await ExecuteRequestAsync(request, cookieContainer, cancellationToken); if (request.AllowAutoRedirect && response.HasHttpRedirect) { @@ -92,7 +93,7 @@ public virtual async Task ExecuteAsync(HttpRequest request) request.ContentSummary = null; } - response = await ExecuteRequestAsync(request, cookieContainer); + response = await ExecuteRequestAsync(request, cookieContainer, cancellationToken); } while (response.HasHttpRedirect); } @@ -137,7 +138,7 @@ private static bool RequestRequiresForceGet(HttpStatusCode statusCode, HttpMetho }; } - private async Task ExecuteRequestAsync(HttpRequest request, CookieContainer cookieContainer) + private async Task ExecuteRequestAsync(HttpRequest request, CookieContainer cookieContainer, CancellationToken cancellationToken = default) { foreach (var interceptor in _requestInterceptors) { @@ -153,7 +154,7 @@ private async Task ExecuteRequestAsync(HttpRequest request, Cookie var stopWatch = Stopwatch.StartNew(); - var response = await _httpDispatcher.GetResponseAsync(request, cookieContainer); + var response = await _httpDispatcher.GetResponseAsync(request, cookieContainer, cancellationToken); HandleResponseCookies(response, cookieContainer); @@ -261,7 +262,7 @@ private void AddCookiesToContainer(HttpUri url, string[] cookieHeaders, CookieCo } } - public async Task DownloadFileAsync(string url, string fileName) + public async Task DownloadFileAsync(string url, string fileName, CancellationToken cancellationToken = default) { var fileNamePart = fileName + ".part"; @@ -282,7 +283,7 @@ public async Task DownloadFileAsync(string url, string fileName) request.AllowAutoRedirect = true; request.ResponseStream = fileStream; request.RequestTimeout = TimeSpan.FromSeconds(300); - var response = await GetAsync(request); + var response = await GetAsync(request, cancellationToken); if (response.Headers.ContentType != null && response.Headers.ContentType.Contains("text/html")) { @@ -315,10 +316,10 @@ public void DownloadFile(string url, string fileName) Task.Run(() => DownloadFileAsync(url, fileName)).GetAwaiter().GetResult(); } - public Task GetAsync(HttpRequest request) + public Task GetAsync(HttpRequest request, CancellationToken cancellationToken = default) { request.Method = HttpMethod.Get; - return ExecuteAsync(request); + return ExecuteAsync(request, cancellationToken); } public HttpResponse Get(HttpRequest request) @@ -326,10 +327,10 @@ public HttpResponse Get(HttpRequest request) return Task.Run(() => GetAsync(request)).GetAwaiter().GetResult(); } - public async Task> GetAsync(HttpRequest request) + public async Task> GetAsync(HttpRequest request, CancellationToken cancellationToken = default) where T : new() { - var response = await GetAsync(request); + var response = await GetAsync(request, cancellationToken); CheckResponseContentType(response); return new HttpResponse(response); } @@ -340,10 +341,10 @@ public HttpResponse Get(HttpRequest request) return Task.Run(() => GetAsync(request)).GetAwaiter().GetResult(); } - public Task HeadAsync(HttpRequest request) + public Task HeadAsync(HttpRequest request, CancellationToken cancellationToken = default) { request.Method = HttpMethod.Head; - return ExecuteAsync(request); + return ExecuteAsync(request, cancellationToken); } public HttpResponse Head(HttpRequest request) @@ -351,10 +352,10 @@ public HttpResponse Head(HttpRequest request) return Task.Run(() => HeadAsync(request)).GetAwaiter().GetResult(); } - public Task PostAsync(HttpRequest request) + public Task PostAsync(HttpRequest request, CancellationToken cancellationToken = default) { request.Method = HttpMethod.Post; - return ExecuteAsync(request); + return ExecuteAsync(request, cancellationToken); } public HttpResponse Post(HttpRequest request) @@ -362,10 +363,10 @@ public HttpResponse Post(HttpRequest request) return Task.Run(() => PostAsync(request)).GetAwaiter().GetResult(); } - public async Task> PostAsync(HttpRequest request) + public async Task> PostAsync(HttpRequest request, CancellationToken cancellationToken = default) where T : new() { - var response = await PostAsync(request); + var response = await PostAsync(request, cancellationToken); CheckResponseContentType(response); return new HttpResponse(response); } diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadClientFixtureBase.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadClientFixtureBase.cs index f920257ea..509d20421 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadClientFixtureBase.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadClientFixtureBase.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; using FluentAssertions; using Moq; @@ -39,7 +40,7 @@ public void SetupBase() Mocker.GetMock() .Setup(s => s.GetAsync(It.IsAny())) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), Array.Empty()))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), Array.Empty()))); Mocker.GetMock() .Setup(v => v.RemapRemoteToLocal(It.IsAny(), It.IsAny())) diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/HadoukenTests/HadoukenFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/HadoukenTests/HadoukenFixture.cs index bf609e48c..9a8fc9092 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/HadoukenTests/HadoukenFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/HadoukenTests/HadoukenFixture.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using FluentAssertions; using Moq; @@ -105,7 +106,7 @@ protected void GivenSuccessfulDownload() { Mocker.GetMock() .Setup(s => s.GetAsync(It.IsAny())) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), new byte[1000]))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), new byte[1000]))); Mocker.GetMock() .Setup(s => s.AddTorrentUri(It.IsAny(), It.IsAny())) diff --git a/src/NzbDrone.Core.Test/IndexerTests/BroadcastheNetTests/BroadcastheNetFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/BroadcastheNetTests/BroadcastheNetFixture.cs index 9a07d8a8b..e0e8764cb 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/BroadcastheNetTests/BroadcastheNetFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/BroadcastheNetTests/BroadcastheNetFixture.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using FluentAssertions; using Moq; @@ -34,7 +35,7 @@ public async Task should_parse_recent_feed_from_BroadcastheNet() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Post))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var releases = await Subject.FetchRecent(); @@ -79,7 +80,7 @@ public async Task should_back_off_on_bad_request() { Mocker.GetMock() .Setup(v => v.ExecuteAsync(It.IsAny())) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), Array.Empty(), System.Net.HttpStatusCode.BadRequest))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), Array.Empty(), System.Net.HttpStatusCode.BadRequest))); var results = await Subject.FetchRecent(); @@ -95,7 +96,7 @@ public async Task should_back_off_and_report_api_key_invalid() { Mocker.GetMock() .Setup(v => v.ExecuteAsync(It.IsAny())) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), Array.Empty(), System.Net.HttpStatusCode.Unauthorized))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), Array.Empty(), System.Net.HttpStatusCode.Unauthorized))); var results = await Subject.FetchRecent(); @@ -111,7 +112,7 @@ public async Task should_back_off_on_unknown_method() { Mocker.GetMock() .Setup(v => v.ExecuteAsync(It.IsAny())) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), Array.Empty(), System.Net.HttpStatusCode.NotFound))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), Array.Empty(), System.Net.HttpStatusCode.NotFound))); var results = await Subject.FetchRecent(); @@ -127,7 +128,7 @@ public async Task should_back_off_api_limit_reached() { Mocker.GetMock() .Setup(v => v.ExecuteAsync(It.IsAny())) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), Array.Empty(), System.Net.HttpStatusCode.ServiceUnavailable))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), Array.Empty(), System.Net.HttpStatusCode.ServiceUnavailable))); var results = await Subject.FetchRecent(); @@ -149,7 +150,7 @@ public async Task should_replace_https_http_as_needed() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Post))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var releases = await Subject.FetchRecent(); diff --git a/src/NzbDrone.Core.Test/IndexerTests/FanzubTests/FanzubFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/FanzubTests/FanzubFixture.cs index f07bc4ad8..1f6619f36 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/FanzubTests/FanzubFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/FanzubTests/FanzubFixture.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using FluentAssertions; using Moq; @@ -32,7 +33,7 @@ public async Task should_parse_recent_feed_from_fanzub() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var releases = await Subject.FetchRecent(); diff --git a/src/NzbDrone.Core.Test/IndexerTests/FileListTests/FileListFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/FileListTests/FileListFixture.cs index 91128bd1a..6ec96e927 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/FileListTests/FileListFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/FileListTests/FileListFixture.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using FluentAssertions; using Moq; @@ -33,7 +34,7 @@ public async Task should_parse_recent_feed_from_FileList() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader { { "Content-Type", "application/json" } }, recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader { { "Content-Type", "application/json" } }, recentFeed))); var releases = await Subject.FetchRecent(); diff --git a/src/NzbDrone.Core.Test/IndexerTests/HDBitsTests/HDBitsFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/HDBitsTests/HDBitsFixture.cs index 4332131d9..2f6037039 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/HDBitsTests/HDBitsFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/HDBitsTests/HDBitsFixture.cs @@ -2,6 +2,7 @@ using System.Linq; using System.Net.Http; using System.Text; +using System.Threading; using System.Threading.Tasks; using FluentAssertions; using Moq; @@ -37,7 +38,7 @@ public async Task should_parse_recent_feed_from_HDBits(string fileName) Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Post))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), responseJson))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), responseJson))); var torrents = await Subject.FetchRecent(); @@ -66,7 +67,7 @@ public async Task should_warn_on_wrong_passkey() Mocker.GetMock() .Setup(v => v.ExecuteAsync(It.IsAny())) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), Encoding.UTF8.GetBytes(responseJson)))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), Encoding.UTF8.GetBytes(responseJson)))); var torrents = await Subject.FetchRecent(); diff --git a/src/NzbDrone.Core.Test/IndexerTests/IPTorrentsTests/IPTorrentsFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/IPTorrentsTests/IPTorrentsFixture.cs index 0bf21ffc0..4391bf0d2 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/IPTorrentsTests/IPTorrentsFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/IPTorrentsTests/IPTorrentsFixture.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using FluentAssertions; using Moq; @@ -91,7 +92,7 @@ public async Task should_parse_recent_feed_from_IPTorrents() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var releases = await Subject.FetchRecent(); diff --git a/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabFixture.cs index cdafafb2d..c004ebae5 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabFixture.cs @@ -2,6 +2,7 @@ using System.Linq; using System.Net; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using DryIoc.ImTools; using FluentAssertions; @@ -49,7 +50,7 @@ public async Task should_parse_recent_feed_from_newznab_nzb_su() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var releases = await Subject.FetchRecent(); @@ -75,7 +76,7 @@ public async Task should_parse_recent_feed_from_newznab_animetosho() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var releases = await Subject.FetchRecent(); @@ -145,7 +146,7 @@ public async Task should_parse_languages() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var releases = await Subject.FetchRecent(); @@ -173,7 +174,7 @@ public async Task should_parse_indexer_flags(string releaseGuid, params IndexerF Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), feed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), feed))); var releases = await Subject.FetchRecent(); diff --git a/src/NzbDrone.Core.Test/IndexerTests/NyaaTests/NyaaFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/NyaaTests/NyaaFixture.cs index 5f42b5012..31fbff7ed 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/NyaaTests/NyaaFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/NyaaTests/NyaaFixture.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using FluentAssertions; using Moq; @@ -65,7 +66,7 @@ public async Task should_parse_2021_recent_feed_from_Nyaa() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var releases = await Subject.FetchRecent(); diff --git a/src/NzbDrone.Core.Test/IndexerTests/SeasonSearchFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/SeasonSearchFixture.cs index 28f31e3a7..4f927bc36 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/SeasonSearchFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/SeasonSearchFixture.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using FizzWare.NBuilder; using Moq; @@ -25,7 +26,7 @@ public void Setup() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), ""))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), ""))); } private void WithIndexer(bool paging, int resultCount) diff --git a/src/NzbDrone.Core.Test/IndexerTests/TorrentRssIndexerTests/TorrentRssIndexerFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/TorrentRssIndexerTests/TorrentRssIndexerFixture.cs index e25421379..91e83d573 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/TorrentRssIndexerTests/TorrentRssIndexerFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/TorrentRssIndexerTests/TorrentRssIndexerFixture.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Threading; using System.Threading.Tasks; using FluentAssertions; using Moq; @@ -37,7 +38,7 @@ private void GivenRecentFeedResponse(string rssXmlFile) Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.IsAny())) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); Mocker.GetMock() .Setup(o => o.Execute(It.IsAny())) diff --git a/src/NzbDrone.Core.Test/IndexerTests/TorrentleechTests/TorrentleechFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/TorrentleechTests/TorrentleechFixture.cs index 8a45d7389..aae54826c 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/TorrentleechTests/TorrentleechFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/TorrentleechTests/TorrentleechFixture.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using FluentAssertions; using Moq; @@ -33,7 +34,7 @@ public async Task should_parse_recent_feed_from_Torrentleech() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var releases = await Subject.FetchRecent(); diff --git a/src/NzbDrone.Core.Test/IndexerTests/TorznabTests/TorznabFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/TorznabTests/TorznabFixture.cs index 0768e1e6e..3dbafc9dc 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/TorznabTests/TorznabFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/TorznabTests/TorznabFixture.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using FizzWare.NBuilder; using FluentAssertions; @@ -51,7 +52,7 @@ public async Task should_parse_recent_feed_from_torznab_hdaccess_net() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var releases = await Subject.FetchRecent(); @@ -82,7 +83,7 @@ public async Task should_parse_recent_feed_from_torznab_tpb() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var releases = await Subject.FetchRecent(); @@ -112,7 +113,7 @@ public async Task should_parse_recent_feed_from_torznab_animetosho() Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var releases = await Subject.FetchRecent(); @@ -175,7 +176,7 @@ public void jackett_all_url_should_not_validate(string baseUrl) Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); var result = new NzbDroneValidationResult(Subject.Test()); result.IsValid.Should().BeTrue(); @@ -190,7 +191,7 @@ public void jackett_all_api_should_not_validate(string apiPath) Mocker.GetMock() .Setup(o => o.ExecuteAsync(It.Is(v => v.Method == HttpMethod.Get))) - .Returns(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); + .Returns((r, _) => Task.FromResult(new HttpResponse(r, new HttpHeader(), recentFeed))); (Subject.Definition.Settings as TorznabSettings).ApiPath = apiPath; diff --git a/src/NzbDrone.Core/Download/TorrentClientBase.cs b/src/NzbDrone.Core/Download/TorrentClientBase.cs index a7c0c8f32..33199f770 100644 --- a/src/NzbDrone.Core/Download/TorrentClientBase.cs +++ b/src/NzbDrone.Core/Download/TorrentClientBase.cs @@ -140,7 +140,7 @@ private async Task DownloadFromWebUrl(RemoteEpisode remoteEpisode, IInde request.AllowAutoRedirect = false; var response = await RetryStrategy - .ExecuteAsync(static async (state, _) => await state._httpClient.GetAsync(state.request), (_httpClient, request)) + .ExecuteAsync(static async (state, token) => await state._httpClient.GetAsync(state.request, token), (_httpClient, request)) .ConfigureAwait(false); if (response.StatusCode == HttpStatusCode.MovedPermanently || diff --git a/src/NzbDrone.Core/Download/UsenetClientBase.cs b/src/NzbDrone.Core/Download/UsenetClientBase.cs index da81aac29..c8da2309f 100644 --- a/src/NzbDrone.Core/Download/UsenetClientBase.cs +++ b/src/NzbDrone.Core/Download/UsenetClientBase.cs @@ -51,7 +51,7 @@ public override async Task Download(RemoteEpisode remoteEpisode, IIndexe request.AllowAutoRedirect = true; var response = await RetryStrategy - .ExecuteAsync(static async (state, _) => await state._httpClient.GetAsync(state.request), (_httpClient, request)) + .ExecuteAsync(static async (state, token) => await state._httpClient.GetAsync(state.request, token), (_httpClient, request)) .ConfigureAwait(false); nzbData = response.ResponseData;