mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-17 17:14:18 +02:00
More accurate indexer query times in History
This commit is contained in:
@@ -34,7 +34,7 @@ namespace NzbDrone.Core.Test.IndexerTests.FileListTests
|
|||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(4);
|
releases.Should().HaveCount(4);
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
releases.First().Should().BeOfType<TorrentInfo>();
|
||||||
|
@@ -46,7 +46,7 @@ namespace NzbDrone.Core.Test.IndexerTests.HDBitsTests
|
|||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.POST)))
|
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.POST)))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), responseJson));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), responseJson));
|
||||||
|
|
||||||
var torrents = Subject.Fetch(_movieSearchCriteria);
|
var torrents = Subject.Fetch(_movieSearchCriteria).Releases;
|
||||||
|
|
||||||
torrents.Should().HaveCount(2);
|
torrents.Should().HaveCount(2);
|
||||||
torrents.First().Should().BeOfType<HDBitsInfo>();
|
torrents.First().Should().BeOfType<HDBitsInfo>();
|
||||||
@@ -75,7 +75,7 @@ namespace NzbDrone.Core.Test.IndexerTests.HDBitsTests
|
|||||||
.Setup(v => v.Execute(It.IsAny<HttpRequest>()))
|
.Setup(v => v.Execute(It.IsAny<HttpRequest>()))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), Encoding.UTF8.GetBytes(responseJson)));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), Encoding.UTF8.GetBytes(responseJson)));
|
||||||
|
|
||||||
var torrents = Subject.Fetch(_movieSearchCriteria);
|
var torrents = Subject.Fetch(_movieSearchCriteria).Releases;
|
||||||
|
|
||||||
torrents.Should().BeEmpty();
|
torrents.Should().BeEmpty();
|
||||||
|
|
||||||
|
@@ -92,7 +92,7 @@ namespace NzbDrone.Core.Test.IndexerTests.IPTorrentsTests
|
|||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(5);
|
releases.Should().HaveCount(5);
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
releases.First().Should().BeOfType<TorrentInfo>();
|
||||||
|
@@ -44,7 +44,7 @@ namespace NzbDrone.Core.Test.IndexerTests.NewznabTests
|
|||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 }, Limit = 100, Offset = 0 });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 }, Limit = 100, Offset = 0 }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(100);
|
releases.Should().HaveCount(100);
|
||||||
|
|
||||||
|
@@ -34,7 +34,7 @@ namespace NzbDrone.Core.Test.IndexerTests.NyaaTests
|
|||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria());
|
var releases = Subject.Fetch(new MovieSearchCriteria()).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(4);
|
releases.Should().HaveCount(4);
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
releases.First().Should().BeOfType<TorrentInfo>();
|
||||||
|
@@ -42,7 +42,7 @@ namespace NzbDrone.Core.Test.IndexerTests.PTPTests
|
|||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader { ContentType = HttpAccept.Json.Value }, responseJson));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader { ContentType = HttpAccept.Json.Value }, responseJson));
|
||||||
|
|
||||||
var torrents = Subject.Fetch(new MovieSearchCriteria());
|
var torrents = Subject.Fetch(new MovieSearchCriteria()).Releases;
|
||||||
|
|
||||||
torrents.Should().HaveCount(293);
|
torrents.Should().HaveCount(293);
|
||||||
torrents.First().Should().BeOfType<PassThePopcornInfo>();
|
torrents.First().Should().BeOfType<PassThePopcornInfo>();
|
||||||
|
@@ -39,7 +39,7 @@ namespace NzbDrone.Core.Test.IndexerTests.RarbgTests
|
|||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(4);
|
releases.Should().HaveCount(4);
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
releases.First().Should().BeOfType<TorrentInfo>();
|
||||||
@@ -66,7 +66,7 @@ namespace NzbDrone.Core.Test.IndexerTests.RarbgTests
|
|||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), "{ error_code: 20, error: \"some message\" }"));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), "{ error_code: 20, error: \"some message\" }"));
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(0);
|
releases.Should().HaveCount(0);
|
||||||
}
|
}
|
||||||
@@ -78,7 +78,7 @@ namespace NzbDrone.Core.Test.IndexerTests.RarbgTests
|
|||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), "{ error_code: 25, error: \"some message\" }"));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), "{ error_code: 25, error: \"some message\" }"));
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(0);
|
releases.Should().HaveCount(0);
|
||||||
|
|
||||||
|
@@ -45,7 +45,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
|||||||
{
|
{
|
||||||
GivenRecentFeedResponse("TorrentRss/ImmortalSeed.xml");
|
GivenRecentFeedResponse("TorrentRss/ImmortalSeed.xml");
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(50);
|
releases.Should().HaveCount(50);
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
releases.First().Should().BeOfType<TorrentInfo>();
|
||||||
@@ -71,7 +71,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
|||||||
{
|
{
|
||||||
GivenRecentFeedResponse("TorrentRss/Ezrss.xml");
|
GivenRecentFeedResponse("TorrentRss/Ezrss.xml");
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(3);
|
releases.Should().HaveCount(3);
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
releases.First().Should().BeOfType<TorrentInfo>();
|
||||||
@@ -99,7 +99,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
|||||||
|
|
||||||
GivenRecentFeedResponse("TorrentRss/ShowRSS.info.xml");
|
GivenRecentFeedResponse("TorrentRss/ShowRSS.info.xml");
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(5);
|
releases.Should().HaveCount(5);
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
releases.First().Should().BeOfType<TorrentInfo>();
|
||||||
@@ -127,7 +127,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
|||||||
|
|
||||||
GivenRecentFeedResponse("TorrentRss/Doki.xml");
|
GivenRecentFeedResponse("TorrentRss/Doki.xml");
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(5);
|
releases.Should().HaveCount(5);
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
releases.First().Should().BeOfType<TorrentInfo>();
|
||||||
@@ -153,7 +153,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
|||||||
{
|
{
|
||||||
GivenRecentFeedResponse("TorrentRss/ExtraTorrents.xml");
|
GivenRecentFeedResponse("TorrentRss/ExtraTorrents.xml");
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(5);
|
releases.Should().HaveCount(5);
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
releases.First().Should().BeOfType<TorrentInfo>();
|
||||||
@@ -179,7 +179,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
|||||||
{
|
{
|
||||||
GivenRecentFeedResponse("TorrentRss/LimeTorrents.xml");
|
GivenRecentFeedResponse("TorrentRss/LimeTorrents.xml");
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(5);
|
releases.Should().HaveCount(5);
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
releases.First().Should().BeOfType<TorrentInfo>();
|
||||||
@@ -205,7 +205,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
|||||||
{
|
{
|
||||||
GivenRecentFeedResponse("TorrentRss/AnimeTosho_NoSize.xml");
|
GivenRecentFeedResponse("TorrentRss/AnimeTosho_NoSize.xml");
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(2);
|
releases.Should().HaveCount(2);
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
releases.First().Should().BeOfType<TorrentInfo>();
|
||||||
@@ -231,7 +231,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
|||||||
{
|
{
|
||||||
GivenRecentFeedResponse("TorrentRss/AnimeTosho_NoSize.xml");
|
GivenRecentFeedResponse("TorrentRss/AnimeTosho_NoSize.xml");
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(2);
|
releases.Should().HaveCount(2);
|
||||||
releases.Last().Should().BeOfType<TorrentInfo>();
|
releases.Last().Should().BeOfType<TorrentInfo>();
|
||||||
@@ -248,7 +248,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
|||||||
{
|
{
|
||||||
GivenRecentFeedResponse("TorrentRss/AlphaRatio.xml");
|
GivenRecentFeedResponse("TorrentRss/AlphaRatio.xml");
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(2);
|
releases.Should().HaveCount(2);
|
||||||
releases.Last().Should().BeOfType<TorrentInfo>();
|
releases.Last().Should().BeOfType<TorrentInfo>();
|
||||||
@@ -266,7 +266,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
|||||||
Subject.Definition.Settings.As<TorrentRssIndexerSettings>().AllowZeroSize = true;
|
Subject.Definition.Settings.As<TorrentRssIndexerSettings>().AllowZeroSize = true;
|
||||||
GivenRecentFeedResponse("TorrentRss/EvolutionWorld.xml");
|
GivenRecentFeedResponse("TorrentRss/EvolutionWorld.xml");
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } });
|
var releases = Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(2);
|
releases.Should().HaveCount(2);
|
||||||
releases.First().Should().BeOfType<TorrentInfo>();
|
releases.First().Should().BeOfType<TorrentInfo>();
|
||||||
@@ -292,7 +292,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
|||||||
{
|
{
|
||||||
GivenRecentFeedResponse("TorrentRss/invalid/TorrentDay_NoPubDate.xml");
|
GivenRecentFeedResponse("TorrentRss/invalid/TorrentDay_NoPubDate.xml");
|
||||||
|
|
||||||
Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Should().BeEmpty();
|
Subject.Fetch(new MovieSearchCriteria { Categories = new int[] { 2000 } }).Releases.Should().BeEmpty();
|
||||||
|
|
||||||
Mocker.GetMock<IIndexerStatusService>()
|
Mocker.GetMock<IIndexerStatusService>()
|
||||||
.Verify(v => v.RecordFailure(It.IsAny<int>(), TimeSpan.Zero), Times.Once());
|
.Verify(v => v.RecordFailure(It.IsAny<int>(), TimeSpan.Zero), Times.Once());
|
||||||
|
@@ -45,7 +45,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
|
|||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria());
|
var releases = Subject.Fetch(new MovieSearchCriteria()).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(5);
|
releases.Should().HaveCount(5);
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
|
|||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria());
|
var releases = Subject.Fetch(new MovieSearchCriteria()).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(5);
|
releases.Should().HaveCount(5);
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
|
|||||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||||
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
.Returns<HttpRequest>(r => new HttpResponse(r, new HttpHeader(), recentFeed));
|
||||||
|
|
||||||
var releases = Subject.Fetch(new MovieSearchCriteria());
|
var releases = Subject.Fetch(new MovieSearchCriteria()).Releases;
|
||||||
|
|
||||||
releases.Should().HaveCount(2);
|
releases.Should().HaveCount(2);
|
||||||
|
|
||||||
|
@@ -91,6 +91,7 @@ namespace NzbDrone.Core.History
|
|||||||
|
|
||||||
history.Data.Add("ElapsedTime", message.Time.ToString());
|
history.Data.Add("ElapsedTime", message.Time.ToString());
|
||||||
history.Data.Add("Query", message.Query.SearchTerm ?? string.Empty);
|
history.Data.Add("Query", message.Query.SearchTerm ?? string.Empty);
|
||||||
|
history.Data.Add("Categories", string.Join(',', message.Query.Categories) ?? string.Empty);
|
||||||
history.Data.Add("Successful", message.Successful.ToString());
|
history.Data.Add("Successful", message.Successful.ToString());
|
||||||
history.Data.Add("QueryResults", message.Results.HasValue ? message.Results.ToString() : null);
|
history.Data.Add("QueryResults", message.Results.HasValue ? message.Results.ToString() : null);
|
||||||
|
|
||||||
|
@@ -127,7 +127,7 @@ namespace NzbDrone.Core.IndexerSearch
|
|||||||
return spec;
|
return spec;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<ReleaseInfo> Dispatch(Func<IIndexer, IEnumerable<ReleaseInfo>> searchAction, SearchCriteriaBase criteriaBase)
|
private List<ReleaseInfo> Dispatch(Func<IIndexer, IndexerPageableQueryResult> searchAction, SearchCriteriaBase criteriaBase)
|
||||||
{
|
{
|
||||||
var indexers = criteriaBase.InteractiveSearch ?
|
var indexers = criteriaBase.InteractiveSearch ?
|
||||||
_indexerFactory.InteractiveSearchEnabled() :
|
_indexerFactory.InteractiveSearchEnabled() :
|
||||||
@@ -151,25 +151,25 @@ namespace NzbDrone.Core.IndexerSearch
|
|||||||
|
|
||||||
taskList.Add(taskFactory.StartNew(() =>
|
taskList.Add(taskFactory.StartNew(() =>
|
||||||
{
|
{
|
||||||
var sw = Stopwatch.StartNew();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var indexerReports = searchAction(indexerLocal);
|
var indexerReports = searchAction(indexerLocal);
|
||||||
|
|
||||||
lock (reports)
|
lock (reports)
|
||||||
{
|
{
|
||||||
reports.AddRange(indexerReports);
|
reports.AddRange(indexerReports.Releases);
|
||||||
}
|
}
|
||||||
|
|
||||||
_eventAggregator.PublishEvent(new IndexerQueryEvent(indexer.Definition.Id, criteriaBase, sw.ElapsedMilliseconds, true, indexerReports.Count()));
|
foreach (var query in indexerReports.Queries)
|
||||||
|
{
|
||||||
|
_eventAggregator.PublishEvent(new IndexerQueryEvent(indexer.Definition.Id, criteriaBase, query.ElapsedTime, true, indexerReports.Releases.Count()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
_eventAggregator.PublishEvent(new IndexerQueryEvent(indexer.Definition.Id, criteriaBase, sw.ElapsedMilliseconds, false));
|
_eventAggregator.PublishEvent(new IndexerQueryEvent(indexer.Definition.Id, criteriaBase, 0, false));
|
||||||
_logger.Error(e, "Error while searching for {0}", criteriaBase);
|
_logger.Error(e, "Error while searching for {0}", criteriaBase);
|
||||||
}
|
}
|
||||||
|
|
||||||
sw.Stop();
|
|
||||||
}).LogExceptions());
|
}).LogExceptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using FluentValidation.Results;
|
using FluentValidation.Results;
|
||||||
@@ -40,7 +41,7 @@ namespace NzbDrone.Core.Indexers
|
|||||||
_httpClient = httpClient;
|
_httpClient = httpClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IList<ReleaseInfo> Fetch(MovieSearchCriteria searchCriteria)
|
public override IndexerPageableQueryResult Fetch(MovieSearchCriteria searchCriteria)
|
||||||
{
|
{
|
||||||
//if (!SupportsSearch)
|
//if (!SupportsSearch)
|
||||||
//{
|
//{
|
||||||
@@ -49,41 +50,41 @@ namespace NzbDrone.Core.Indexers
|
|||||||
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IList<ReleaseInfo> Fetch(MusicSearchCriteria searchCriteria)
|
public override IndexerPageableQueryResult Fetch(MusicSearchCriteria searchCriteria)
|
||||||
{
|
{
|
||||||
if (!SupportsSearch)
|
if (!SupportsSearch)
|
||||||
{
|
{
|
||||||
return new List<ReleaseInfo>();
|
return new IndexerPageableQueryResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IList<ReleaseInfo> Fetch(TvSearchCriteria searchCriteria)
|
public override IndexerPageableQueryResult Fetch(TvSearchCriteria searchCriteria)
|
||||||
{
|
{
|
||||||
if (!SupportsSearch)
|
if (!SupportsSearch)
|
||||||
{
|
{
|
||||||
return new List<ReleaseInfo>();
|
return new IndexerPageableQueryResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IList<ReleaseInfo> Fetch(BookSearchCriteria searchCriteria)
|
public override IndexerPageableQueryResult Fetch(BookSearchCriteria searchCriteria)
|
||||||
{
|
{
|
||||||
if (!SupportsSearch)
|
if (!SupportsSearch)
|
||||||
{
|
{
|
||||||
return new List<ReleaseInfo>();
|
return new IndexerPageableQueryResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IList<ReleaseInfo> Fetch(BasicSearchCriteria searchCriteria)
|
public override IndexerPageableQueryResult Fetch(BasicSearchCriteria searchCriteria)
|
||||||
{
|
{
|
||||||
if (!SupportsSearch)
|
if (!SupportsSearch)
|
||||||
{
|
{
|
||||||
return new List<ReleaseInfo>();
|
return new IndexerPageableQueryResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
||||||
@@ -116,9 +117,10 @@ namespace NzbDrone.Core.Indexers
|
|||||||
return requests;
|
return requests;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual IList<ReleaseInfo> FetchReleases(Func<IIndexerRequestGenerator, IndexerPageableRequestChain> pageableRequestChainSelector, bool isRecent = false)
|
protected virtual IndexerPageableQueryResult FetchReleases(Func<IIndexerRequestGenerator, IndexerPageableRequestChain> pageableRequestChainSelector, bool isRecent = false)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
|
var result = new IndexerPageableQueryResult();
|
||||||
var url = string.Empty;
|
var url = string.Empty;
|
||||||
|
|
||||||
try
|
try
|
||||||
@@ -153,9 +155,11 @@ namespace NzbDrone.Core.Indexers
|
|||||||
|
|
||||||
var page = FetchPage(request, parser);
|
var page = FetchPage(request, parser);
|
||||||
|
|
||||||
pagedReleases.AddRange(page);
|
result.Queries.Add(page);
|
||||||
|
|
||||||
if (isRecent && page.Any())
|
pagedReleases.AddRange(page.Releases);
|
||||||
|
|
||||||
|
if (isRecent && page.Releases.Any())
|
||||||
{
|
{
|
||||||
if (lastReleaseInfo == null)
|
if (lastReleaseInfo == null)
|
||||||
{
|
{
|
||||||
@@ -163,8 +167,8 @@ namespace NzbDrone.Core.Indexers
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
var oldestReleaseDate = page.Select(v => v.PublishDate).Min();
|
var oldestReleaseDate = page.Releases.Select(v => v.PublishDate).Min();
|
||||||
if (oldestReleaseDate < lastReleaseInfo.PublishDate || page.Any(v => v.DownloadUrl == lastReleaseInfo.DownloadUrl))
|
if (oldestReleaseDate < lastReleaseInfo.PublishDate || page.Releases.Any(v => v.DownloadUrl == lastReleaseInfo.DownloadUrl))
|
||||||
{
|
{
|
||||||
fullyUpdated = true;
|
fullyUpdated = true;
|
||||||
break;
|
break;
|
||||||
@@ -182,7 +186,7 @@ namespace NzbDrone.Core.Indexers
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!IsFullPage(page))
|
if (!IsFullPage(page.Releases))
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -289,7 +293,9 @@ namespace NzbDrone.Core.Indexers
|
|||||||
_logger.Error(ex, "An error occurred while processing indexer feed. {0}", url);
|
_logger.Error(ex, "An error occurred while processing indexer feed. {0}", url);
|
||||||
}
|
}
|
||||||
|
|
||||||
return CleanupReleases(releases);
|
result.Releases = CleanupReleases(releases);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IndexerCapabilities GetCapabilities()
|
public override IndexerCapabilities GetCapabilities()
|
||||||
@@ -312,13 +318,18 @@ namespace NzbDrone.Core.Indexers
|
|||||||
return PageSize != 0 && page.Count >= PageSize;
|
return PageSize != 0 && page.Count >= PageSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual IList<ReleaseInfo> FetchPage(IndexerRequest request, IParseIndexerResponse parser)
|
protected virtual IndexerQueryResult FetchPage(IndexerRequest request, IParseIndexerResponse parser)
|
||||||
{
|
{
|
||||||
var response = FetchIndexerResponse(request);
|
var response = FetchIndexerResponse(request);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return parser.ParseResponse(response).ToList();
|
return new IndexerQueryResult
|
||||||
|
{
|
||||||
|
Releases = parser.ParseResponse(response).ToList(),
|
||||||
|
ElapsedTime = response.ElapsedTime,
|
||||||
|
StatusCode = (int)response.HttpResponse.StatusCode
|
||||||
|
};
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -339,7 +350,13 @@ namespace NzbDrone.Core.Indexers
|
|||||||
|
|
||||||
request.HttpRequest.AllowAutoRedirect = true;
|
request.HttpRequest.AllowAutoRedirect = true;
|
||||||
|
|
||||||
return new IndexerResponse(request, _httpClient.Execute(request.HttpRequest));
|
var stopWatch = Stopwatch.StartNew();
|
||||||
|
|
||||||
|
var response = _httpClient.Execute(request.HttpRequest);
|
||||||
|
|
||||||
|
stopWatch.Stop();
|
||||||
|
|
||||||
|
return new IndexerResponse(request, response, stopWatch.ElapsedMilliseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Test(List<ValidationFailure> failures)
|
protected override void Test(List<ValidationFailure> failures)
|
||||||
@@ -366,7 +383,7 @@ namespace NzbDrone.Core.Indexers
|
|||||||
|
|
||||||
var releases = FetchPage(firstRequest, parser);
|
var releases = FetchPage(firstRequest, parser);
|
||||||
|
|
||||||
if (releases.Empty())
|
if (releases.Releases.Empty())
|
||||||
{
|
{
|
||||||
return new ValidationFailure(string.Empty, "Query successful, but no results were returned from your indexer. This may be an issue with the indexer or your indexer category settings.");
|
return new ValidationFailure(string.Empty, "Query successful, but no results were returned from your indexer. This may be an issue with the indexer or your indexer category settings.");
|
||||||
}
|
}
|
||||||
|
@@ -14,11 +14,11 @@ namespace NzbDrone.Core.Indexers
|
|||||||
DownloadProtocol Protocol { get; }
|
DownloadProtocol Protocol { get; }
|
||||||
IndexerPrivacy Privacy { get; }
|
IndexerPrivacy Privacy { get; }
|
||||||
|
|
||||||
IList<ReleaseInfo> Fetch(MovieSearchCriteria searchCriteria);
|
IndexerPageableQueryResult Fetch(MovieSearchCriteria searchCriteria);
|
||||||
IList<ReleaseInfo> Fetch(MusicSearchCriteria searchCriteria);
|
IndexerPageableQueryResult Fetch(MusicSearchCriteria searchCriteria);
|
||||||
IList<ReleaseInfo> Fetch(TvSearchCriteria searchCriteria);
|
IndexerPageableQueryResult Fetch(TvSearchCriteria searchCriteria);
|
||||||
IList<ReleaseInfo> Fetch(BookSearchCriteria searchCriteria);
|
IndexerPageableQueryResult Fetch(BookSearchCriteria searchCriteria);
|
||||||
IList<ReleaseInfo> Fetch(BasicSearchCriteria searchCriteria);
|
IndexerPageableQueryResult Fetch(BasicSearchCriteria searchCriteria);
|
||||||
|
|
||||||
IndexerCapabilities GetCapabilities();
|
IndexerCapabilities GetCapabilities();
|
||||||
}
|
}
|
||||||
|
@@ -65,11 +65,11 @@ namespace NzbDrone.Core.Indexers
|
|||||||
|
|
||||||
protected TSettings Settings => (TSettings)Definition.Settings;
|
protected TSettings Settings => (TSettings)Definition.Settings;
|
||||||
|
|
||||||
public abstract IList<ReleaseInfo> Fetch(MovieSearchCriteria searchCriteria);
|
public abstract IndexerPageableQueryResult Fetch(MovieSearchCriteria searchCriteria);
|
||||||
public abstract IList<ReleaseInfo> Fetch(MusicSearchCriteria searchCriteria);
|
public abstract IndexerPageableQueryResult Fetch(MusicSearchCriteria searchCriteria);
|
||||||
public abstract IList<ReleaseInfo> Fetch(TvSearchCriteria searchCriteria);
|
public abstract IndexerPageableQueryResult Fetch(TvSearchCriteria searchCriteria);
|
||||||
public abstract IList<ReleaseInfo> Fetch(BookSearchCriteria searchCriteria);
|
public abstract IndexerPageableQueryResult Fetch(BookSearchCriteria searchCriteria);
|
||||||
public abstract IList<ReleaseInfo> Fetch(BasicSearchCriteria searchCriteria);
|
public abstract IndexerPageableQueryResult Fetch(BasicSearchCriteria searchCriteria);
|
||||||
|
|
||||||
public abstract IndexerCapabilities GetCapabilities();
|
public abstract IndexerCapabilities GetCapabilities();
|
||||||
|
|
||||||
|
21
src/NzbDrone.Core/Indexers/IndexerPageableQueryResult.cs
Normal file
21
src/NzbDrone.Core/Indexers/IndexerPageableQueryResult.cs
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using NzbDrone.Core.Parser.Model;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Indexers
|
||||||
|
{
|
||||||
|
public class IndexerPageableQueryResult
|
||||||
|
{
|
||||||
|
public IndexerPageableQueryResult()
|
||||||
|
{
|
||||||
|
Releases = new List<ReleaseInfo>();
|
||||||
|
Queries = new List<IndexerQueryResult>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IList<ReleaseInfo> Releases { get; set; }
|
||||||
|
public IList<IndexerQueryResult> Queries { get; set; }
|
||||||
|
}
|
||||||
|
}
|
18
src/NzbDrone.Core/Indexers/IndexerQueryResult.cs
Normal file
18
src/NzbDrone.Core/Indexers/IndexerQueryResult.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using NzbDrone.Core.Parser.Model;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Indexers
|
||||||
|
{
|
||||||
|
public class IndexerQueryResult
|
||||||
|
{
|
||||||
|
public IndexerQueryResult()
|
||||||
|
{
|
||||||
|
Releases = new List<ReleaseInfo>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IList<ReleaseInfo> Releases { get; set; }
|
||||||
|
public long ElapsedTime { get; set; }
|
||||||
|
public int StatusCode { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@@ -1,4 +1,4 @@
|
|||||||
using NzbDrone.Common.Http;
|
using NzbDrone.Common.Http;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Indexers
|
namespace NzbDrone.Core.Indexers
|
||||||
{
|
{
|
||||||
@@ -7,10 +7,11 @@ namespace NzbDrone.Core.Indexers
|
|||||||
private readonly IndexerRequest _indexerRequest;
|
private readonly IndexerRequest _indexerRequest;
|
||||||
private readonly HttpResponse _httpResponse;
|
private readonly HttpResponse _httpResponse;
|
||||||
|
|
||||||
public IndexerResponse(IndexerRequest indexerRequest, HttpResponse httpResponse)
|
public IndexerResponse(IndexerRequest indexerRequest, HttpResponse httpResponse, long elapsedTime = 0)
|
||||||
{
|
{
|
||||||
_indexerRequest = indexerRequest;
|
_indexerRequest = indexerRequest;
|
||||||
_httpResponse = httpResponse;
|
_httpResponse = httpResponse;
|
||||||
|
ElapsedTime = elapsedTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IndexerRequest Request => _indexerRequest;
|
public IndexerRequest Request => _indexerRequest;
|
||||||
@@ -20,5 +21,6 @@ namespace NzbDrone.Core.Indexers
|
|||||||
public HttpResponse HttpResponse => _httpResponse;
|
public HttpResponse HttpResponse => _httpResponse;
|
||||||
|
|
||||||
public string Content => _httpResponse.Content;
|
public string Content => _httpResponse.Content;
|
||||||
|
public long ElapsedTime { get; private set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user