wip: data sources

data-source-settings
Robert Dailey 2 weeks ago
parent 7bc3aff1ce
commit 253e3ee89f

@ -324,6 +324,11 @@ public class CoreAutofacModule : Module
.RegisterType<ConfigFeatureRemovalBehavior>()
.Keyed<IYamlBehavior>(YamlFileType.Config);
// Settings-Specific Yaml Behaviors
builder
.RegisterType<PolymorphicDataSourceYamlBehavior>()
.Keyed<IYamlBehavior>(YamlFileType.Config);
builder.RegisterType<YamlSerializerFactory>().As<IYamlSerializerFactory>();
builder.RegisterType<DefaultObjectFactory>().As<IObjectFactory>();
}

@ -0,0 +1,27 @@
namespace Recyclarr.Settings.Models;
[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.WithMembers)]
public record DataSourceSettings
{
public IReadOnlyCollection<IUnderlyingDataSource> TrashGuides { get; init; } = [];
public IReadOnlyCollection<IUnderlyingDataSource> ConfigTemplates { get; init; } = [];
public IReadOnlyCollection<IUnderlyingDataSource> CustomFormats { get; init; } = [];
public IReadOnlyCollection<IUnderlyingDataSource> MediaNaming { get; init; } = [];
}
public interface IUnderlyingDataSource;
[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.WithMembers)]
public record GitRepositorySource : IUnderlyingDataSource
{
public string? Name { get; init; }
public Uri? CloneUrl { get; init; }
public string? Reference { get; init; }
}
[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.WithMembers)]
public record LocalPathSource : IUnderlyingDataSource
{
public string Path { get; init; } = "";
public string Service { get; init; } = "";
}

@ -3,7 +3,9 @@ namespace Recyclarr.Settings.Models;
[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.WithMembers)]
public record RecyclarrSettings
{
public Repositories Repositories { get; init; } = new();
// Replaced by DataSources
public Repositories? Repositories { get; init; }
public DataSourceSettings DataSources { get; init; } = new();
public bool EnableSslCertificateValidation { get; init; } = true;
public LogJanitorSettings LogJanitor { get; init; } = new();
public string? GitPath { get; init; }

@ -0,0 +1,23 @@
using Recyclarr.Common.Extensions;
using Recyclarr.Settings.Models;
using Recyclarr.Yaml;
using YamlDotNet.Serialization;
namespace Recyclarr.Settings;
[UsedImplicitly]
public class PolymorphicDataSourceYamlBehavior : IYamlBehavior
{
private static readonly Dictionary<string, Type> Mapping = new()
{
[nameof(GitRepositorySource.CloneUrl).ToSnakeCase()] = typeof(GitRepositorySource),
[nameof(LocalPathSource.Path).ToSnakeCase()] = typeof(LocalPathSource),
};
public void Setup(DeserializerBuilder builder)
{
builder.WithTypeDiscriminatingNodeDeserializer(o =>
o.AddUniqueKeyTypeDiscriminator<IUnderlyingDataSource>(Mapping)
);
}
}
Loading…
Cancel
Save