aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Api/Controllers/TrickplayController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Jellyfin.Api/Controllers/TrickplayController.cs')
-rw-r--r--Jellyfin.Api/Controllers/TrickplayController.cs53
1 files changed, 21 insertions, 32 deletions
diff --git a/Jellyfin.Api/Controllers/TrickplayController.cs b/Jellyfin.Api/Controllers/TrickplayController.cs
index 46289f170..6dee02342 100644
--- a/Jellyfin.Api/Controllers/TrickplayController.cs
+++ b/Jellyfin.Api/Controllers/TrickplayController.cs
@@ -6,18 +6,14 @@ using System.IO;
using System.Linq;
using System.Net.Mime;
using System.Text;
-using System.Threading.Tasks;
using Jellyfin.Api.Attributes;
using Jellyfin.Api.Extensions;
-using Jellyfin.Api.Helpers;
-using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Trickplay;
using MediaBrowser.Model;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
namespace Jellyfin.Api.Controllers;
@@ -28,26 +24,18 @@ namespace Jellyfin.Api.Controllers;
[Authorize]
public class TrickplayController : BaseJellyfinApiController
{
- private readonly ILogger<TrickplayController> _logger;
- private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ILibraryManager _libraryManager;
private readonly ITrickplayManager _trickplayManager;
/// <summary>
/// Initializes a new instance of the <see cref="TrickplayController"/> class.
/// </summary>
- /// <param name="logger">Instance of the <see cref="ILogger{TrickplayController}"/> interface.</param>
- /// <param name="httpContextAccessor">Instance of the <see cref="IHttpContextAccessor"/> interface.</param>
/// <param name="libraryManager">Instance of <see cref="ILibraryManager"/>.</param>
/// <param name="trickplayManager">Instance of <see cref="ITrickplayManager"/>.</param>
public TrickplayController(
- ILogger<TrickplayController> logger,
- IHttpContextAccessor httpContextAccessor,
ILibraryManager libraryManager,
ITrickplayManager trickplayManager)
{
- _logger = logger;
- _httpContextAccessor = httpContextAccessor;
_libraryManager = libraryManager;
_trickplayManager = trickplayManager;
}
@@ -66,9 +54,9 @@ public class TrickplayController : BaseJellyfinApiController
public ActionResult GetTrickplayHlsPlaylist(
[FromRoute, Required] Guid itemId,
[FromRoute, Required] int width,
- [FromQuery] string? mediaSourceId)
+ [FromQuery] Guid? mediaSourceId)
{
- return GetTrickplayPlaylistInternal(width, mediaSourceId ?? itemId.ToString("N"));
+ return GetTrickplayPlaylistInternal(width, mediaSourceId ?? itemId);
}
/// <summary>
@@ -89,9 +77,9 @@ public class TrickplayController : BaseJellyfinApiController
[FromRoute, Required] Guid itemId,
[FromRoute, Required] int width,
[FromRoute, Required] int index,
- [FromQuery] string? mediaSourceId)
+ [FromQuery] Guid? mediaSourceId)
{
- var item = _libraryManager.GetItemById(mediaSourceId ?? itemId.ToString("N"));
+ var item = _libraryManager.GetItemById(mediaSourceId ?? itemId);
if (item is null)
{
return NotFound();
@@ -106,28 +94,22 @@ public class TrickplayController : BaseJellyfinApiController
return NotFound();
}
- private ActionResult GetTrickplayPlaylistInternal(int width, string mediaSourceId)
+ private ActionResult GetTrickplayPlaylistInternal(int width, Guid mediaSourceId)
{
- if (_httpContextAccessor.HttpContext is null)
- {
- throw new ResourceNotFoundException(nameof(_httpContextAccessor.HttpContext));
- }
-
- var tilesResolutions = _trickplayManager.GetTilesResolutions(Guid.Parse(mediaSourceId));
- if (tilesResolutions is not null && tilesResolutions.ContainsKey(width))
+ var tilesResolutions = _trickplayManager.GetTilesResolutions(mediaSourceId);
+ if (tilesResolutions is not null && tilesResolutions.TryGetValue(width, out var tilesInfo))
{
var builder = new StringBuilder(128);
- var tilesInfo = tilesResolutions[width];
if (tilesInfo.TileCount > 0)
{
const string urlFormat = "Trickplay/{0}/{1}.jpg?MediaSourceId={2}&api_key={3}";
const string decimalFormat = "{0:0.###}";
- var resolution = tilesInfo.Width.ToString(CultureInfo.InvariantCulture) + "x" + tilesInfo.Height.ToString(CultureInfo.InvariantCulture);
- var layout = tilesInfo.TileWidth.ToString(CultureInfo.InvariantCulture) + "x" + tilesInfo.TileHeight.ToString(CultureInfo.InvariantCulture);
+ var resolution = $"{tilesInfo.Width}x{tilesInfo.Height}";
+ var layout = $"{tilesInfo.TileWidth}x{tilesInfo.TileHeight}";
var tilesPerGrid = tilesInfo.TileWidth * tilesInfo.TileHeight;
- var tileDuration = (decimal)tilesInfo.Interval / 1000;
+ var tileDuration = tilesInfo.Interval / 1000m;
var infDuration = tileDuration * tilesPerGrid;
var tileGridCount = (int)Math.Ceiling((decimal)tilesInfo.TileCount / tilesPerGrid);
@@ -153,15 +135,22 @@ public class TrickplayController : BaseJellyfinApiController
urlFormat,
width.ToString(CultureInfo.InvariantCulture),
i.ToString(CultureInfo.InvariantCulture),
- mediaSourceId,
- _httpContextAccessor.HttpContext.User.GetToken());
+ mediaSourceId.ToString("N"),
+ User.GetToken());
// EXTINF
- builder.Append("#EXTINF:").Append(string.Format(CultureInfo.InvariantCulture, decimalFormat, infDuration))
+ builder
+ .Append("#EXTINF:")
+ .Append(string.Format(CultureInfo.InvariantCulture, decimalFormat, infDuration))
.AppendLine(",");
// EXT-X-TILES
- builder.Append("#EXT-X-TILES:RESOLUTION=").Append(resolution).Append(",LAYOUT=").Append(layout).Append(",DURATION=")
+ builder
+ .Append("#EXT-X-TILES:RESOLUTION=")
+ .Append(resolution)
+ .Append(",LAYOUT=")
+ .Append(layout)
+ .Append(",DURATION=")
.AppendLine(string.Format(CultureInfo.InvariantCulture, decimalFormat, tileDuration));
// URL