mirror of
https://github.com/Lidarr/Lidarr
synced 2026-01-21 23:12:28 +01:00
More cleanup and DI
This commit is contained in:
parent
4326ecf7d2
commit
c19643e321
5 changed files with 55 additions and 62 deletions
|
|
@ -2,6 +2,7 @@
|
|||
using System.Net;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using NLog;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.ImportLists;
|
||||
|
|
@ -18,15 +19,15 @@ public class DiscogsListsFixture
|
|||
private DiscogsListsParser _parser;
|
||||
private Mock<IHttpClient> _httpClient;
|
||||
private DiscogsListsSettings _settings;
|
||||
private Logger _logger;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_httpClient = new Mock<IHttpClient>();
|
||||
_parser = new DiscogsListsParser();
|
||||
_settings = new DiscogsListsSettings { Token = "token", ListId = "123", BaseUrl = "https://api.discogs.com" };
|
||||
|
||||
_parser.SetContext(_httpClient.Object, _settings);
|
||||
_logger = LogManager.GetCurrentClassLogger();
|
||||
_parser = new DiscogsListsParser(_settings, _httpClient.Object, _logger);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
|
|
|||
|
|
@ -23,10 +23,8 @@ public class DiscogsWantlistFixture
|
|||
public void SetUp()
|
||||
{
|
||||
_httpClient = new Mock<IHttpClient>();
|
||||
_parser = new DiscogsWantlistParser();
|
||||
_settings = new DiscogsWantlistSettings { Token = "token", Username = "user", BaseUrl = "https://api.discogs.com" };
|
||||
|
||||
_parser.SetContext(_httpClient.Object, _settings);
|
||||
_parser = new DiscogsWantlistParser(_settings, _httpClient.Object);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
|
@ -133,5 +131,4 @@ private ImportListResponse BuildWantlistResponse(string content, HttpStatusCode
|
|||
|
||||
return new ImportListResponse(importListRequest, httpResponse);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
|
|
@ -11,68 +10,61 @@ namespace NzbDrone.Core.ImportLists.Discogs;
|
|||
|
||||
public class DiscogsListsParser : IParseImportListResponse
|
||||
{
|
||||
private IHttpClient _httpClient;
|
||||
private DiscogsListsSettings _settings;
|
||||
private Logger _logger;
|
||||
private readonly DiscogsListsSettings _settings;
|
||||
private readonly IHttpClient _httpClient;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public DiscogsListsParser()
|
||||
public DiscogsListsParser(DiscogsListsSettings settings, IHttpClient httpClient, Logger logger)
|
||||
{
|
||||
}
|
||||
|
||||
public void SetContext(IHttpClient httpClient, DiscogsListsSettings settings, Logger logger = null)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
_settings = settings;
|
||||
_logger = logger ?? LogManager.GetCurrentClassLogger();
|
||||
_httpClient = httpClient;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public IList<ImportListItemInfo> ParseResponse(ImportListResponse importListResponse)
|
||||
{
|
||||
DiscogsParserHelper.EnsureValidResponse(importListResponse,
|
||||
"Discogs API responded with HTML content. List may be too large or API may be unavailable.");
|
||||
var items = new List<ImportListItemInfo>();
|
||||
|
||||
if (!PreProcess(importListResponse))
|
||||
{
|
||||
return items;
|
||||
}
|
||||
|
||||
var jsonResponse = Json.Deserialize<DiscogsListResponse>(importListResponse.Content);
|
||||
|
||||
if (jsonResponse?.Items == null)
|
||||
{
|
||||
return new List<ImportListItemInfo>();
|
||||
return items;
|
||||
}
|
||||
|
||||
var items = new List<ImportListItemInfo>();
|
||||
|
||||
foreach (var resourceUrl in jsonResponse.Items.Where(IsReleaseItem).Select(item => item.ResourceUrl))
|
||||
foreach (var item in jsonResponse.Items)
|
||||
{
|
||||
var releaseInfo = TryFetchRelease(resourceUrl);
|
||||
|
||||
if (releaseInfo != null)
|
||||
if (item.Type == "release" && item.ResourceUrl.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
items.Add(releaseInfo);
|
||||
try
|
||||
{
|
||||
var releaseInfo = FetchReleaseDetails(item.ResourceUrl);
|
||||
items.AddIfNotNull(releaseInfo);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error(ex, "Discogs release details API call resulted in an unexpected exception");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
private static bool IsReleaseItem(DiscogsListItem item)
|
||||
private bool PreProcess(ImportListResponse importListResponse)
|
||||
{
|
||||
return item?.Type == "release" && item.ResourceUrl.IsNotNullOrWhiteSpace();
|
||||
DiscogsParserHelper.EnsureValidResponse(importListResponse,
|
||||
"Discogs API responded with HTML content. List may be too large or API may be unavailable.");
|
||||
return true;
|
||||
}
|
||||
|
||||
private ImportListItemInfo TryFetchRelease(string resourceUrl)
|
||||
private ImportListItemInfo FetchReleaseDetails(string resourceUrl)
|
||||
{
|
||||
if (_httpClient == null || _settings == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return DiscogsParserHelper.FetchReleaseDetails(_httpClient, _settings.Token, resourceUrl);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger?.Error(ex, "Failed to fetch release details from Discogs API for resource URL: {0}. Skipping this item.", resourceUrl);
|
||||
return null;
|
||||
}
|
||||
return DiscogsParserHelper.FetchReleaseDetails(_httpClient, _settings.Token, resourceUrl);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,9 +30,7 @@ public override IImportListRequestGenerator GetRequestGenerator()
|
|||
|
||||
public override IParseImportListResponse GetParser()
|
||||
{
|
||||
var parser = new DiscogsWantlistParser();
|
||||
parser.SetContext(_httpClient, Settings);
|
||||
return parser;
|
||||
return new DiscogsWantlistParser(Settings, _httpClient);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,33 +9,31 @@ namespace NzbDrone.Core.ImportLists.Discogs;
|
|||
|
||||
public class DiscogsWantlistParser : IParseImportListResponse
|
||||
{
|
||||
private IHttpClient _httpClient;
|
||||
private DiscogsWantlistSettings _settings;
|
||||
private readonly DiscogsWantlistSettings _settings;
|
||||
private readonly IHttpClient _httpClient;
|
||||
|
||||
public DiscogsWantlistParser()
|
||||
public DiscogsWantlistParser(DiscogsWantlistSettings settings, IHttpClient httpClient)
|
||||
{
|
||||
}
|
||||
|
||||
public void SetContext(IHttpClient httpClient, DiscogsWantlistSettings settings)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
_settings = settings;
|
||||
_httpClient = httpClient;
|
||||
}
|
||||
|
||||
public IList<ImportListItemInfo> ParseResponse(ImportListResponse importListResponse)
|
||||
{
|
||||
DiscogsParserHelper.EnsureValidResponse(importListResponse,
|
||||
"Discogs API responded with HTML content. Wantlist may be too large or API may be unavailable.");
|
||||
var items = new List<ImportListItemInfo>();
|
||||
|
||||
if (!PreProcess(importListResponse))
|
||||
{
|
||||
return items;
|
||||
}
|
||||
|
||||
var jsonResponse = Json.Deserialize<DiscogsWantlistResponse>(importListResponse.Content);
|
||||
|
||||
if (jsonResponse?.Wants == null)
|
||||
{
|
||||
return new List<ImportListItemInfo>();
|
||||
return items;
|
||||
}
|
||||
|
||||
var items = new List<ImportListItemInfo>();
|
||||
|
||||
foreach (var want in jsonResponse.Wants)
|
||||
{
|
||||
var basicInfo = want?.BasicInformation;
|
||||
|
|
@ -52,7 +50,7 @@ public IList<ImportListItemInfo> ParseResponse(ImportListResponse importListResp
|
|||
continue;
|
||||
}
|
||||
|
||||
items.Add(new ImportListItemInfo
|
||||
items.AddIfNotNull(new ImportListItemInfo
|
||||
{
|
||||
Artist = basicInfo.Artists.First().Name,
|
||||
Album = basicInfo.Title
|
||||
|
|
@ -61,4 +59,11 @@ public IList<ImportListItemInfo> ParseResponse(ImportListResponse importListResp
|
|||
|
||||
return items;
|
||||
}
|
||||
|
||||
private bool PreProcess(ImportListResponse importListResponse)
|
||||
{
|
||||
DiscogsParserHelper.EnsureValidResponse(importListResponse,
|
||||
"Discogs API responded with HTML content. Wantlist may be too large or API may be unavailable.");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue