Use proper DtoOptions extensions

This commit is contained in:
crobibero 2020-06-20 16:03:19 -06:00
parent 3329b08b40
commit d1ca0cb4c7
3 changed files with 37 additions and 16 deletions

View File

@ -4,6 +4,7 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Jellyfin.Api.Extensions;
using Jellyfin.Api.Helpers; using Jellyfin.Api.Helpers;
using Jellyfin.Api.Models.PlaylistDtos; using Jellyfin.Api.Models.PlaylistDtos;
using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Dto;
@ -80,17 +81,17 @@ namespace Jellyfin.Api.Controllers
/// <param name="playlistId">The playlist id.</param> /// <param name="playlistId">The playlist id.</param>
/// <param name="ids">Item id, comma delimited.</param> /// <param name="ids">Item id, comma delimited.</param>
/// <param name="userId">The userId.</param> /// <param name="userId">The userId.</param>
/// <response code="200">Items added to playlist.</response> /// <response code="204">Items added to playlist.</response>
/// <returns>An <see cref="OkResult"/> on success.</returns> /// <returns>An <see cref="NoContentResult"/> on success.</returns>
[HttpPost("{playlistId}/Items")] [HttpPost("{playlistId}/Items")]
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status204NoContent)]
public ActionResult AddToPlaylist( public ActionResult AddToPlaylist(
[FromRoute] string playlistId, [FromRoute] string playlistId,
[FromQuery] string ids, [FromQuery] string ids,
[FromQuery] Guid userId) [FromQuery] Guid userId)
{ {
_playlistManager.AddToPlaylist(playlistId, RequestHelpers.GetGuids(ids), userId); _playlistManager.AddToPlaylist(playlistId, RequestHelpers.GetGuids(ids), userId);
return Ok(); return NoContent();
} }
/// <summary> /// <summary>
@ -99,17 +100,17 @@ namespace Jellyfin.Api.Controllers
/// <param name="playlistId">The playlist id.</param> /// <param name="playlistId">The playlist id.</param>
/// <param name="itemId">The item id.</param> /// <param name="itemId">The item id.</param>
/// <param name="newIndex">The new index.</param> /// <param name="newIndex">The new index.</param>
/// <response code="200">Item moved to new index.</response> /// <response code="204">Item moved to new index.</response>
/// <returns>An <see cref="OkResult"/> on success.</returns> /// <returns>An <see cref="NoContentResult"/> on success.</returns>
[HttpPost("{playlistId}/Items/{itemId}/Move/{newIndex}")] [HttpPost("{playlistId}/Items/{itemId}/Move/{newIndex}")]
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status204NoContent)]
public ActionResult MoveItem( public ActionResult MoveItem(
[FromRoute] string playlistId, [FromRoute] string playlistId,
[FromRoute] string itemId, [FromRoute] string itemId,
[FromRoute] int newIndex) [FromRoute] int newIndex)
{ {
_playlistManager.MoveItem(playlistId, itemId, newIndex); _playlistManager.MoveItem(playlistId, itemId, newIndex);
return Ok(); return NoContent();
} }
/// <summary> /// <summary>
@ -117,14 +118,14 @@ namespace Jellyfin.Api.Controllers
/// </summary> /// </summary>
/// <param name="playlistId">The playlist id.</param> /// <param name="playlistId">The playlist id.</param>
/// <param name="entryIds">The item ids, comma delimited.</param> /// <param name="entryIds">The item ids, comma delimited.</param>
/// <response code="200">Items removed.</response> /// <response code="204">Items removed.</response>
/// <returns>An <see cref="OkResult"/> on success.</returns> /// <returns>An <see cref="NoContentResult"/> on success.</returns>
[HttpDelete("{playlistId}/Items")] [HttpDelete("{playlistId}/Items")]
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status204NoContent)]
public ActionResult RemoveFromPlaylist([FromRoute] string playlistId, [FromQuery] string entryIds) public ActionResult RemoveFromPlaylist([FromRoute] string playlistId, [FromQuery] string entryIds)
{ {
_playlistManager.RemoveFromPlaylist(playlistId, entryIds.Split(',')); _playlistManager.RemoveFromPlaylist(playlistId, entryIds.Split(','));
return Ok(); return NoContent();
} }
/// <summary> /// <summary>
@ -151,7 +152,7 @@ namespace Jellyfin.Api.Controllers
[FromRoute] string fields, [FromRoute] string fields,
[FromRoute] bool? enableImages, [FromRoute] bool? enableImages,
[FromRoute] bool? enableUserData, [FromRoute] bool? enableUserData,
[FromRoute] bool? imageTypeLimit, [FromRoute] int? imageTypeLimit,
[FromRoute] string enableImageTypes) [FromRoute] string enableImageTypes)
{ {
var playlist = (Playlist)_libraryManager.GetItemById(playlistId); var playlist = (Playlist)_libraryManager.GetItemById(playlistId);
@ -176,8 +177,10 @@ namespace Jellyfin.Api.Controllers
items = items.Take(limit.Value).ToArray(); items = items.Take(limit.Value).ToArray();
} }
// TODO var dtoOptions = GetDtoOptions(_authContext, request); var dtoOptions = new DtoOptions()
var dtoOptions = new DtoOptions(); .AddItemFields(fields)
.AddClientFields(Request)
.AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes);
var dtos = _dtoService.GetBaseItemDtos(items.Select(i => i.Item2).ToList(), dtoOptions, user); var dtos = _dtoService.GetBaseItemDtos(items.Select(i => i.Item2).ToList(), dtoOptions, user);

View File

@ -122,7 +122,7 @@ namespace Jellyfin.Api.Extensions
/// <param name="enableImageTypes">Enable image types.</param> /// <param name="enableImageTypes">Enable image types.</param>
/// <returns>Modified DtoOptions object.</returns> /// <returns>Modified DtoOptions object.</returns>
internal static DtoOptions AddAdditionalDtoOptions( internal static DtoOptions AddAdditionalDtoOptions(
in DtoOptions dtoOptions, this DtoOptions dtoOptions,
bool? enableImages, bool? enableImages,
bool? enableUserData, bool? enableUserData,
int? imageTypeLimit, int? imageTypeLimit,

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Linq;
using Jellyfin.Data.Enums; using Jellyfin.Data.Enums;
using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Session; using MediaBrowser.Controller.Session;
@ -73,5 +74,22 @@ namespace Jellyfin.Api.Helpers
return session; return session;
} }
/// <summary>
/// Get Guid array from string.
/// </summary>
/// <param name="value">String value.</param>
/// <returns>Guid array.</returns>
internal static Guid[] GetGuids(string? value)
{
if (value == null)
{
return Array.Empty<Guid>();
}
return value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(i => new Guid(i))
.ToArray();
}
} }
} }