diff --git a/src/Kyoo.Core/Views/SubtitleApi.cs b/src/Kyoo.Core/Views/SubtitleApi.cs
index 784a9022..41b25063 100644
--- a/src/Kyoo.Core/Views/SubtitleApi.cs
+++ b/src/Kyoo.Core/Views/SubtitleApi.cs
@@ -22,39 +22,79 @@ using System.Linq;
using System.Threading.Tasks;
using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models;
+using Kyoo.Abstractions.Models.Attributes;
using Kyoo.Abstractions.Models.Permissions;
+using Kyoo.Abstractions.Models.Utils;
+using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
+using static Kyoo.Abstractions.Models.Utils.Constants;
namespace Kyoo.Core.Api
{
- [Route("subtitle")]
+ ///
+ /// An endpoint to retrieve subtitles for a specific episode.
+ ///
+ [Route("subtitles")]
+ [Route("subtitle", Order = AlternativeRoute)]
+ [PartialPermission(nameof(SubtitleApi))]
[ApiController]
+ [ApiDefinition("Subtitles", Group = WatchGroup)]
public class SubtitleApi : ControllerBase
{
+ ///
+ /// The library manager used to modify or retrieve information about the data store.
+ ///
private readonly ILibraryManager _libraryManager;
+
+ ///
+ /// The file manager used to send subtitles files.
+ ///
private readonly IFileSystem _files;
+ ///
+ /// Create a new .
+ ///
+ /// The library manager used to interact with the data store.
+ /// The file manager used to send subtitle files.
public SubtitleApi(ILibraryManager libraryManager, IFileSystem files)
{
_libraryManager = libraryManager;
_files = files;
}
- [HttpGet("{id:int}")]
- [Permission(nameof(SubtitleApi), Kind.Read)]
- public async Task GetSubtitle(int id)
+ ///
+ /// Get subtitle
+ ///
+ ///
+ /// Get the subtitle file with the given identifier.
+ /// The extension is optional and can be used to ask Kyoo to convert the subtitle file on the fly.
+ ///
+ ///
+ /// The ID or slug of the subtitle (the same as the corresponding ).
+ ///
+ /// An optional extension for the subtitle file.
+ /// The subtitle file
+ /// No subtitle exist with the given ID or slug.
+ [HttpGet("{identifier:id}", Order = AlternativeRoute)]
+ [HttpGet("{identifier:id}.{extension}")]
+ [PartialPermission(Kind.Read)]
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status404NotFound)]
+ public async Task GetSubtitle(Identifier identifier, string extension)
{
- Track subtitle = await _libraryManager.GetOrDefault