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)))
|
||||
.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.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)))
|
||||
.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.First().Should().BeOfType<HDBitsInfo>();
|
||||
@@ -75,7 +75,7 @@ namespace NzbDrone.Core.Test.IndexerTests.HDBitsTests
|
||||
.Setup(v => v.Execute(It.IsAny<HttpRequest>()))
|
||||
.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();
|
||||
|
||||
|
@@ -92,7 +92,7 @@ namespace NzbDrone.Core.Test.IndexerTests.IPTorrentsTests
|
||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||
.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.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)))
|
||||
.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);
|
||||
|
||||
|
@@ -34,7 +34,7 @@ namespace NzbDrone.Core.Test.IndexerTests.NyaaTests
|
||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||
.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.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)))
|
||||
.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.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)))
|
||||
.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.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)))
|
||||
.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);
|
||||
}
|
||||
@@ -78,7 +78,7 @@ namespace NzbDrone.Core.Test.IndexerTests.RarbgTests
|
||||
.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\" }"));
|
||||
|
||||
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);
|
||||
|
||||
|
@@ -45,7 +45,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
||||
{
|
||||
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.First().Should().BeOfType<TorrentInfo>();
|
||||
@@ -71,7 +71,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
||||
{
|
||||
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.First().Should().BeOfType<TorrentInfo>();
|
||||
@@ -99,7 +99,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
||||
|
||||
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.First().Should().BeOfType<TorrentInfo>();
|
||||
@@ -127,7 +127,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
||||
|
||||
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.First().Should().BeOfType<TorrentInfo>();
|
||||
@@ -153,7 +153,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
||||
{
|
||||
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.First().Should().BeOfType<TorrentInfo>();
|
||||
@@ -179,7 +179,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
||||
{
|
||||
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.First().Should().BeOfType<TorrentInfo>();
|
||||
@@ -205,7 +205,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
||||
{
|
||||
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.First().Should().BeOfType<TorrentInfo>();
|
||||
@@ -231,7 +231,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
||||
{
|
||||
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.Last().Should().BeOfType<TorrentInfo>();
|
||||
@@ -248,7 +248,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
||||
{
|
||||
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.Last().Should().BeOfType<TorrentInfo>();
|
||||
@@ -266,7 +266,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
||||
Subject.Definition.Settings.As<TorrentRssIndexerSettings>().AllowZeroSize = true;
|
||||
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.First().Should().BeOfType<TorrentInfo>();
|
||||
@@ -292,7 +292,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorrentRssIndexerTests
|
||||
{
|
||||
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>()
|
||||
.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)))
|
||||
.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);
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
|
||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||
.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);
|
||||
|
||||
@@ -104,7 +104,7 @@ namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
|
||||
.Setup(o => o.Execute(It.Is<HttpRequest>(v => v.Method == HttpMethod.GET)))
|
||||
.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);
|
||||
|
||||
|
@@ -91,6 +91,7 @@ namespace NzbDrone.Core.History
|
||||
|
||||
history.Data.Add("ElapsedTime", message.Time.ToString());
|
||||
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("QueryResults", message.Results.HasValue ? message.Results.ToString() : null);
|
||||
|
||||
|
@@ -127,7 +127,7 @@ namespace NzbDrone.Core.IndexerSearch
|
||||
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 ?
|
||||
_indexerFactory.InteractiveSearchEnabled() :
|
||||
@@ -151,25 +151,25 @@ namespace NzbDrone.Core.IndexerSearch
|
||||
|
||||
taskList.Add(taskFactory.StartNew(() =>
|
||||
{
|
||||
var sw = Stopwatch.StartNew();
|
||||
try
|
||||
{
|
||||
var indexerReports = searchAction(indexerLocal);
|
||||
|
||||
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)
|
||||
{
|
||||
_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);
|
||||
}
|
||||
|
||||
sw.Stop();
|
||||
}).LogExceptions());
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using FluentValidation.Results;
|
||||
@@ -40,7 +41,7 @@ namespace NzbDrone.Core.Indexers
|
||||
_httpClient = httpClient;
|
||||
}
|
||||
|
||||
public override IList<ReleaseInfo> Fetch(MovieSearchCriteria searchCriteria)
|
||||
public override IndexerPageableQueryResult Fetch(MovieSearchCriteria searchCriteria)
|
||||
{
|
||||
//if (!SupportsSearch)
|
||||
//{
|
||||
@@ -49,41 +50,41 @@ namespace NzbDrone.Core.Indexers
|
||||
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
||||
}
|
||||
|
||||
public override IList<ReleaseInfo> Fetch(MusicSearchCriteria searchCriteria)
|
||||
public override IndexerPageableQueryResult Fetch(MusicSearchCriteria searchCriteria)
|
||||
{
|
||||
if (!SupportsSearch)
|
||||
{
|
||||
return new List<ReleaseInfo>();
|
||||
return new IndexerPageableQueryResult();
|
||||
}
|
||||
|
||||
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
||||
}
|
||||
|
||||
public override IList<ReleaseInfo> Fetch(TvSearchCriteria searchCriteria)
|
||||
public override IndexerPageableQueryResult Fetch(TvSearchCriteria searchCriteria)
|
||||
{
|
||||
if (!SupportsSearch)
|
||||
{
|
||||
return new List<ReleaseInfo>();
|
||||
return new IndexerPageableQueryResult();
|
||||
}
|
||||
|
||||
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
||||
}
|
||||
|
||||
public override IList<ReleaseInfo> Fetch(BookSearchCriteria searchCriteria)
|
||||
public override IndexerPageableQueryResult Fetch(BookSearchCriteria searchCriteria)
|
||||
{
|
||||
if (!SupportsSearch)
|
||||
{
|
||||
return new List<ReleaseInfo>();
|
||||
return new IndexerPageableQueryResult();
|
||||
}
|
||||
|
||||
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
||||
}
|
||||
|
||||
public override IList<ReleaseInfo> Fetch(BasicSearchCriteria searchCriteria)
|
||||
public override IndexerPageableQueryResult Fetch(BasicSearchCriteria searchCriteria)
|
||||
{
|
||||
if (!SupportsSearch)
|
||||
{
|
||||
return new List<ReleaseInfo>();
|
||||
return new IndexerPageableQueryResult();
|
||||
}
|
||||
|
||||
return FetchReleases(g => g.GetSearchRequests(searchCriteria));
|
||||
@@ -116,9 +117,10 @@ namespace NzbDrone.Core.Indexers
|
||||
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 result = new IndexerPageableQueryResult();
|
||||
var url = string.Empty;
|
||||
|
||||
try
|
||||
@@ -153,9 +155,11 @@ namespace NzbDrone.Core.Indexers
|
||||
|
||||
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)
|
||||
{
|
||||
@@ -163,8 +167,8 @@ namespace NzbDrone.Core.Indexers
|
||||
break;
|
||||
}
|
||||
|
||||
var oldestReleaseDate = page.Select(v => v.PublishDate).Min();
|
||||
if (oldestReleaseDate < lastReleaseInfo.PublishDate || page.Any(v => v.DownloadUrl == lastReleaseInfo.DownloadUrl))
|
||||
var oldestReleaseDate = page.Releases.Select(v => v.PublishDate).Min();
|
||||
if (oldestReleaseDate < lastReleaseInfo.PublishDate || page.Releases.Any(v => v.DownloadUrl == lastReleaseInfo.DownloadUrl))
|
||||
{
|
||||
fullyUpdated = true;
|
||||
break;
|
||||
@@ -182,7 +186,7 @@ namespace NzbDrone.Core.Indexers
|
||||
break;
|
||||
}
|
||||
|
||||
if (!IsFullPage(page))
|
||||
if (!IsFullPage(page.Releases))
|
||||
{
|
||||
break;
|
||||
}
|
||||
@@ -289,7 +293,9 @@ namespace NzbDrone.Core.Indexers
|
||||
_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()
|
||||
@@ -312,13 +318,18 @@ namespace NzbDrone.Core.Indexers
|
||||
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);
|
||||
|
||||
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)
|
||||
{
|
||||
@@ -339,7 +350,13 @@ namespace NzbDrone.Core.Indexers
|
||||
|
||||
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)
|
||||
@@ -366,7 +383,7 @@ namespace NzbDrone.Core.Indexers
|
||||
|
||||
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.");
|
||||
}
|
||||
|
@@ -14,11 +14,11 @@ namespace NzbDrone.Core.Indexers
|
||||
DownloadProtocol Protocol { get; }
|
||||
IndexerPrivacy Privacy { get; }
|
||||
|
||||
IList<ReleaseInfo> Fetch(MovieSearchCriteria searchCriteria);
|
||||
IList<ReleaseInfo> Fetch(MusicSearchCriteria searchCriteria);
|
||||
IList<ReleaseInfo> Fetch(TvSearchCriteria searchCriteria);
|
||||
IList<ReleaseInfo> Fetch(BookSearchCriteria searchCriteria);
|
||||
IList<ReleaseInfo> Fetch(BasicSearchCriteria searchCriteria);
|
||||
IndexerPageableQueryResult Fetch(MovieSearchCriteria searchCriteria);
|
||||
IndexerPageableQueryResult Fetch(MusicSearchCriteria searchCriteria);
|
||||
IndexerPageableQueryResult Fetch(TvSearchCriteria searchCriteria);
|
||||
IndexerPageableQueryResult Fetch(BookSearchCriteria searchCriteria);
|
||||
IndexerPageableQueryResult Fetch(BasicSearchCriteria searchCriteria);
|
||||
|
||||
IndexerCapabilities GetCapabilities();
|
||||
}
|
||||
|
@@ -65,11 +65,11 @@ namespace NzbDrone.Core.Indexers
|
||||
|
||||
protected TSettings Settings => (TSettings)Definition.Settings;
|
||||
|
||||
public abstract IList<ReleaseInfo> Fetch(MovieSearchCriteria searchCriteria);
|
||||
public abstract IList<ReleaseInfo> Fetch(MusicSearchCriteria searchCriteria);
|
||||
public abstract IList<ReleaseInfo> Fetch(TvSearchCriteria searchCriteria);
|
||||
public abstract IList<ReleaseInfo> Fetch(BookSearchCriteria searchCriteria);
|
||||
public abstract IList<ReleaseInfo> Fetch(BasicSearchCriteria searchCriteria);
|
||||
public abstract IndexerPageableQueryResult Fetch(MovieSearchCriteria searchCriteria);
|
||||
public abstract IndexerPageableQueryResult Fetch(MusicSearchCriteria searchCriteria);
|
||||
public abstract IndexerPageableQueryResult Fetch(TvSearchCriteria searchCriteria);
|
||||
public abstract IndexerPageableQueryResult Fetch(BookSearchCriteria searchCriteria);
|
||||
public abstract IndexerPageableQueryResult Fetch(BasicSearchCriteria searchCriteria);
|
||||
|
||||
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
|
||||
{
|
||||
@@ -7,10 +7,11 @@ namespace NzbDrone.Core.Indexers
|
||||
private readonly IndexerRequest _indexerRequest;
|
||||
private readonly HttpResponse _httpResponse;
|
||||
|
||||
public IndexerResponse(IndexerRequest indexerRequest, HttpResponse httpResponse)
|
||||
public IndexerResponse(IndexerRequest indexerRequest, HttpResponse httpResponse, long elapsedTime = 0)
|
||||
{
|
||||
_indexerRequest = indexerRequest;
|
||||
_httpResponse = httpResponse;
|
||||
ElapsedTime = elapsedTime;
|
||||
}
|
||||
|
||||
public IndexerRequest Request => _indexerRequest;
|
||||
@@ -20,5 +21,6 @@ namespace NzbDrone.Core.Indexers
|
||||
public HttpResponse HttpResponse => _httpResponse;
|
||||
|
||||
public string Content => _httpResponse.Content;
|
||||
public long ElapsedTime { get; private set; }
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user