diff --git a/frontend/src/Settings/General/HostSettings.js b/frontend/src/Settings/General/HostSettings.js index 29b3815e6..b864faad3 100644 --- a/frontend/src/Settings/General/HostSettings.js +++ b/frontend/src/Settings/General/HostSettings.js @@ -20,6 +20,7 @@ function HostSettings(props) { bindAddress, port, urlBase, + instanceName, enableSsl, sslPort, sslCertPath, @@ -73,6 +74,22 @@ function HostSettings(props) { /> + + {translate('InstanceName')} + + + + , string SslCertPassword { get; } string UrlBase { get; } string UiFolder { get; } + string InstanceName { get; } bool UpdateAutomatically { get; } UpdateMechanism UpdateMechanism { get; } string UpdateScriptPath { get; } string SyslogServer { get; } int SyslogPort { get; } + string SyslogLevel { get; } string PostgresHost { get; } int PostgresPort { get; } string PostgresUser { get; } @@ -223,6 +225,7 @@ public string UrlBase } public string UiFolder => BuildInfo.IsDebug ? Path.Combine("..", "UI") : "UI"; + public string InstanceName => GetValue("InstanceName", BuildInfo.AppName); public bool UpdateAutomatically => GetValueBoolean("UpdateAutomatically", false, false); @@ -231,8 +234,11 @@ public string UrlBase public string UpdateScriptPath => GetValue("UpdateScriptPath", "", false); public string SyslogServer => GetValue("SyslogServer", "", persist: false); + public int SyslogPort => GetValueInt("SyslogPort", 514, persist: false); + public string SyslogLevel => GetValue("SyslogLevel", LogLevel).ToLowerInvariant(); + public int GetValueInt(string key, int defaultValue, bool persist = true) { return Convert.ToInt32(GetValue(key, defaultValue, persist)); diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 72714b59c..fa7aa182b 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -441,6 +441,8 @@ "IndexerTagHelpText": "Only use this indexer for movies with at least one matching tag. Leave blank to use with all movies.", "Info": "Info", "InstallLatest": "Install Latest", + "InstanceName": "Instance Name", + "InstanceNameHelpText": "Instance name in tab and for Syslog app name", "InteractiveImport": "Interactive Import", "InteractiveImportErrLanguage": "Language must be chosen for each selected file", "InteractiveImportErrMovie": "Movie must be chosen for each selected file", diff --git a/src/NzbDrone.Core/Validation/RuleBuilderExtensions.cs b/src/NzbDrone.Core/Validation/RuleBuilderExtensions.cs index bc6c5e19e..794dfa076 100644 --- a/src/NzbDrone.Core/Validation/RuleBuilderExtensions.cs +++ b/src/NzbDrone.Core/Validation/RuleBuilderExtensions.cs @@ -61,5 +61,11 @@ public static IRuleBuilderOptions AsWarning(this IRuleBuilde { return ruleBuilder.WithState(v => NzbDroneValidationState.Warning); } + + public static IRuleBuilderOptions ContainsRadarr(this IRuleBuilder ruleBuilder) + { + ruleBuilder.SetValidator(new NotEmptyValidator(null)); + return ruleBuilder.SetValidator(new RegularExpressionValidator("radarr", RegexOptions.IgnoreCase)).WithMessage("Must contain Radarr"); + } } } diff --git a/src/Radarr.Api.V3/Config/HostConfigController.cs b/src/Radarr.Api.V3/Config/HostConfigController.cs index 21d381820..7d172d18a 100644 --- a/src/Radarr.Api.V3/Config/HostConfigController.cs +++ b/src/Radarr.Api.V3/Config/HostConfigController.cs @@ -40,6 +40,7 @@ public HostConfigController(IConfigFileProvider configFileProvider, SharedValidator.RuleFor(c => c.Port).ValidPort(); SharedValidator.RuleFor(c => c.UrlBase).ValidUrlBase(); + SharedValidator.RuleFor(c => c.InstanceName).ContainsRadarr().When(c => c.InstanceName.IsNotNullOrWhiteSpace()); SharedValidator.RuleFor(c => c.Username).NotEmpty().When(c => c.AuthenticationMethod != AuthenticationType.None); SharedValidator.RuleFor(c => c.Password).NotEmpty().When(c => c.AuthenticationMethod != AuthenticationType.None); diff --git a/src/Radarr.Api.V3/Config/HostConfigResource.cs b/src/Radarr.Api.V3/Config/HostConfigResource.cs index 0dbe541bb..836eaf25d 100644 --- a/src/Radarr.Api.V3/Config/HostConfigResource.cs +++ b/src/Radarr.Api.V3/Config/HostConfigResource.cs @@ -25,6 +25,7 @@ public class HostConfigResource : RestResource public string SslCertPath { get; set; } public string SslCertPassword { get; set; } public string UrlBase { get; set; } + public string InstanceName { get; set; } public bool UpdateAutomatically { get; set; } public UpdateMechanism UpdateMechanism { get; set; } public string UpdateScriptPath { get; set; } @@ -66,6 +67,7 @@ public static HostConfigResource ToResource(this IConfigFileProvider model, ICon SslCertPath = model.SslCertPath, SslCertPassword = model.SslCertPassword, UrlBase = model.UrlBase, + InstanceName = model.InstanceName, UpdateAutomatically = model.UpdateAutomatically, UpdateMechanism = model.UpdateMechanism, UpdateScriptPath = model.UpdateScriptPath,