mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-17 17:14:18 +02:00
New: Advanced settings for Application category control
This commit is contained in:
@@ -53,7 +53,8 @@ function getSelectValues(selectOptions) {
|
|||||||
result.push({
|
result.push({
|
||||||
key: option.value,
|
key: option.value,
|
||||||
value: option.name,
|
value: option.name,
|
||||||
hint: option.hint
|
hint: option.hint,
|
||||||
|
parentKey: option.parentValue
|
||||||
});
|
});
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@@ -6,5 +6,6 @@ namespace NzbDrone.Core.Annotations
|
|||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public int Order { get; set; }
|
public int Order { get; set; }
|
||||||
public string Hint { get; set; }
|
public string Hint { get; set; }
|
||||||
|
public int? ParentValue { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
|
using NzbDrone.Core.Indexers;
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Applications.Lidarr
|
namespace NzbDrone.Core.Applications.Lidarr
|
||||||
@@ -26,8 +27,6 @@ namespace NzbDrone.Core.Applications.Lidarr
|
|||||||
SyncCategories = new[] { 3000, 3010, 3030, 3040, 3050, 3060 };
|
SyncCategories = new[] { 3000, 3010, 3030, 3040, 3050, 3060 };
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<int> SyncCategories { get; set; }
|
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Prowlarr Server", HelpText = "Prowlarr server URL as Lidarr sees it, including http(s)://, port, and urlbase if needed")]
|
[FieldDefinition(0, Label = "Prowlarr Server", HelpText = "Prowlarr server URL as Lidarr sees it, including http(s)://, port, and urlbase if needed")]
|
||||||
public string ProwlarrUrl { get; set; }
|
public string ProwlarrUrl { get; set; }
|
||||||
|
|
||||||
@@ -37,6 +36,9 @@ namespace NzbDrone.Core.Applications.Lidarr
|
|||||||
[FieldDefinition(2, Label = "ApiKey", Privacy = PrivacyLevel.ApiKey, HelpText = "The ApiKey generated by Lidarr in Settings/General")]
|
[FieldDefinition(2, Label = "ApiKey", Privacy = PrivacyLevel.ApiKey, HelpText = "The ApiKey generated by Lidarr in Settings/General")]
|
||||||
public string ApiKey { get; set; }
|
public string ApiKey { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(3, Label = "Sync Categories", Type = FieldType.Select, SelectOptions = typeof(NewznabCategoryFieldConverter), Advanced = true, HelpText = "Only Indexers that support these categories will be synced")]
|
||||||
|
public IEnumerable<int> SyncCategories { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
@@ -13,6 +13,7 @@ namespace NzbDrone.Core.Applications.Mylar
|
|||||||
RuleFor(c => c.BaseUrl).IsValidUrl();
|
RuleFor(c => c.BaseUrl).IsValidUrl();
|
||||||
RuleFor(c => c.ProwlarrUrl).IsValidUrl();
|
RuleFor(c => c.ProwlarrUrl).IsValidUrl();
|
||||||
RuleFor(c => c.ApiKey).NotEmpty();
|
RuleFor(c => c.ApiKey).NotEmpty();
|
||||||
|
RuleFor(c => c.SyncCategories).NotEmpty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,8 +28,6 @@ namespace NzbDrone.Core.Applications.Mylar
|
|||||||
SyncCategories = new[] { NewznabStandardCategory.BooksComics.Id };
|
SyncCategories = new[] { NewznabStandardCategory.BooksComics.Id };
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<int> SyncCategories { get; set; }
|
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Prowlarr Server", HelpText = "Prowlarr server URL as Mylar sees it, including http(s)://, port, and urlbase if needed")]
|
[FieldDefinition(0, Label = "Prowlarr Server", HelpText = "Prowlarr server URL as Mylar sees it, including http(s)://, port, and urlbase if needed")]
|
||||||
public string ProwlarrUrl { get; set; }
|
public string ProwlarrUrl { get; set; }
|
||||||
|
|
||||||
@@ -38,6 +37,9 @@ namespace NzbDrone.Core.Applications.Mylar
|
|||||||
[FieldDefinition(2, Label = "ApiKey", Privacy = PrivacyLevel.ApiKey, HelpText = "The ApiKey generated by Mylar in Settings/Web Interface")]
|
[FieldDefinition(2, Label = "ApiKey", Privacy = PrivacyLevel.ApiKey, HelpText = "The ApiKey generated by Mylar in Settings/Web Interface")]
|
||||||
public string ApiKey { get; set; }
|
public string ApiKey { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(3, Label = "Sync Categories", Type = FieldType.Select, SelectOptions = typeof(NewznabCategoryFieldConverter), Advanced = true, HelpText = "Only Indexers that support these categories will be synced")]
|
||||||
|
public IEnumerable<int> SyncCategories { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
|
using NzbDrone.Core.Indexers;
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Applications.Radarr
|
namespace NzbDrone.Core.Applications.Radarr
|
||||||
@@ -12,6 +13,7 @@ namespace NzbDrone.Core.Applications.Radarr
|
|||||||
RuleFor(c => c.BaseUrl).IsValidUrl();
|
RuleFor(c => c.BaseUrl).IsValidUrl();
|
||||||
RuleFor(c => c.ProwlarrUrl).IsValidUrl();
|
RuleFor(c => c.ProwlarrUrl).IsValidUrl();
|
||||||
RuleFor(c => c.ApiKey).NotEmpty();
|
RuleFor(c => c.ApiKey).NotEmpty();
|
||||||
|
RuleFor(c => c.SyncCategories).NotEmpty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,8 +28,6 @@ namespace NzbDrone.Core.Applications.Radarr
|
|||||||
SyncCategories = new[] { 2000, 2010, 2020, 2030, 2040, 2045, 2050, 2060, 2070, 2080 };
|
SyncCategories = new[] { 2000, 2010, 2020, 2030, 2040, 2045, 2050, 2060, 2070, 2080 };
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<int> SyncCategories { get; set; }
|
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Prowlarr Server", HelpText = "Prowlarr server URL as Radarr sees it, including http(s)://, port, and urlbase if needed")]
|
[FieldDefinition(0, Label = "Prowlarr Server", HelpText = "Prowlarr server URL as Radarr sees it, including http(s)://, port, and urlbase if needed")]
|
||||||
public string ProwlarrUrl { get; set; }
|
public string ProwlarrUrl { get; set; }
|
||||||
|
|
||||||
@@ -37,6 +37,9 @@ namespace NzbDrone.Core.Applications.Radarr
|
|||||||
[FieldDefinition(2, Label = "ApiKey", Privacy = PrivacyLevel.ApiKey, HelpText = "The ApiKey generated by Radarr in Settings/General")]
|
[FieldDefinition(2, Label = "ApiKey", Privacy = PrivacyLevel.ApiKey, HelpText = "The ApiKey generated by Radarr in Settings/General")]
|
||||||
public string ApiKey { get; set; }
|
public string ApiKey { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(3, Label = "Sync Categories", Type = FieldType.Select, SelectOptions = typeof(NewznabCategoryFieldConverter), Advanced = true, HelpText = "Only Indexers that support these categories will be synced")]
|
||||||
|
public IEnumerable<int> SyncCategories { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
|
using NzbDrone.Core.Indexers;
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Applications.Readarr
|
namespace NzbDrone.Core.Applications.Readarr
|
||||||
@@ -12,6 +13,7 @@ namespace NzbDrone.Core.Applications.Readarr
|
|||||||
RuleFor(c => c.BaseUrl).IsValidUrl();
|
RuleFor(c => c.BaseUrl).IsValidUrl();
|
||||||
RuleFor(c => c.ProwlarrUrl).IsValidUrl();
|
RuleFor(c => c.ProwlarrUrl).IsValidUrl();
|
||||||
RuleFor(c => c.ApiKey).NotEmpty();
|
RuleFor(c => c.ApiKey).NotEmpty();
|
||||||
|
RuleFor(c => c.SyncCategories).NotEmpty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,8 +28,6 @@ namespace NzbDrone.Core.Applications.Readarr
|
|||||||
SyncCategories = new[] { 3030, 7000, 7010, 7020, 7030, 7040, 7050, 7060 };
|
SyncCategories = new[] { 3030, 7000, 7010, 7020, 7030, 7040, 7050, 7060 };
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<int> SyncCategories { get; set; }
|
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Prowlarr Server", HelpText = "Prowlarr server URL as Readarr sees it, including http(s)://, port, and urlbase if needed")]
|
[FieldDefinition(0, Label = "Prowlarr Server", HelpText = "Prowlarr server URL as Readarr sees it, including http(s)://, port, and urlbase if needed")]
|
||||||
public string ProwlarrUrl { get; set; }
|
public string ProwlarrUrl { get; set; }
|
||||||
|
|
||||||
@@ -37,6 +37,9 @@ namespace NzbDrone.Core.Applications.Readarr
|
|||||||
[FieldDefinition(2, Label = "ApiKey", Privacy = PrivacyLevel.ApiKey, HelpText = "The ApiKey generated by Readarr in Settings/General")]
|
[FieldDefinition(2, Label = "ApiKey", Privacy = PrivacyLevel.ApiKey, HelpText = "The ApiKey generated by Readarr in Settings/General")]
|
||||||
public string ApiKey { get; set; }
|
public string ApiKey { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(3, Label = "Sync Categories", Type = FieldType.Select, SelectOptions = typeof(NewznabCategoryFieldConverter), Advanced = true, HelpText = "Only Indexers that support these categories will be synced")]
|
||||||
|
public IEnumerable<int> SyncCategories { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
|
using NzbDrone.Core.Indexers;
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Applications.Sonarr
|
namespace NzbDrone.Core.Applications.Sonarr
|
||||||
@@ -27,9 +28,6 @@ namespace NzbDrone.Core.Applications.Sonarr
|
|||||||
AnimeSyncCategories = new[] { 5070 };
|
AnimeSyncCategories = new[] { 5070 };
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<int> SyncCategories { get; set; }
|
|
||||||
public IEnumerable<int> AnimeSyncCategories { get; set; }
|
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Prowlarr Server", HelpText = "Prowlarr server URL as Sonarr sees it, including http(s)://, port, and urlbase if needed")]
|
[FieldDefinition(0, Label = "Prowlarr Server", HelpText = "Prowlarr server URL as Sonarr sees it, including http(s)://, port, and urlbase if needed")]
|
||||||
public string ProwlarrUrl { get; set; }
|
public string ProwlarrUrl { get; set; }
|
||||||
|
|
||||||
@@ -39,6 +37,12 @@ namespace NzbDrone.Core.Applications.Sonarr
|
|||||||
[FieldDefinition(2, Label = "ApiKey", Privacy = PrivacyLevel.ApiKey, HelpText = "The ApiKey generated by Sonarr in Settings/General")]
|
[FieldDefinition(2, Label = "ApiKey", Privacy = PrivacyLevel.ApiKey, HelpText = "The ApiKey generated by Sonarr in Settings/General")]
|
||||||
public string ApiKey { get; set; }
|
public string ApiKey { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(3, Label = "Sync Categories", Type = FieldType.Select, SelectOptions = typeof(NewznabCategoryFieldConverter), Advanced = true, HelpText = "Only Indexers that support these categories will be synced")]
|
||||||
|
public IEnumerable<int> SyncCategories { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(4, Label = "Anime Sync Categories", Type = FieldType.Select, SelectOptions = typeof(NewznabCategoryFieldConverter), Advanced = true, HelpText = "Only Indexers that support these categories will be synced")]
|
||||||
|
public IEnumerable<int> AnimeSyncCategories { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
40
src/NzbDrone.Core/Indexers/NewznabCategoryFieldConverter.cs
Normal file
40
src/NzbDrone.Core/Indexers/NewznabCategoryFieldConverter.cs
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using NzbDrone.Core.Annotations;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Indexers
|
||||||
|
{
|
||||||
|
public class NewznabCategoryFieldConverter : ISelectOptionsConverter
|
||||||
|
{
|
||||||
|
public List<SelectOption> GetSelectOptions()
|
||||||
|
{
|
||||||
|
var result = new List<SelectOption>();
|
||||||
|
|
||||||
|
foreach (var category in NewznabStandardCategory.ParentCats)
|
||||||
|
{
|
||||||
|
result.Add(new SelectOption
|
||||||
|
{
|
||||||
|
Value = category.Id,
|
||||||
|
Name = category.Name,
|
||||||
|
Hint = $"({category.Id})"
|
||||||
|
});
|
||||||
|
|
||||||
|
if (category.SubCategories != null)
|
||||||
|
{
|
||||||
|
foreach (var subcat in category.SubCategories.OrderBy(cat => cat.Id))
|
||||||
|
{
|
||||||
|
result.Add(new SelectOption
|
||||||
|
{
|
||||||
|
Value = subcat.Id,
|
||||||
|
Name = subcat.Name,
|
||||||
|
Hint = $"({subcat.Id})",
|
||||||
|
ParentValue = category.Id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user