diff --git a/src/Recyclarr.Cli/Console/Setup/JanitorCleanupTask.cs b/src/Recyclarr.Cli/Console/Setup/JanitorCleanupTask.cs index b640ae51..6f9be304 100644 --- a/src/Recyclarr.Cli/Console/Setup/JanitorCleanupTask.cs +++ b/src/Recyclarr.Cli/Console/Setup/JanitorCleanupTask.cs @@ -1,6 +1,7 @@ using Recyclarr.Cli.Console.Commands; using Recyclarr.Cli.Logging; using Recyclarr.Settings; +using Recyclarr.Settings.Models; namespace Recyclarr.Cli.Console.Setup; diff --git a/src/Recyclarr.Core/CoreAutofacModule.cs b/src/Recyclarr.Core/CoreAutofacModule.cs index 923a6357..a38bbd2b 100644 --- a/src/Recyclarr.Core/CoreAutofacModule.cs +++ b/src/Recyclarr.Core/CoreAutofacModule.cs @@ -30,6 +30,7 @@ using Recyclarr.ServarrApi.QualityDefinition; using Recyclarr.ServarrApi.QualityProfile; using Recyclarr.ServarrApi.System; using Recyclarr.Settings; +using Recyclarr.Settings.Models; using Recyclarr.TrashGuide; using Recyclarr.TrashGuide.CustomFormat; using Recyclarr.TrashGuide.MediaNaming; diff --git a/src/Recyclarr.Core/Notifications/Apprise/AppriseRequestBuilder.cs b/src/Recyclarr.Core/Notifications/Apprise/AppriseRequestBuilder.cs index f5922938..4692828d 100644 --- a/src/Recyclarr.Core/Notifications/Apprise/AppriseRequestBuilder.cs +++ b/src/Recyclarr.Core/Notifications/Apprise/AppriseRequestBuilder.cs @@ -4,6 +4,7 @@ using Flurl.Http; using Flurl.Http.Configuration; using Recyclarr.Http; using Recyclarr.Settings; +using Recyclarr.Settings.Models; namespace Recyclarr.Notifications.Apprise; diff --git a/src/Recyclarr.Core/Notifications/Apprise/AppriseStatefulNotificationApiService.cs b/src/Recyclarr.Core/Notifications/Apprise/AppriseStatefulNotificationApiService.cs index ee3ff9f9..d57a7cd1 100644 --- a/src/Recyclarr.Core/Notifications/Apprise/AppriseStatefulNotificationApiService.cs +++ b/src/Recyclarr.Core/Notifications/Apprise/AppriseStatefulNotificationApiService.cs @@ -1,6 +1,6 @@ using Flurl.Http; using Recyclarr.Notifications.Apprise.Dto; -using Recyclarr.Settings; +using Recyclarr.Settings.Models; namespace Recyclarr.Notifications.Apprise; diff --git a/src/Recyclarr.Core/Notifications/Apprise/AppriseStatelessNotificationApiService.cs b/src/Recyclarr.Core/Notifications/Apprise/AppriseStatelessNotificationApiService.cs index 31f1e967..8374fed7 100644 --- a/src/Recyclarr.Core/Notifications/Apprise/AppriseStatelessNotificationApiService.cs +++ b/src/Recyclarr.Core/Notifications/Apprise/AppriseStatelessNotificationApiService.cs @@ -1,6 +1,6 @@ using Flurl.Http; using Recyclarr.Notifications.Apprise.Dto; -using Recyclarr.Settings; +using Recyclarr.Settings.Models; namespace Recyclarr.Notifications.Apprise; diff --git a/src/Recyclarr.Core/Notifications/Apprise/IAppriseNotificationApiService.cs b/src/Recyclarr.Core/Notifications/Apprise/IAppriseNotificationApiService.cs index 207318b9..4a6ed9c3 100644 --- a/src/Recyclarr.Core/Notifications/Apprise/IAppriseNotificationApiService.cs +++ b/src/Recyclarr.Core/Notifications/Apprise/IAppriseNotificationApiService.cs @@ -1,5 +1,5 @@ using Recyclarr.Notifications.Apprise.Dto; -using Recyclarr.Settings; +using Recyclarr.Settings.Models; namespace Recyclarr.Notifications.Apprise; diff --git a/src/Recyclarr.Core/Notifications/NotificationLogSinkConfigurator.cs b/src/Recyclarr.Core/Notifications/NotificationLogSinkConfigurator.cs index 44349760..db9fb03b 100644 --- a/src/Recyclarr.Core/Notifications/NotificationLogSinkConfigurator.cs +++ b/src/Recyclarr.Core/Notifications/NotificationLogSinkConfigurator.cs @@ -1,5 +1,6 @@ using Recyclarr.Logging; using Recyclarr.Settings; +using Recyclarr.Settings.Models; using Serilog.Events; using Serilog.Templates; diff --git a/src/Recyclarr.Core/Notifications/NotificationService.cs b/src/Recyclarr.Core/Notifications/NotificationService.cs index 0f6fb90d..2dfbcc4e 100644 --- a/src/Recyclarr.Core/Notifications/NotificationService.cs +++ b/src/Recyclarr.Core/Notifications/NotificationService.cs @@ -8,6 +8,7 @@ using Recyclarr.Notifications.Apprise; using Recyclarr.Notifications.Apprise.Dto; using Recyclarr.Notifications.Events; using Recyclarr.Settings; +using Recyclarr.Settings.Models; namespace Recyclarr.Notifications; diff --git a/src/Recyclarr.Core/Repo/ConfigTemplatesRepo.cs b/src/Recyclarr.Core/Repo/ConfigTemplatesRepo.cs index c352a18d..8b7e1f40 100644 --- a/src/Recyclarr.Core/Repo/ConfigTemplatesRepo.cs +++ b/src/Recyclarr.Core/Repo/ConfigTemplatesRepo.cs @@ -2,6 +2,7 @@ using System.IO.Abstractions; using Recyclarr.Logging; using Recyclarr.Platform; using Recyclarr.Settings; +using Recyclarr.Settings.Models; using Serilog.Context; namespace Recyclarr.Repo; diff --git a/src/Recyclarr.Core/Repo/GitPath.cs b/src/Recyclarr.Core/Repo/GitPath.cs index a67037a4..140143c4 100644 --- a/src/Recyclarr.Core/Repo/GitPath.cs +++ b/src/Recyclarr.Core/Repo/GitPath.cs @@ -1,4 +1,5 @@ using Recyclarr.Settings; +using Recyclarr.Settings.Models; using Recyclarr.VersionControl; namespace Recyclarr.Repo; diff --git a/src/Recyclarr.Core/Repo/TrashGuidesRepo.cs b/src/Recyclarr.Core/Repo/TrashGuidesRepo.cs index ca0bc929..c56e8704 100644 --- a/src/Recyclarr.Core/Repo/TrashGuidesRepo.cs +++ b/src/Recyclarr.Core/Repo/TrashGuidesRepo.cs @@ -2,6 +2,7 @@ using System.IO.Abstractions; using Recyclarr.Logging; using Recyclarr.Platform; using Recyclarr.Settings; +using Recyclarr.Settings.Models; using Serilog.Context; namespace Recyclarr.Repo; diff --git a/src/Recyclarr.Core/ServarrApi/ServarrRequestBuilder.cs b/src/Recyclarr.Core/ServarrApi/ServarrRequestBuilder.cs index 899ac1dd..5583d1c3 100644 --- a/src/Recyclarr.Core/ServarrApi/ServarrRequestBuilder.cs +++ b/src/Recyclarr.Core/ServarrApi/ServarrRequestBuilder.cs @@ -6,6 +6,7 @@ using Recyclarr.Config.Models; using Recyclarr.Http; using Recyclarr.Json; using Recyclarr.Settings; +using Recyclarr.Settings.Models; namespace Recyclarr.ServarrApi; diff --git a/src/Recyclarr.Core/Settings/Models/AppriseNotificationSettings.cs b/src/Recyclarr.Core/Settings/Models/AppriseNotificationSettings.cs new file mode 100644 index 00000000..f83e6e23 --- /dev/null +++ b/src/Recyclarr.Core/Settings/Models/AppriseNotificationSettings.cs @@ -0,0 +1,35 @@ +using System.Collections.ObjectModel; + +namespace Recyclarr.Settings.Models; + +[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.WithMembers)] +public record AppriseNotificationSettings +{ + public AppriseMode? Mode { get; init; } + public Uri BaseUrl { get; init; } = new("about:empty"); + public string Key { get; init; } = ""; + public string Tags { get; init; } = ""; + public Collection Urls { get; init; } = []; +} + +[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.WithMembers)] +public record NotificationSettings +{ + public NotificationVerbosity Verbosity { get; init; } = NotificationVerbosity.Normal; + public AppriseNotificationSettings? Apprise { get; init; } + + public bool IsConfigured() => Apprise is not null; +} + +public enum NotificationVerbosity +{ + Minimal, + Normal, + Detailed, +} + +public enum AppriseMode +{ + Stateful, + Stateless, +} diff --git a/src/Recyclarr.Core/Settings/Models/LogJanitorSettings.cs b/src/Recyclarr.Core/Settings/Models/LogJanitorSettings.cs new file mode 100644 index 00000000..f321b73e --- /dev/null +++ b/src/Recyclarr.Core/Settings/Models/LogJanitorSettings.cs @@ -0,0 +1,7 @@ +namespace Recyclarr.Settings.Models; + +[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.WithMembers)] +public record LogJanitorSettings +{ + public int MaxFiles { get; init; } = 20; +} diff --git a/src/Recyclarr.Core/Settings/Models/RecyclarrSettings.cs b/src/Recyclarr.Core/Settings/Models/RecyclarrSettings.cs new file mode 100644 index 00000000..e4875a95 --- /dev/null +++ b/src/Recyclarr.Core/Settings/Models/RecyclarrSettings.cs @@ -0,0 +1,11 @@ +namespace Recyclarr.Settings.Models; + +[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.WithMembers)] +public record RecyclarrSettings +{ + public Repositories Repositories { get; init; } = new(); + public bool EnableSslCertificateValidation { get; init; } = true; + public LogJanitorSettings LogJanitor { get; init; } = new(); + public string? GitPath { get; init; } + public NotificationSettings Notifications { get; init; } = new(); +} diff --git a/src/Recyclarr.Core/Settings/Models/Repositories.cs b/src/Recyclarr.Core/Settings/Models/Repositories.cs new file mode 100644 index 00000000..60dd0dce --- /dev/null +++ b/src/Recyclarr.Core/Settings/Models/Repositories.cs @@ -0,0 +1,24 @@ +namespace Recyclarr.Settings.Models; + +[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.WithMembers)] +public record Repositories +{ + public TrashRepository TrashGuides { get; init; } = new(); + public ConfigTemplateRepository ConfigTemplates { get; init; } = new(); +} + +[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.WithMembers)] +public record TrashRepository : IRepositorySettings +{ + public Uri CloneUrl { get; init; } = new("https://github.com/TRaSH-Guides/Guides.git"); + public string Branch { get; init; } = "master"; + public string? Sha1 { get; init; } +} + +[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.WithMembers)] +public record ConfigTemplateRepository : IRepositorySettings +{ + public Uri CloneUrl { get; init; } = new("https://github.com/recyclarr/config-templates.git"); + public string Branch { get; init; } = "master"; + public string? Sha1 { get; init; } +} diff --git a/src/Recyclarr.Core/Settings/RecyclarrSettings.cs b/src/Recyclarr.Core/Settings/RecyclarrSettings.cs deleted file mode 100644 index 33c2078d..00000000 --- a/src/Recyclarr.Core/Settings/RecyclarrSettings.cs +++ /dev/null @@ -1,172 +0,0 @@ -using System.Collections.ObjectModel; - -namespace Recyclarr.Settings; - -public record TrashRepository : IRepositorySettings -{ - public Uri CloneUrl - { - get; - [UsedImplicitly] - init; - } = new("https://github.com/TRaSH-Guides/Guides.git"); - public string Branch - { - get; - [UsedImplicitly] - init; - } = "master"; - public string? Sha1 - { - get; - [UsedImplicitly] - init; - } -} - -public record ConfigTemplateRepository : IRepositorySettings -{ - public Uri CloneUrl - { - get; - [UsedImplicitly] - init; - } = new("https://github.com/recyclarr/config-templates.git"); - public string Branch - { - get; - [UsedImplicitly] - init; - } = "master"; - public string? Sha1 - { - get; - [UsedImplicitly] - init; - } -} - -public record LogJanitorSettings -{ - public int MaxFiles - { - get; - [UsedImplicitly] - init; - } = 20; -} - -public record Repositories -{ - public TrashRepository TrashGuides - { - get; - [UsedImplicitly] - init; - } = new(); - public ConfigTemplateRepository ConfigTemplates - { - get; - [UsedImplicitly] - init; - } = new(); -} - -public record RecyclarrSettings -{ - public Repositories Repositories - { - get; - [UsedImplicitly] - init; - } = new(); - public bool EnableSslCertificateValidation - { - get; - [UsedImplicitly] - init; - } = true; - public LogJanitorSettings LogJanitor - { - get; - [UsedImplicitly] - init; - } = new(); - public string? GitPath - { - get; - [UsedImplicitly] - init; - } - public NotificationSettings Notifications - { - get; - [UsedImplicitly] - init; - } = new(); -} - -public record NotificationSettings -{ - public NotificationVerbosity Verbosity - { - get; - [UsedImplicitly] - init; - } = NotificationVerbosity.Normal; - public AppriseNotificationSettings? Apprise - { - get; - [UsedImplicitly] - init; - } - - public bool IsConfigured() => Apprise is not null; -} - -public enum NotificationVerbosity -{ - Minimal, - Normal, - Detailed, -} - -public record AppriseNotificationSettings -{ - public AppriseMode? Mode - { - get; - [UsedImplicitly] - init; - } - public Uri BaseUrl - { - get; - [UsedImplicitly] - init; - } = new("about:empty"); - public string Key - { - get; - [UsedImplicitly] - init; - } = ""; - public string Tags - { - get; - [UsedImplicitly] - init; - } = ""; - public Collection Urls - { - get; - [UsedImplicitly] - init; - } = []; -} - -public enum AppriseMode -{ - Stateful, - Stateless, -} diff --git a/src/Recyclarr.Core/Settings/RecyclarrSettingsValidator.cs b/src/Recyclarr.Core/Settings/RecyclarrSettingsValidator.cs index e157f5a5..b25fa4cc 100644 --- a/src/Recyclarr.Core/Settings/RecyclarrSettingsValidator.cs +++ b/src/Recyclarr.Core/Settings/RecyclarrSettingsValidator.cs @@ -1,5 +1,6 @@ using FluentValidation; using Recyclarr.Common.FluentValidation; +using Recyclarr.Settings.Models; namespace Recyclarr.Settings; diff --git a/src/Recyclarr.Core/Settings/SettingsContextualMessages.cs b/src/Recyclarr.Core/Settings/SettingsContextualMessages.cs index f1b96587..8f459c4c 100644 --- a/src/Recyclarr.Core/Settings/SettingsContextualMessages.cs +++ b/src/Recyclarr.Core/Settings/SettingsContextualMessages.cs @@ -1,3 +1,4 @@ +using Recyclarr.Settings.Models; using YamlDotNet.Core; namespace Recyclarr.Settings; diff --git a/src/Recyclarr.Core/Settings/SettingsExtensions.cs b/src/Recyclarr.Core/Settings/SettingsExtensions.cs index 4114d941..15592005 100644 --- a/src/Recyclarr.Core/Settings/SettingsExtensions.cs +++ b/src/Recyclarr.Core/Settings/SettingsExtensions.cs @@ -1,4 +1,5 @@ using Autofac; +using Recyclarr.Settings.Models; namespace Recyclarr.Settings; diff --git a/src/Recyclarr.Core/Settings/SettingsLoader.cs b/src/Recyclarr.Core/Settings/SettingsLoader.cs index e8174ad5..6f887d41 100644 --- a/src/Recyclarr.Core/Settings/SettingsLoader.cs +++ b/src/Recyclarr.Core/Settings/SettingsLoader.cs @@ -3,6 +3,7 @@ using FluentValidation; using Recyclarr.Common.Extensions; using Recyclarr.Common.FluentValidation; using Recyclarr.Platform; +using Recyclarr.Settings.Models; using Recyclarr.Yaml; using YamlDotNet.Core; diff --git a/src/Recyclarr.Core/Settings/SettingsProvider.cs b/src/Recyclarr.Core/Settings/SettingsProvider.cs index fd5fff79..f9d23e9b 100644 --- a/src/Recyclarr.Core/Settings/SettingsProvider.cs +++ b/src/Recyclarr.Core/Settings/SettingsProvider.cs @@ -1,3 +1,5 @@ +using Recyclarr.Settings.Models; + namespace Recyclarr.Settings; internal class SettingsProvider(SettingsLoader loader) diff --git a/tests/Recyclarr.Cli.Tests/IntegrationTests/BaseCommandSetupIntegrationTest.cs b/tests/Recyclarr.Cli.Tests/IntegrationTests/BaseCommandSetupIntegrationTest.cs index d6ad59c3..89967789 100644 --- a/tests/Recyclarr.Cli.Tests/IntegrationTests/BaseCommandSetupIntegrationTest.cs +++ b/tests/Recyclarr.Cli.Tests/IntegrationTests/BaseCommandSetupIntegrationTest.cs @@ -2,6 +2,7 @@ using System.IO.Abstractions; using Recyclarr.Cli.Console.Setup; using Recyclarr.Cli.Tests.Reusable; using Recyclarr.Settings; +using Recyclarr.Settings.Models; namespace Recyclarr.Cli.Tests.IntegrationTests; diff --git a/tests/Recyclarr.Cli.Tests/IntegrationTests/ServiceCompatibilityIntegrationTest.cs b/tests/Recyclarr.Cli.Tests/IntegrationTests/ServiceCompatibilityIntegrationTest.cs index 7889ff00..b4027ce3 100644 --- a/tests/Recyclarr.Cli.Tests/IntegrationTests/ServiceCompatibilityIntegrationTest.cs +++ b/tests/Recyclarr.Cli.Tests/IntegrationTests/ServiceCompatibilityIntegrationTest.cs @@ -1,6 +1,7 @@ using System.IO.Abstractions; using Recyclarr.Cli.Tests.Reusable; using Recyclarr.Settings; +using Recyclarr.Settings.Models; namespace Recyclarr.Cli.Tests.IntegrationTests; diff --git a/tests/Recyclarr.Core.Tests/Config/Settings/SettingsLoaderTest.cs b/tests/Recyclarr.Core.Tests/Config/Settings/SettingsLoaderTest.cs index 28fe221b..bcaf37b5 100644 --- a/tests/Recyclarr.Core.Tests/Config/Settings/SettingsLoaderTest.cs +++ b/tests/Recyclarr.Core.Tests/Config/Settings/SettingsLoaderTest.cs @@ -1,6 +1,7 @@ using System.IO.Abstractions; using Recyclarr.Platform; using Recyclarr.Settings; +using Recyclarr.Settings.Models; using Recyclarr.Yaml; namespace Recyclarr.Core.Tests.Config.Settings; diff --git a/tests/Recyclarr.Core.Tests/VersionControl/GitPathTest.cs b/tests/Recyclarr.Core.Tests/VersionControl/GitPathTest.cs index 852572e4..63dfba0c 100644 --- a/tests/Recyclarr.Core.Tests/VersionControl/GitPathTest.cs +++ b/tests/Recyclarr.Core.Tests/VersionControl/GitPathTest.cs @@ -1,5 +1,6 @@ using Recyclarr.Repo; using Recyclarr.Settings; +using Recyclarr.Settings.Models; namespace Recyclarr.Core.Tests.VersionControl;