diff options
| author | Tim Eisele <Shadowghost@users.noreply.github.com> | 2024-09-26 15:45:08 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-26 07:45:08 -0600 |
| commit | e67dd3fc0e688a659ca1b1b88410e7b015385981 (patch) | |
| tree | 0ee2c9e5ecf4c0b99de8ed8f9e6763763d109ec7 /Jellyfin.Api/Controllers/PlaylistsController.cs | |
| parent | bc9594aeedcd1ddf2b6bf07a1abbef129b6ea389 (diff) | |
Add endpoint for getting playlists by id (#12697)
Diffstat (limited to 'Jellyfin.Api/Controllers/PlaylistsController.cs')
| -rw-r--r-- | Jellyfin.Api/Controllers/PlaylistsController.cs | 52 |
1 files changed, 37 insertions, 15 deletions
diff --git a/Jellyfin.Api/Controllers/PlaylistsController.cs b/Jellyfin.Api/Controllers/PlaylistsController.cs index 63d6e1cc3..e6f23b136 100644 --- a/Jellyfin.Api/Controllers/PlaylistsController.cs +++ b/Jellyfin.Api/Controllers/PlaylistsController.cs @@ -150,6 +150,37 @@ public class PlaylistsController : BaseJellyfinApiController } /// <summary> + /// Get a playlist. + /// </summary> + /// <param name="playlistId">The playlist id.</param> + /// <response code="200">The playlist.</response> + /// <response code="404">Playlist not found.</response> + /// <returns> + /// A <see cref="Playlist"/> objects. + /// </returns> + [HttpGet("{playlistId}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + public ActionResult<PlaylistDto> GetPlaylist( + [FromRoute, Required] Guid playlistId) + { + var userId = User.GetUserId(); + + var playlist = _playlistManager.GetPlaylistForUser(playlistId, userId); + if (playlist is null) + { + return NotFound("Playlist not found"); + } + + return new PlaylistDto() + { + Shares = playlist.Shares, + OpenAccess = playlist.OpenAccess, + ItemIds = playlist.GetManageableItems().Select(t => t.Item2.Id).ToList() + }; + } + + /// <summary> /// Get a playlist's users. /// </summary> /// <param name="playlistId">The playlist id.</param> @@ -467,32 +498,23 @@ public class PlaylistsController : BaseJellyfinApiController [FromQuery] int? imageTypeLimit, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes) { - userId = RequestHelpers.GetUserId(User, userId); - var playlist = _playlistManager.GetPlaylistForUser(playlistId, userId.Value); + var callingUserId = userId ?? User.GetUserId(); + var playlist = _playlistManager.GetPlaylistForUser(playlistId, callingUserId); if (playlist is null) { return NotFound("Playlist not found"); } var isPermitted = playlist.OpenAccess - || playlist.OwnerUserId.Equals(userId.Value) - || playlist.Shares.Any(s => s.UserId.Equals(userId.Value)); + || playlist.OwnerUserId.Equals(callingUserId) + || playlist.Shares.Any(s => s.UserId.Equals(callingUserId)); if (!isPermitted) { return Forbid(); } - var user = userId.IsNullOrEmpty() - ? null - : _userManager.GetUserById(userId.Value); - var item = _libraryManager.GetItemById<Playlist>(playlistId, user); - if (item is null) - { - return NotFound(); - } - - var items = item.GetManageableItems().ToArray(); + var items = playlist.GetManageableItems().ToArray(); var count = items.Length; if (startIndex.HasValue) { @@ -507,7 +529,7 @@ public class PlaylistsController : BaseJellyfinApiController var dtoOptions = new DtoOptions { Fields = fields } .AddClientFields(User) .AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes); - + var user = _userManager.GetUserById(callingUserId); var dtos = _dtoService.GetBaseItemDtos(items.Select(i => i.Item2).ToList(), dtoOptions, user); for (int index = 0; index < dtos.Count; index++) { |
