feat: prioritise and blacklist media and overview in setting page of progress in adding info
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
using System.Collections.Generic;
|
||||
using Jellyfin.Plugin.JRay.Models;
|
||||
using Jellyfin.Plugin.JRay.Services.Interfaces;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace Jellyfin.Plugin.JRay.Controllers;
|
||||
|
||||
/// <summary>
|
||||
/// Manages the prioritise/ignore rules that shape the work-discovery API
|
||||
/// (<c>GET /Plugins/JRay/Tasks/Pending</c>). Rules can target a genre, a
|
||||
/// series, or a single item; setting a rule for a target that already has one
|
||||
/// replaces it, so a target can never be both prioritised and ignored.
|
||||
/// </summary>
|
||||
[ApiController]
|
||||
[Route("Plugins/JRay/Policy")]
|
||||
[Authorize(Roles = "Administrator")]
|
||||
public class PolicyController : ControllerBase
|
||||
{
|
||||
private readonly IMediaPolicyStore _policyStore;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="PolicyController"/> class.
|
||||
/// </summary>
|
||||
/// <param name="policyStore">The media policy store.</param>
|
||||
public PolicyController(IMediaPolicyStore policyStore)
|
||||
{
|
||||
_policyStore = policyStore;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets all configured prioritise/ignore rules.
|
||||
/// </summary>
|
||||
/// <returns>The current rules.</returns>
|
||||
[HttpGet("Rules")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
public ActionResult<IReadOnlyList<MediaPolicyRule>> GetRules()
|
||||
{
|
||||
return Ok(_policyStore.GetRules());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds or replaces a rule. If a rule already exists for the same scope
|
||||
/// and value, its action is updated.
|
||||
/// </summary>
|
||||
/// <param name="rule">The rule to set.</param>
|
||||
/// <returns>204 on success, or 400 if the rule has no value.</returns>
|
||||
[HttpPut("Rules")]
|
||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
||||
public IActionResult SetRule([FromBody] MediaPolicyRule rule)
|
||||
{
|
||||
if (rule is null || string.IsNullOrWhiteSpace(rule.Value))
|
||||
{
|
||||
return BadRequest("A rule must have a non-empty value.");
|
||||
}
|
||||
|
||||
_policyStore.SetRule(rule);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes the rule matching the given scope and value.
|
||||
/// </summary>
|
||||
/// <param name="scope">The scope of the rule to remove.</param>
|
||||
/// <param name="value">The value of the rule to remove.</param>
|
||||
/// <returns>204 whether or not a matching rule existed.</returns>
|
||||
[HttpDelete("Rules")]
|
||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||
public IActionResult RemoveRule([FromQuery] PolicyScope scope, [FromQuery] string value)
|
||||
{
|
||||
_policyStore.RemoveRule(scope, value ?? string.Empty);
|
||||
return NoContent();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user