From e67dd3fc0e688a659ca1b1b88410e7b015385981 Mon Sep 17 00:00:00 2001 From: Tim Eisele Date: Thu, 26 Sep 2024 15:45:08 +0200 Subject: Add endpoint for getting playlists by id (#12697) --- Jellyfin.Api/Controllers/PlaylistsController.cs | 52 ++++++++++++++++++------- 1 file changed, 37 insertions(+), 15 deletions(-) (limited to 'Jellyfin.Api/Controllers/PlaylistsController.cs') 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 @@ -149,6 +149,37 @@ public class PlaylistsController : BaseJellyfinApiController return NoContent(); } + /// + /// Get a playlist. + /// + /// The playlist id. + /// The playlist. + /// Playlist not found. + /// + /// A objects. + /// + [HttpGet("{playlistId}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + public ActionResult 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() + }; + } + /// /// Get a playlist's users. /// @@ -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(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++) { -- cgit v1.2.3