Update Media Segments when timestamps where changed in the editor
This commit is contained in:
parent
87875c8a11
commit
69960bfa5b
@ -3,9 +3,13 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Net.Mime;
|
using System.Net.Mime;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using IntroSkipper.Configuration;
|
using IntroSkipper.Configuration;
|
||||||
using IntroSkipper.Data;
|
using IntroSkipper.Data;
|
||||||
|
using IntroSkipper.Manager;
|
||||||
using MediaBrowser.Common.Api;
|
using MediaBrowser.Common.Api;
|
||||||
using MediaBrowser.Controller.Entities.Movies;
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
using MediaBrowser.Controller.Entities.TV;
|
using MediaBrowser.Controller.Entities.TV;
|
||||||
@ -20,14 +24,9 @@ namespace IntroSkipper.Controllers;
|
|||||||
[Authorize]
|
[Authorize]
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Produces(MediaTypeNames.Application.Json)]
|
[Produces(MediaTypeNames.Application.Json)]
|
||||||
public class SkipIntroController : ControllerBase
|
public class SkipIntroController(MediaSegmentUpdateManager mediaSegmentUpdateManager) : ControllerBase
|
||||||
{
|
{
|
||||||
/// <summary>
|
private readonly MediaSegmentUpdateManager _mediaSegmentUpdateManager = mediaSegmentUpdateManager;
|
||||||
/// Initializes a new instance of the <see cref="SkipIntroController"/> class.
|
|
||||||
/// </summary>
|
|
||||||
public SkipIntroController()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the timestamps of the introduction in a television episode. Responses are in API version 1 format.
|
/// Returns the timestamps of the introduction in a television episode. Responses are in API version 1 format.
|
||||||
@ -63,7 +62,7 @@ public class SkipIntroController : ControllerBase
|
|||||||
/// <returns>No content.</returns>
|
/// <returns>No content.</returns>
|
||||||
[Authorize(Policy = Policies.RequiresElevation)]
|
[Authorize(Policy = Policies.RequiresElevation)]
|
||||||
[HttpPost("Episode/{Id}/Timestamps")]
|
[HttpPost("Episode/{Id}/Timestamps")]
|
||||||
public ActionResult UpdateTimestamps([FromRoute] Guid id, [FromBody] TimeStamps timestamps)
|
public async Task<ActionResult> UpdateTimestampsAsync([FromRoute] Guid id, [FromBody] TimeStamps timestamps)
|
||||||
{
|
{
|
||||||
// only update existing episodes
|
// only update existing episodes
|
||||||
var rawItem = Plugin.Instance!.GetItem(id);
|
var rawItem = Plugin.Instance!.GetItem(id);
|
||||||
@ -87,6 +86,20 @@ public class SkipIntroController : ControllerBase
|
|||||||
Plugin.Instance!.SaveTimestamps(AnalysisMode.Introduction);
|
Plugin.Instance!.SaveTimestamps(AnalysisMode.Introduction);
|
||||||
Plugin.Instance!.SaveTimestamps(AnalysisMode.Credits);
|
Plugin.Instance!.SaveTimestamps(AnalysisMode.Credits);
|
||||||
|
|
||||||
|
if (Plugin.Instance.Configuration.UpdateMediaSegments)
|
||||||
|
{
|
||||||
|
var seasonId = rawItem is Episode e ? e.SeasonId : rawItem.Id;
|
||||||
|
var episode = Plugin.Instance!.QueuedMediaItems
|
||||||
|
.FirstOrDefault(kvp => kvp.Key == seasonId).Value
|
||||||
|
.FirstOrDefault(e => e.EpisodeId == rawItem.Id);
|
||||||
|
|
||||||
|
if (episode is not null)
|
||||||
|
{
|
||||||
|
using var ct = new CancellationTokenSource();
|
||||||
|
await _mediaSegmentUpdateManager.UpdateMediaSegmentsAsync([episode], ct.Token).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return NoContent();
|
return NoContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,10 @@ using System.Collections.Generic;
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net.Mime;
|
using System.Net.Mime;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using IntroSkipper.Data;
|
using IntroSkipper.Data;
|
||||||
|
using IntroSkipper.Manager;
|
||||||
using MediaBrowser.Common.Api;
|
using MediaBrowser.Common.Api;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
@ -21,13 +24,15 @@ namespace IntroSkipper.Controllers;
|
|||||||
/// Initializes a new instance of the <see cref="VisualizationController"/> class.
|
/// Initializes a new instance of the <see cref="VisualizationController"/> class.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
/// <param name="logger">Logger.</param>
|
/// <param name="logger">Logger.</param>
|
||||||
|
/// <param name="mediaSegmentUpdateManager">Media Segment Update Manager.</param>
|
||||||
[Authorize(Policy = Policies.RequiresElevation)]
|
[Authorize(Policy = Policies.RequiresElevation)]
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Produces(MediaTypeNames.Application.Json)]
|
[Produces(MediaTypeNames.Application.Json)]
|
||||||
[Route("Intros")]
|
[Route("Intros")]
|
||||||
public class VisualizationController(ILogger<VisualizationController> logger) : ControllerBase
|
public class VisualizationController(ILogger<VisualizationController> logger, MediaSegmentUpdateManager mediaSegmentUpdateManager) : ControllerBase
|
||||||
{
|
{
|
||||||
private readonly ILogger<VisualizationController> _logger = logger;
|
private readonly ILogger<VisualizationController> _logger = logger;
|
||||||
|
private readonly MediaSegmentUpdateManager _mediaSegmentUpdateManager = mediaSegmentUpdateManager;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns all show names and seasons.
|
/// Returns all show names and seasons.
|
||||||
@ -180,7 +185,7 @@ public class VisualizationController(ILogger<VisualizationController> logger) :
|
|||||||
/// <response code="404">Unable to find season in provided series.</response>
|
/// <response code="404">Unable to find season in provided series.</response>
|
||||||
/// <returns>No content.</returns>
|
/// <returns>No content.</returns>
|
||||||
[HttpDelete("Show/{SeriesId}/{SeasonId}")]
|
[HttpDelete("Show/{SeriesId}/{SeasonId}")]
|
||||||
public ActionResult EraseSeason([FromRoute] Guid seriesId, [FromRoute] Guid seasonId, [FromQuery] bool eraseCache = false)
|
public async Task<ActionResult> EraseSeason([FromRoute] Guid seriesId, [FromRoute] Guid seasonId, [FromQuery] bool eraseCache = false)
|
||||||
{
|
{
|
||||||
var episodes = Plugin.Instance!.QueuedMediaItems
|
var episodes = Plugin.Instance!.QueuedMediaItems
|
||||||
.Where(kvp => kvp.Key == seasonId)
|
.Where(kvp => kvp.Key == seasonId)
|
||||||
@ -207,6 +212,12 @@ public class VisualizationController(ILogger<VisualizationController> logger) :
|
|||||||
|
|
||||||
Plugin.Instance!.SaveTimestamps(AnalysisMode.Introduction | AnalysisMode.Credits);
|
Plugin.Instance!.SaveTimestamps(AnalysisMode.Introduction | AnalysisMode.Credits);
|
||||||
|
|
||||||
|
if (Plugin.Instance.Configuration.UpdateMediaSegments)
|
||||||
|
{
|
||||||
|
using var ct = new CancellationTokenSource();
|
||||||
|
await _mediaSegmentUpdateManager.UpdateMediaSegmentsAsync(episodes, ct.Token).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
return NoContent();
|
return NoContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user