From 6d25b468cef5df578f6d80f07d1361b63e9c670d Mon Sep 17 00:00:00 2001 From: Qstick Date: Tue, 9 Mar 2021 23:51:58 -0500 Subject: [PATCH] Fixed: Grab from Search page --- .../IndexerSearch/NewznabRequest.cs | 1 + .../IndexerSearch/NzbSearchService.cs | 25 +++++++++++++------ src/Prowlarr.Api.V1/Indexers/IndexerModule.cs | 7 +----- src/Prowlarr.Api.V1/Search/SearchModule.cs | 4 ++- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/NzbDrone.Core/IndexerSearch/NewznabRequest.cs b/src/NzbDrone.Core/IndexerSearch/NewznabRequest.cs index f251418e3..7c3cee291 100644 --- a/src/NzbDrone.Core/IndexerSearch/NewznabRequest.cs +++ b/src/NzbDrone.Core/IndexerSearch/NewznabRequest.cs @@ -27,5 +27,6 @@ namespace NzbDrone.Core.IndexerSearch public string title { get; set; } public string configured { get; set; } public string source { get; set; } + public string server { get; set; } } } diff --git a/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs b/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs index d8167c046..c6a9c6f5c 100644 --- a/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs +++ b/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs @@ -22,21 +22,22 @@ namespace NzbDrone.Core.IndexerSearch { private readonly IEventAggregator _eventAggregator; private readonly IIndexerFactory _indexerFactory; + private readonly IDownloadMappingService _downloadMappingService; private readonly Logger _logger; public NzbSearchService(IEventAggregator eventAggregator, IIndexerFactory indexerFactory, + IDownloadMappingService downloadMappingService, Logger logger) { _eventAggregator = eventAggregator; _indexerFactory = indexerFactory; + _downloadMappingService = downloadMappingService; _logger = logger; } public NewznabResults Search(NewznabRequest request, List indexerIds, bool interactiveSearch) { - var results = new NewznabResults(); - switch (request.t) { case "movie": @@ -60,7 +61,7 @@ namespace NzbDrone.Core.IndexerSearch searchSpec.TmdbId = request.tmdbid; searchSpec.TraktId = request.traktid; - return new NewznabResults { Releases = Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec) }; + return new NewznabResults { Releases = MapReleases(Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec), request.server) }; } private NewznabResults MusicSearch(NewznabRequest request, List indexerIds, bool interactiveSearch) @@ -71,7 +72,7 @@ namespace NzbDrone.Core.IndexerSearch searchSpec.Album = request.album; searchSpec.Label = request.label; - return new NewznabResults { Releases = Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec) }; + return new NewznabResults { Releases = MapReleases(Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec), request.server) }; } private NewznabResults TvSearch(NewznabRequest request, List indexerIds, bool interactiveSearch) @@ -86,7 +87,7 @@ namespace NzbDrone.Core.IndexerSearch searchSpec.RId = request.rid; searchSpec.TvMazeId = request.tvmazeid; - return new NewznabResults { Releases = Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec) }; + return new NewznabResults { Releases = MapReleases(Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec), request.server) }; } private NewznabResults BookSearch(NewznabRequest request, List indexerIds, bool interactiveSearch) @@ -96,14 +97,24 @@ namespace NzbDrone.Core.IndexerSearch searchSpec.Author = request.author; searchSpec.Title = request.title; - return new NewznabResults { Releases = Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec) }; + return new NewznabResults { Releases = MapReleases(Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec), request.server) }; } private NewznabResults BasicSearch(NewznabRequest request, List indexerIds, bool interactiveSearch) { var searchSpec = Get(request, indexerIds, interactiveSearch); - return new NewznabResults { Releases = Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec) }; + return new NewznabResults { Releases = MapReleases(Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec), request.server) }; + } + + private List MapReleases(List releases, string serverUrl) + { + foreach (var result in releases) + { + result.DownloadUrl = _downloadMappingService.ConvertToProxyLink(new Uri(result.DownloadUrl), serverUrl, result.IndexerId, result.Title).ToString(); + } + + return releases; } private TSpec Get(NewznabRequest query, List indexerIds, bool interactiveSearch) diff --git a/src/Prowlarr.Api.V1/Indexers/IndexerModule.cs b/src/Prowlarr.Api.V1/Indexers/IndexerModule.cs index a6f1fdfd4..d1bf49ce9 100644 --- a/src/Prowlarr.Api.V1/Indexers/IndexerModule.cs +++ b/src/Prowlarr.Api.V1/Indexers/IndexerModule.cs @@ -54,6 +54,7 @@ namespace Prowlarr.Api.V1.Indexers { var requestType = request.t; request.source = UserAgentParser.ParseSource(Request.Headers.UserAgent); + request.server = Request.GetServerUrl(); if (requestType.IsNullOrWhiteSpace()) { @@ -68,7 +69,6 @@ namespace Prowlarr.Api.V1.Indexers } var indexerInstance = _indexerFactory.GetInstance(indexer); - var serverUrl = Request.GetServerUrl(); switch (requestType) { @@ -83,11 +83,6 @@ namespace Prowlarr.Api.V1.Indexers case "movie": var results = _nzbSearchService.Search(request, new List { indexer.Id }, false); - foreach (var result in results.Releases) - { - result.DownloadUrl = _downloadMappingService.ConvertToProxyLink(new Uri(result.DownloadUrl), serverUrl, indexer.Id, result.Title).ToString(); - } - Response searchResponse = results.ToXml(indexerInstance.Protocol); searchResponse.ContentType = "application/rss+xml"; return searchResponse; diff --git a/src/Prowlarr.Api.V1/Search/SearchModule.cs b/src/Prowlarr.Api.V1/Search/SearchModule.cs index 5bc9c95f4..e4b778282 100644 --- a/src/Prowlarr.Api.V1/Search/SearchModule.cs +++ b/src/Prowlarr.Api.V1/Search/SearchModule.cs @@ -9,6 +9,7 @@ using NzbDrone.Core.IndexerSearch; using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.Parser.Model; using Prowlarr.Http; +using Prowlarr.Http.Extensions; namespace Prowlarr.Api.V1.Search { @@ -51,7 +52,8 @@ namespace Prowlarr.Api.V1.Search { try { - var decisions = _nzbSearhService.Search(new NewznabRequest { q = query, source = "Prowlarr", t = "search", cat = string.Join(",", categories) }, indexerIds, true).Releases; + var request = new NewznabRequest { q = query, source = "Prowlarr", t = "search", cat = string.Join(",", categories), server = Request.GetServerUrl() }; + var decisions = _nzbSearhService.Search(request, indexerIds, true).Releases; return MapDecisions(decisions); }