| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.ComponentModel.DataAnnotations;
 
- using System.Linq;
 
- using Jellyfin.Api.Constants;
 
- using MediaBrowser.Model.Tasks;
 
- using Microsoft.AspNetCore.Authorization;
 
- using Microsoft.AspNetCore.Http;
 
- using Microsoft.AspNetCore.Mvc;
 
- namespace Jellyfin.Api.Controllers;
 
- /// <summary>
 
- /// Scheduled Tasks Controller.
 
- /// </summary>
 
- [Authorize(Policy = Policies.RequiresElevation)]
 
- public class ScheduledTasksController : BaseJellyfinApiController
 
- {
 
-     private readonly ITaskManager _taskManager;
 
-     /// <summary>
 
-     /// Initializes a new instance of the <see cref="ScheduledTasksController"/> class.
 
-     /// </summary>
 
-     /// <param name="taskManager">Instance of the <see cref="ITaskManager"/> interface.</param>
 
-     public ScheduledTasksController(ITaskManager taskManager)
 
-     {
 
-         _taskManager = taskManager;
 
-     }
 
-     /// <summary>
 
-     /// Get tasks.
 
-     /// </summary>
 
-     /// <param name="isHidden">Optional filter tasks that are hidden, or not.</param>
 
-     /// <param name="isEnabled">Optional filter tasks that are enabled, or not.</param>
 
-     /// <response code="200">Scheduled tasks retrieved.</response>
 
-     /// <returns>The list of scheduled tasks.</returns>
 
-     [HttpGet]
 
-     [ProducesResponseType(StatusCodes.Status200OK)]
 
-     public IEnumerable<TaskInfo> GetTasks(
 
-         [FromQuery] bool? isHidden,
 
-         [FromQuery] bool? isEnabled)
 
-     {
 
-         IEnumerable<IScheduledTaskWorker> tasks = _taskManager.ScheduledTasks.OrderBy(o => o.Name);
 
-         foreach (var task in tasks)
 
-         {
 
-             if (task.ScheduledTask is IConfigurableScheduledTask scheduledTask)
 
-             {
 
-                 if (isHidden.HasValue && isHidden.Value != scheduledTask.IsHidden)
 
-                 {
 
-                     continue;
 
-                 }
 
-                 if (isEnabled.HasValue && isEnabled.Value != scheduledTask.IsEnabled)
 
-                 {
 
-                     continue;
 
-                 }
 
-             }
 
-             yield return ScheduledTaskHelpers.GetTaskInfo(task);
 
-         }
 
-     }
 
-     /// <summary>
 
-     /// Get task by id.
 
-     /// </summary>
 
-     /// <param name="taskId">Task Id.</param>
 
-     /// <response code="200">Task retrieved.</response>
 
-     /// <response code="404">Task not found.</response>
 
-     /// <returns>An <see cref="OkResult"/> containing the task on success, or a <see cref="NotFoundResult"/> if the task could not be found.</returns>
 
-     [HttpGet("{taskId}")]
 
-     [ProducesResponseType(StatusCodes.Status200OK)]
 
-     [ProducesResponseType(StatusCodes.Status404NotFound)]
 
-     public ActionResult<TaskInfo> GetTask([FromRoute, Required] string taskId)
 
-     {
 
-         var task = _taskManager.ScheduledTasks.FirstOrDefault(i =>
 
-             string.Equals(i.Id, taskId, StringComparison.OrdinalIgnoreCase));
 
-         if (task is null)
 
-         {
 
-             return NotFound();
 
-         }
 
-         return ScheduledTaskHelpers.GetTaskInfo(task);
 
-     }
 
-     /// <summary>
 
-     /// Start specified task.
 
-     /// </summary>
 
-     /// <param name="taskId">Task Id.</param>
 
-     /// <response code="204">Task started.</response>
 
-     /// <response code="404">Task not found.</response>
 
-     /// <returns>An <see cref="NoContentResult"/> on success, or a <see cref="NotFoundResult"/> if the file could not be found.</returns>
 
-     [HttpPost("Running/{taskId}")]
 
-     [ProducesResponseType(StatusCodes.Status204NoContent)]
 
-     [ProducesResponseType(StatusCodes.Status404NotFound)]
 
-     public ActionResult StartTask([FromRoute, Required] string taskId)
 
-     {
 
-         var task = _taskManager.ScheduledTasks.FirstOrDefault(o =>
 
-             o.Id.Equals(taskId, StringComparison.OrdinalIgnoreCase));
 
-         if (task is null)
 
-         {
 
-             return NotFound();
 
-         }
 
-         _taskManager.Execute(task, new TaskOptions());
 
-         return NoContent();
 
-     }
 
-     /// <summary>
 
-     /// Stop specified task.
 
-     /// </summary>
 
-     /// <param name="taskId">Task Id.</param>
 
-     /// <response code="204">Task stopped.</response>
 
-     /// <response code="404">Task not found.</response>
 
-     /// <returns>An <see cref="OkResult"/> on success, or a <see cref="NotFoundResult"/> if the file could not be found.</returns>
 
-     [HttpDelete("Running/{taskId}")]
 
-     [ProducesResponseType(StatusCodes.Status204NoContent)]
 
-     [ProducesResponseType(StatusCodes.Status404NotFound)]
 
-     public ActionResult StopTask([FromRoute, Required] string taskId)
 
-     {
 
-         var task = _taskManager.ScheduledTasks.FirstOrDefault(o =>
 
-             o.Id.Equals(taskId, StringComparison.OrdinalIgnoreCase));
 
-         if (task is null)
 
-         {
 
-             return NotFound();
 
-         }
 
-         _taskManager.Cancel(task);
 
-         return NoContent();
 
-     }
 
-     /// <summary>
 
-     /// Update specified task triggers.
 
-     /// </summary>
 
-     /// <param name="taskId">Task Id.</param>
 
-     /// <param name="triggerInfos">Triggers.</param>
 
-     /// <response code="204">Task triggers updated.</response>
 
-     /// <response code="404">Task not found.</response>
 
-     /// <returns>An <see cref="OkResult"/> on success, or a <see cref="NotFoundResult"/> if the file could not be found.</returns>
 
-     [HttpPost("{taskId}/Triggers")]
 
-     [ProducesResponseType(StatusCodes.Status204NoContent)]
 
-     [ProducesResponseType(StatusCodes.Status404NotFound)]
 
-     public ActionResult UpdateTask(
 
-         [FromRoute, Required] string taskId,
 
-         [FromBody, Required] TaskTriggerInfo[] triggerInfos)
 
-     {
 
-         var task = _taskManager.ScheduledTasks.FirstOrDefault(o =>
 
-             o.Id.Equals(taskId, StringComparison.OrdinalIgnoreCase));
 
-         if (task is null)
 
-         {
 
-             return NotFound();
 
-         }
 
-         task.Triggers = triggerInfos;
 
-         return NoContent();
 
-     }
 
- }
 
 
  |