using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.MediaSegments; using MediaBrowser.Controller.Trickplay; namespace Emby.Server.Implementations.Library; /// /// IExternalDataManager implementation. /// public class ExternalDataManager : IExternalDataManager { private readonly IKeyframeManager _keyframeManager; private readonly IMediaSegmentManager _mediaSegmentManager; private readonly IPathManager _pathManager; private readonly ITrickplayManager _trickplayManager; /// /// Initializes a new instance of the class. /// /// The keyframe manager. /// The media segment manager. /// The path manager. /// The trickplay manager. public ExternalDataManager( IKeyframeManager keyframeManager, IMediaSegmentManager mediaSegmentManager, IPathManager pathManager, ITrickplayManager trickplayManager) { _keyframeManager = keyframeManager; _mediaSegmentManager = mediaSegmentManager; _pathManager = pathManager; _trickplayManager = trickplayManager; } /// public async Task DeleteExternalItemDataAsync(BaseItem item, CancellationToken cancellationToken) { var validPaths = _pathManager.GetExtractedDataPaths(item).Where(Directory.Exists).ToList(); var itemId = item.Id; if (validPaths.Count > 0) { foreach (var path in validPaths) { Directory.Delete(path, true); } } await _keyframeManager.DeleteKeyframeDataAsync(itemId, cancellationToken).ConfigureAwait(false); await _mediaSegmentManager.DeleteSegmentsAsync(itemId, cancellationToken).ConfigureAwait(false); await _trickplayManager.DeleteTrickplayDataAsync(itemId, cancellationToken).ConfigureAwait(false); } }