using System.Collections.Generic; using FluentValidation; using NzbDrone.Core.Annotations; using NzbDrone.Core.Indexers; using NzbDrone.Core.Validation; namespace NzbDrone.Core.Applications.Readarr { public class ReadarrSettingsValidator : AbstractValidator { public ReadarrSettingsValidator() { RuleFor(c => c.BaseUrl).IsValidUrl(); RuleFor(c => c.ProwlarrUrl).IsValidUrl(); RuleFor(c => c.ApiKey).NotEmpty(); RuleFor(c => c.SyncCategories).NotEmpty(); } } public class ReadarrSettings : IApplicationSettings { private static readonly ReadarrSettingsValidator Validator = new(); public ReadarrSettings() { ProwlarrUrl = "http://localhost:9696"; BaseUrl = "http://localhost:8787"; SyncCategories = new[] { 3030, 7000, 7010, 7020, 7030, 7040, 7050, 7060 }; } [FieldDefinition(0, Label = "Prowlarr Server", HelpText = "Prowlarr server URL as Readarr sees it, including http(s)://, port, and urlbase if needed", Placeholder = "http://localhost:9696")] public string ProwlarrUrl { get; set; } [FieldDefinition(1, Label = "Readarr Server", HelpText = "URL used to connect to Readarr server, including http(s)://, port, and urlbase if required", Placeholder = "http://localhost:8787")] public string BaseUrl { get; set; } [FieldDefinition(2, Label = "API Key", Privacy = PrivacyLevel.ApiKey, HelpText = "The ApiKey generated by Readarr in Settings/General")] public string ApiKey { get; set; } [FieldDefinition(3, Label = "Sync Categories", Type = FieldType.Select, SelectOptions = typeof(NewznabCategoryFieldConverter), HelpText = "Only Indexers that support these categories will be synced", Advanced = true)] public IEnumerable SyncCategories { get; set; } [FieldDefinition(4, Type = FieldType.Checkbox, Label = "ApplicationSettingsSyncRejectBlocklistedTorrentHashes", HelpText = "ApplicationSettingsSyncRejectBlocklistedTorrentHashesHelpText", Advanced = true)] public bool SyncRejectBlocklistedTorrentHashesWhileGrabbing { get; set; } public NzbDroneValidationResult Validate() { return new NzbDroneValidationResult(Validator.Validate(this)); } } }