using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.MediaInfo; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using MediaBrowser.Model.MediaInfo; using System; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Providers.MediaInfo { public class FFProbeProvider : ICustomMetadataProvider, ICustomMetadataProvider, ICustomMetadataProvider, ICustomMetadataProvider, ICustomMetadataProvider, IHasChangeMonitor { private readonly ILogger _logger; private readonly IIsoManager _isoManager; private readonly IMediaEncoder _mediaEncoder; private readonly IItemRepository _itemRepo; private readonly IBlurayExaminer _blurayExaminer; private readonly ILocalizationManager _localization; public string Name { get { return "ffprobe"; } } public Task FetchAsync(Episode item, CancellationToken cancellationToken) { return FetchVideoInfo(item, cancellationToken); } public Task FetchAsync(MusicVideo item, CancellationToken cancellationToken) { return FetchVideoInfo(item, cancellationToken); } public Task FetchAsync(Movie item, CancellationToken cancellationToken) { return FetchVideoInfo(item, cancellationToken); } public Task FetchAsync(AdultVideo item, CancellationToken cancellationToken) { return FetchVideoInfo(item, cancellationToken); } public Task FetchAsync(LiveTvVideoRecording item, CancellationToken cancellationToken) { return FetchVideoInfo(item, cancellationToken); } public FFProbeProvider(ILogger logger, IIsoManager isoManager, IMediaEncoder mediaEncoder, IItemRepository itemRepo, IBlurayExaminer blurayExaminer, ILocalizationManager localization) { _logger = logger; _isoManager = isoManager; _mediaEncoder = mediaEncoder; _itemRepo = itemRepo; _blurayExaminer = blurayExaminer; _localization = localization; } private readonly Task _cachedTask = Task.FromResult(ItemUpdateType.Unspecified); public Task FetchVideoInfo(T item, CancellationToken cancellationToken) where T : Video { if (item.LocationType != LocationType.FileSystem) { return _cachedTask; } if (item.VideoType == VideoType.Iso && !_isoManager.CanMount(item.Path)) { return _cachedTask; } if (item.VideoType == VideoType.HdDvd) { return _cachedTask; } var prober = new FFProbeVideoInfo(_logger, _isoManager, _mediaEncoder, _itemRepo, _blurayExaminer, _localization); return prober.ProbeVideo(item, cancellationToken); } public bool HasChanged(IHasMetadata item, DateTime date) { return item.DateModified > date; } } }