diff --git a/src/Trash.Tests/Config/ServiceConfigurationTest.cs b/src/Trash.Tests/Config/ServiceConfigurationTest.cs index f8a3e804..3f1ee177 100644 --- a/src/Trash.Tests/Config/ServiceConfigurationTest.cs +++ b/src/Trash.Tests/Config/ServiceConfigurationTest.cs @@ -21,11 +21,6 @@ namespace Trash.Tests.Config { public const string ServiceName = "test_service"; - public override string BuildUrl() - { - throw new NotImplementedException(); - } - public override bool IsValid(out string msg) { throw new NotImplementedException(); diff --git a/src/Trash/CompositionRoot.cs b/src/Trash/CompositionRoot.cs index 0002453a..489e8163 100644 --- a/src/Trash/CompositionRoot.cs +++ b/src/Trash/CompositionRoot.cs @@ -63,11 +63,18 @@ namespace Trash private static void RadarrRegistrations(ContainerBuilder builder) { - // Api Services + // Services builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); + builder.Register(c => + { + var config = c.Resolve().ActiveConfiguration; + return new ServerInfo(config.BaseUrl, config.ApiKey); + }) + .As(); + // Quality Definition Support builder.RegisterType(); builder.RegisterType().As(); @@ -78,7 +85,7 @@ namespace Trash builder.RegisterType().As(); // Guide Processor - builder.RegisterType().As(); + builder.RegisterType().As(); // todo: register as singleton to avoid parsing guide multiple times when using 2 or more instances in config builder.RegisterAggregateService(); builder.RegisterType().As(); builder.RegisterType().As(); diff --git a/src/Trash/Config/IServerInfo.cs b/src/Trash/Config/IServerInfo.cs new file mode 100644 index 00000000..530cc77a --- /dev/null +++ b/src/Trash/Config/IServerInfo.cs @@ -0,0 +1,7 @@ +namespace Trash.Config +{ + public interface IServerInfo + { + string BuildUrl(); + } +} diff --git a/src/Trash/Config/IServiceConfiguration.cs b/src/Trash/Config/IServiceConfiguration.cs index 567c5a19..cd9325d4 100644 --- a/src/Trash/Config/IServiceConfiguration.cs +++ b/src/Trash/Config/IServiceConfiguration.cs @@ -4,7 +4,6 @@ namespace Trash.Config { string BaseUrl { get; init; } string ApiKey { get; init; } - string BuildUrl(); bool IsValid(out string msg); } } diff --git a/src/Trash/Config/ServerInfo.cs b/src/Trash/Config/ServerInfo.cs new file mode 100644 index 00000000..d3a92766 --- /dev/null +++ b/src/Trash/Config/ServerInfo.cs @@ -0,0 +1,23 @@ +using Flurl; + +namespace Trash.Config +{ + public class ServerInfo : IServerInfo + { + private readonly string _apiKey; + private readonly string _baseUrl; + + public ServerInfo(string baseUrl, string apiKey) + { + _baseUrl = baseUrl; + _apiKey = apiKey; + } + + public string BuildUrl() + { + return _baseUrl + .AppendPathSegment("api/v3") + .SetQueryParams(new {apikey = _apiKey}); + } + } +} diff --git a/src/Trash/Config/ServiceConfiguration.cs b/src/Trash/Config/ServiceConfiguration.cs index 8f931cb7..5410a7be 100644 --- a/src/Trash/Config/ServiceConfiguration.cs +++ b/src/Trash/Config/ServiceConfiguration.cs @@ -10,7 +10,6 @@ namespace Trash.Config [Required(ErrorMessage = "Property 'api_key' is required")] public string ApiKey { get; init; } = ""; - public abstract string BuildUrl(); public abstract bool IsValid(out string msg); } } diff --git a/src/Trash/Radarr/CustomFormat/Api/CustomFormatService.cs b/src/Trash/Radarr/CustomFormat/Api/CustomFormatService.cs index 831e769d..dc922f60 100644 --- a/src/Trash/Radarr/CustomFormat/Api/CustomFormatService.cs +++ b/src/Trash/Radarr/CustomFormat/Api/CustomFormatService.cs @@ -10,23 +10,25 @@ namespace Trash.Radarr.CustomFormat.Api { internal class CustomFormatService : ICustomFormatService { - private readonly IConfigurationProvider _configProvider; + private readonly IServerInfo _serverInfo; - public CustomFormatService(IConfigurationProvider configProvider) + public CustomFormatService(IServerInfo serverInfo) { - _configProvider = configProvider; + _serverInfo = serverInfo; } + private string BaseUrl => _serverInfo.BuildUrl(); + public async Task> GetCustomFormats() { - return await BaseUrl() + return await BaseUrl .AppendPathSegment("customformat") .GetJsonAsync>(); } public async Task CreateCustomFormat(ProcessedCustomFormatData cf) { - var response = await BaseUrl() + var response = await BaseUrl .AppendPathSegment("customformat") .PostJsonAsync(cf.Json) .ReceiveJson(); @@ -36,7 +38,7 @@ namespace Trash.Radarr.CustomFormat.Api public async Task UpdateCustomFormat(ProcessedCustomFormatData cf) { - await BaseUrl() + await BaseUrl .AppendPathSegment($"customformat/{cf.GetCustomFormatId()}") .PutJsonAsync(cf.Json) .ReceiveJson(); @@ -44,14 +46,9 @@ namespace Trash.Radarr.CustomFormat.Api public async Task DeleteCustomFormat(int customFormatId) { - await BaseUrl() + await BaseUrl .AppendPathSegment($"customformat/{customFormatId}") .DeleteAsync(); } - - private string BaseUrl() - { - return _configProvider.ActiveConfiguration.BuildUrl(); - } } } diff --git a/src/Trash/Radarr/CustomFormat/Api/QualityProfileService.cs b/src/Trash/Radarr/CustomFormat/Api/QualityProfileService.cs index f7fccf54..1fa23737 100644 --- a/src/Trash/Radarr/CustomFormat/Api/QualityProfileService.cs +++ b/src/Trash/Radarr/CustomFormat/Api/QualityProfileService.cs @@ -9,14 +9,14 @@ namespace Trash.Radarr.CustomFormat.Api { internal class QualityProfileService : IQualityProfileService { - private readonly IConfigurationProvider _configProvider; + private readonly IServerInfo _serverInfo; - public QualityProfileService(IConfigurationProvider configProvider) + public QualityProfileService(IServerInfo serverInfo) { - _configProvider = configProvider; + _serverInfo = serverInfo; } - private string BaseUrl => _configProvider.ActiveConfiguration.BuildUrl(); + private string BaseUrl => _serverInfo.BuildUrl(); public async Task> GetQualityProfiles() { diff --git a/src/Trash/Radarr/QualityDefinition/Api/QualityDefinitionService.cs b/src/Trash/Radarr/QualityDefinition/Api/QualityDefinitionService.cs index bd0730b6..59e9edef 100644 --- a/src/Trash/Radarr/QualityDefinition/Api/QualityDefinitionService.cs +++ b/src/Trash/Radarr/QualityDefinition/Api/QualityDefinitionService.cs @@ -9,14 +9,14 @@ namespace Trash.Radarr.QualityDefinition.Api { public class QualityDefinitionService : IQualityDefinitionService { - private readonly IConfigurationProvider _configProvider; + private readonly IServerInfo _serverInfo; - public QualityDefinitionService(IConfigurationProvider configProvider) + public QualityDefinitionService(IServerInfo serverInfo) { - _configProvider = configProvider; + _serverInfo = serverInfo; } - private string BaseUrl => _configProvider.ActiveConfiguration.BuildUrl(); + private string BaseUrl => _serverInfo.BuildUrl(); public async Task> GetQualityDefinition() { diff --git a/src/Trash/Radarr/RadarrCommand.cs b/src/Trash/Radarr/RadarrCommand.cs index 4a7cbbfe..3c984279 100644 --- a/src/Trash/Radarr/RadarrCommand.cs +++ b/src/Trash/Radarr/RadarrCommand.cs @@ -18,7 +18,7 @@ namespace Trash.Radarr public class RadarrCommand : ServiceCommand, IRadarrCommand { private readonly IConfigurationLoader _configLoader; - private readonly Lazy _customFormatUpdater; + private readonly Func _customFormatUpdaterFactory; private readonly Func _qualityUpdaterFactory; public RadarrCommand( @@ -27,12 +27,12 @@ namespace Trash.Radarr ILogJanitor logJanitor, IConfigurationLoader configLoader, Func qualityUpdaterFactory, - Lazy customFormatUpdater) + Func customFormatUpdaterFactory) : base(logger, loggingLevelSwitch, logJanitor) { _configLoader = configLoader; _qualityUpdaterFactory = qualityUpdaterFactory; - _customFormatUpdater = customFormatUpdater; + _customFormatUpdaterFactory = customFormatUpdaterFactory; } public override string CacheStoragePath { get; } = @@ -51,7 +51,7 @@ namespace Trash.Radarr if (config.CustomFormats.Count > 0) { - await _customFormatUpdater.Value.Process(this, config); + await _customFormatUpdaterFactory().Process(this, config); } } } diff --git a/src/Trash/Radarr/RadarrConfiguration.cs b/src/Trash/Radarr/RadarrConfiguration.cs index 75958c76..5a9930e2 100644 --- a/src/Trash/Radarr/RadarrConfiguration.cs +++ b/src/Trash/Radarr/RadarrConfiguration.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; -using Flurl; using JetBrains.Annotations; using Trash.Config; using Trash.Radarr.QualityDefinition; @@ -15,13 +14,6 @@ namespace Trash.Radarr public List CustomFormats { get; init; } = new(); public bool DeleteOldCustomFormats { get; init; } - public override string BuildUrl() - { - return BaseUrl - .AppendPathSegment("api/v3") - .SetQueryParams(new {apikey = ApiKey}); - } - public override bool IsValid(out string msg) { if (CustomFormats.Any(cf => cf.TrashIds.Count + cf.Names.Count == 0)) diff --git a/src/Trash/Sonarr/Api/SonarrApi.cs b/src/Trash/Sonarr/Api/SonarrApi.cs index 9d2f9187..8d10b542 100644 --- a/src/Trash/Sonarr/Api/SonarrApi.cs +++ b/src/Trash/Sonarr/Api/SonarrApi.cs @@ -10,11 +10,11 @@ namespace Trash.Sonarr.Api { public class SonarrApi : ISonarrApi { - private readonly IConfigurationProvider _configProvider; + private readonly IServerInfo _serverInfo; - public SonarrApi(IConfigurationProvider configProvider) + public SonarrApi(IServerInfo serverInfo) { - _configProvider = configProvider; + _serverInfo = serverInfo; } public async Task GetVersion() @@ -78,6 +78,6 @@ namespace Trash.Sonarr.Api .ReceiveJson>(); } - private string BaseUrl() => _configProvider.ActiveConfiguration.BuildUrl(); + private string BaseUrl() => _serverInfo.BuildUrl(); } } diff --git a/src/Trash/Sonarr/SonarrConfiguration.cs b/src/Trash/Sonarr/SonarrConfiguration.cs index 3277e824..fac28286 100644 --- a/src/Trash/Sonarr/SonarrConfiguration.cs +++ b/src/Trash/Sonarr/SonarrConfiguration.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using Flurl; using JetBrains.Annotations; using Trash.Config; using Trash.Sonarr.QualityDefinition; @@ -14,13 +13,6 @@ namespace Trash.Sonarr public IList ReleaseProfiles { get; set; } = new List(); public SonarrQualityDefinitionType? QualityDefinition { get; init; } - public override string BuildUrl() - { - return BaseUrl - .AppendPathSegment("api/v3") - .SetQueryParams(new {apikey = ApiKey}); - } - public override bool IsValid(out string msg) { msg = "";