< Summary - Jellyfin

Information
Class: Emby.Server.Implementations.Library.ExternalDataManager
Assembly: Emby.Server.Implementations
File(s): /srv/git/jellyfin/Emby.Server.Implementations/Library/ExternalDataManager.cs
Line coverage
100%
Covered lines: 6
Uncovered lines: 0
Coverable lines: 6
Total lines: 71
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%

File(s)

/srv/git/jellyfin/Emby.Server.Implementations/Library/ExternalDataManager.cs

#LineLine coverage
 1using System;
 2using System.IO;
 3using System.Linq;
 4using System.Threading;
 5using System.Threading.Tasks;
 6using MediaBrowser.Controller.Entities;
 7using MediaBrowser.Controller.IO;
 8using MediaBrowser.Controller.MediaSegments;
 9using MediaBrowser.Controller.Trickplay;
 10using Microsoft.Extensions.Logging;
 11
 12namespace Emby.Server.Implementations.Library;
 13
 14/// <summary>
 15/// IExternalDataManager implementation.
 16/// </summary>
 17public class ExternalDataManager : IExternalDataManager
 18{
 19    private readonly IKeyframeManager _keyframeManager;
 20    private readonly IMediaSegmentManager _mediaSegmentManager;
 21    private readonly IPathManager _pathManager;
 22    private readonly ITrickplayManager _trickplayManager;
 23    private readonly ILogger<ExternalDataManager> _logger;
 24
 25    /// <summary>
 26    /// Initializes a new instance of the <see cref="ExternalDataManager"/> class.
 27    /// </summary>
 28    /// <param name="keyframeManager">The keyframe manager.</param>
 29    /// <param name="mediaSegmentManager">The media segment manager.</param>
 30    /// <param name="pathManager">The path manager.</param>
 31    /// <param name="trickplayManager">The trickplay manager.</param>
 32    /// <param name="logger">The logger.</param>
 33    public ExternalDataManager(
 34        IKeyframeManager keyframeManager,
 35        IMediaSegmentManager mediaSegmentManager,
 36        IPathManager pathManager,
 37        ITrickplayManager trickplayManager,
 38        ILogger<ExternalDataManager> logger)
 39    {
 2140        _keyframeManager = keyframeManager;
 2141        _mediaSegmentManager = mediaSegmentManager;
 2142        _pathManager = pathManager;
 2143        _trickplayManager = trickplayManager;
 2144        _logger = logger;
 2145    }
 46
 47    /// <inheritdoc/>
 48    public async Task DeleteExternalItemDataAsync(BaseItem item, CancellationToken cancellationToken)
 49    {
 50        var validPaths = _pathManager.GetExtractedDataPaths(item).Where(Directory.Exists).ToList();
 51        var itemId = item.Id;
 52        if (validPaths.Count > 0)
 53        {
 54            foreach (var path in validPaths)
 55            {
 56                try
 57                {
 58                    Directory.Delete(path, true);
 59                }
 60                catch (Exception ex)
 61                {
 62                    _logger.LogWarning("Unable to prune external item data at {Path}: {Exception}", path, ex);
 63                }
 64            }
 65        }
 66
 67        await _keyframeManager.DeleteKeyframeDataAsync(itemId, cancellationToken).ConfigureAwait(false);
 68        await _mediaSegmentManager.DeleteSegmentsAsync(itemId, cancellationToken).ConfigureAwait(false);
 69        await _trickplayManager.DeleteTrickplayDataAsync(itemId, cancellationToken).ConfigureAwait(false);
 70    }
 71}