af1152b001
Refactored all C# test files to use explicit namespace declarations and moved all using directives inside the namespace block for consistency. Updated assembly info and cache files to reflect the new build. Adjusted MvcTestingAppManifest.json to use fully qualified assembly names. No functional changes; all updates are related to code style, organization, and project metadata.
124 lines
4.3 KiB
C#
124 lines
4.3 KiB
C#
// <copyright file="TrickplayMoveImagesTask.cs" company="PlaceholderCompany">
|
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
|
// </copyright>
|
|
|
|
namespace MediaBrowser.Providers.Trickplay;
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Jellyfin.Data.Enums;
|
|
using MediaBrowser.Controller.Entities;
|
|
using MediaBrowser.Controller.Library;
|
|
using MediaBrowser.Controller.Trickplay;
|
|
using MediaBrowser.Model.Globalization;
|
|
using MediaBrowser.Model.Tasks;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
/// <summary>
|
|
/// Class TrickplayMoveImagesTask.
|
|
/// </summary>
|
|
public class TrickplayMoveImagesTask : IScheduledTask
|
|
{
|
|
private readonly ILogger<TrickplayMoveImagesTask> _logger;
|
|
private readonly ILibraryManager _libraryManager;
|
|
private readonly ILocalizationManager _localization;
|
|
private readonly ITrickplayManager _trickplayManager;
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="TrickplayMoveImagesTask"/> class.
|
|
/// </summary>
|
|
/// <param name="logger">The logger.</param>
|
|
/// <param name="libraryManager">The library manager.</param>
|
|
/// <param name="localization">The localization manager.</param>
|
|
/// <param name="trickplayManager">The trickplay manager.</param>
|
|
public TrickplayMoveImagesTask(
|
|
ILogger<TrickplayMoveImagesTask> logger,
|
|
ILibraryManager libraryManager,
|
|
ILocalizationManager localization,
|
|
ITrickplayManager trickplayManager)
|
|
{
|
|
_libraryManager = libraryManager;
|
|
_logger = logger;
|
|
_localization = localization;
|
|
_trickplayManager = trickplayManager;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public string Name => _localization.GetLocalizedString("TaskMoveTrickplayImages");
|
|
|
|
/// <inheritdoc />
|
|
public string Description => _localization.GetLocalizedString("TaskMoveTrickplayImagesDescription");
|
|
|
|
/// <inheritdoc />
|
|
public string Key => "MoveTrickplayImages";
|
|
|
|
/// <inheritdoc />
|
|
public string Category => _localization.GetLocalizedString("TasksMaintenanceCategory");
|
|
|
|
/// <inheritdoc />
|
|
public IEnumerable<TaskTriggerInfo> GetDefaultTriggers() => [];
|
|
|
|
/// <inheritdoc />
|
|
public async Task ExecuteAsync(IProgress<double> progress, CancellationToken cancellationToken)
|
|
{
|
|
const int Limit = 100;
|
|
int itemCount = 0, offset = 0, previousCount;
|
|
|
|
// This count may not be accurate, but just get something to show progress on the dashboard.
|
|
var totalVideoCount = _libraryManager.GetCount(new InternalItemsQuery
|
|
{
|
|
MediaTypes = [MediaType.Video],
|
|
SourceTypes = [SourceType.Library],
|
|
IsVirtualItem = false,
|
|
IsFolder = false,
|
|
Recursive = true
|
|
});
|
|
|
|
var trickplayQuery = new InternalItemsQuery
|
|
{
|
|
MediaTypes = [MediaType.Video],
|
|
SourceTypes = [SourceType.Library],
|
|
IsVirtualItem = false,
|
|
IsFolder = false
|
|
};
|
|
|
|
do
|
|
{
|
|
var trickplayInfos = await _trickplayManager.GetTrickplayItemsAsync(Limit, offset).ConfigureAwait(false);
|
|
previousCount = trickplayInfos.Count;
|
|
offset += Limit;
|
|
|
|
trickplayQuery.ItemIds = trickplayInfos.Select(i => i.ItemId).Distinct().ToArray();
|
|
var items = _libraryManager.GetItemList(trickplayQuery);
|
|
foreach (var trickplayInfo in trickplayInfos)
|
|
{
|
|
cancellationToken.ThrowIfCancellationRequested();
|
|
|
|
var video = items.OfType<Video>().FirstOrDefault(i => i.Id.Equals(trickplayInfo.ItemId));
|
|
if (video is null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
itemCount++;
|
|
try
|
|
{
|
|
var libraryOptions = _libraryManager.GetLibraryOptions(video);
|
|
await _trickplayManager.MoveGeneratedTrickplayDataAsync(video, libraryOptions, cancellationToken).ConfigureAwait(false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Error moving trickplay files for {ItemName}", video.Name);
|
|
}
|
|
}
|
|
|
|
progress.Report(100d * itemCount / totalVideoCount);
|
|
} while (previousCount == Limit);
|
|
|
|
progress.Report(100);
|
|
}
|
|
}
|