|
@@ -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)
|