@ -1,6 +1,8 @@
using System ;
using System.Collections.Generic ;
using System.Diagnostics.CodeAnalysis ;
using System.IO ;
using System.Net.Mime ;
using System.Threading.Tasks ;
using Emby.Dlna ;
using Emby.Dlna.Main ;
@ -17,8 +19,6 @@ namespace Jellyfin.Api.Controllers
[Route("Dlna")]
public class DlnaServerController : BaseJellyfinApiController
{
private const string XMLContentType = "text/xml; charset=UTF-8" ;
private readonly IDlnaManager _dlnaManager ;
private readonly IContentDirectory _contentDirectory ;
private readonly IConnectionManager _connectionManager ;
@ -44,7 +44,8 @@ namespace Jellyfin.Api.Controllers
/// <returns>An <see cref="OkResult"/> containing the description xml.</returns>
[HttpGet("{serverId}/description")]
[HttpGet("{serverId}/description.xml", Name = "GetDescriptionXml_2")]
[Produces(XMLContentType)]
[Produces(MediaTypeNames.Text.Xml)]
[ProducesFile(MediaTypeNames.Text.Xml)]
[ProducesResponseType(StatusCodes.Status200OK)]
public ActionResult GetDescriptionXml ( [ FromRoute ] string serverId )
{
@ -62,7 +63,8 @@ namespace Jellyfin.Api.Controllers
/// <returns>An <see cref="OkResult"/> containing the dlna content directory xml.</returns>
[HttpGet("{serverId}/ContentDirectory")]
[HttpGet("{serverId}/ContentDirectory.xml", Name = "GetContentDirectory_2")]
[Produces(XMLContentType)]
[Produces(MediaTypeNames.Text.Xml)]
[ProducesFile(MediaTypeNames.Text.Xml)]
[ProducesResponseType(StatusCodes.Status200OK)]
[SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "serverId", Justification = "Required for DLNA")]
public ActionResult GetContentDirectory ( [ FromRoute ] string serverId )
@ -77,7 +79,8 @@ namespace Jellyfin.Api.Controllers
/// <returns>Dlna media receiver registrar xml.</returns>
[HttpGet("{serverId}/MediaReceiverRegistrar")]
[HttpGet("{serverId}/MediaReceiverRegistrar.xml", Name = "GetMediaReceiverRegistrar_2")]
[Produces(XMLContentType)]
[Produces(MediaTypeNames.Text.Xml)]
[ProducesFile(MediaTypeNames.Text.Xml)]
[ProducesResponseType(StatusCodes.Status200OK)]
[SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "serverId", Justification = "Required for DLNA")]
public ActionResult GetMediaReceiverRegistrar ( [ FromRoute ] string serverId )
@ -92,7 +95,8 @@ namespace Jellyfin.Api.Controllers
/// <returns>Dlna media receiver registrar xml.</returns>
[HttpGet("{serverId}/ConnectionManager")]
[HttpGet("{serverId}/ConnectionManager.xml", Name = "GetConnectionManager_2")]
[Produces(XMLContentType)]
[Produces(MediaTypeNames.Text.Xml)]
[ProducesFile(MediaTypeNames.Text.Xml)]
[ProducesResponseType(StatusCodes.Status200OK)]
[SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "serverId", Justification = "Required for DLNA")]
public ActionResult GetConnectionManager ( [ FromRoute ] string serverId )
@ -183,7 +187,9 @@ namespace Jellyfin.Api.Controllers
/// <returns>Icon stream.</returns>
[HttpGet("{serverId}/icons/{fileName}")]
[SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "serverId", Justification = "Required for DLNA")]
public ActionResult GetIconId ( [ FromRoute ] string serverId , [ FromRoute ] string fileName )
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesImageFile]
public ActionResult < FileResult > GetIconId ( [ FromRoute ] string serverId , [ FromRoute ] string fileName )
{
return GetIconInternal ( fileName ) ;
}
@ -194,12 +200,13 @@ namespace Jellyfin.Api.Controllers
/// <param name="fileName">The icon filename.</param>
/// <returns>Icon stream.</returns>
[HttpGet("icons/{fileName}")]
public ActionResult GetIcon ( [ FromRoute ] string fileName )
[ProducesImageFile]
public ActionResult < FileResult > GetIcon ( [ FromRoute ] string fileName )
{
return GetIconInternal ( fileName ) ;
}
private ActionResult GetIconInternal ( string fileName )
private ActionResult < FileResult > GetIconInternal ( string fileName )
{
var icon = _dlnaManager . GetIcon ( fileName ) ;
if ( icon = = null )