diff options
Diffstat (limited to 'MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs')
| -rw-r--r-- | MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs | 86 |
1 files changed, 60 insertions, 26 deletions
diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs index d55a42d11..7ac48655a 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; @@ -12,9 +13,11 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using MediaBrowser.Model.MediaInfo; +using MediaBrowser.Model.Serialization; using System; using System.Threading; using System.Threading.Tasks; +using System.Linq; namespace MediaBrowser.Providers.MediaInfo { @@ -27,7 +30,8 @@ namespace MediaBrowser.Providers.MediaInfo ICustomMetadataProvider<Trailer>, ICustomMetadataProvider<Video>, ICustomMetadataProvider<Audio>, - IHasChangeMonitor + IHasChangeMonitor, + IHasOrder { private readonly ILogger _logger; private readonly IIsoManager _isoManager; @@ -35,58 +39,60 @@ namespace MediaBrowser.Providers.MediaInfo private readonly IItemRepository _itemRepo; private readonly IBlurayExaminer _blurayExaminer; private readonly ILocalizationManager _localization; + private readonly IApplicationPaths _appPaths; + private readonly IJsonSerializer _json; public string Name { get { return "ffprobe"; } } - public Task<ItemUpdateType> FetchAsync(Episode item, CancellationToken cancellationToken) + public Task<ItemUpdateType> FetchAsync(Episode item, IDirectoryService directoryService, CancellationToken cancellationToken) { - return FetchVideoInfo(item, cancellationToken); + return FetchVideoInfo(item, directoryService, cancellationToken); } - public Task<ItemUpdateType> FetchAsync(MusicVideo item, CancellationToken cancellationToken) + public Task<ItemUpdateType> FetchAsync(MusicVideo item, IDirectoryService directoryService, CancellationToken cancellationToken) { - return FetchVideoInfo(item, cancellationToken); + return FetchVideoInfo(item, directoryService, cancellationToken); } - public Task<ItemUpdateType> FetchAsync(Movie item, CancellationToken cancellationToken) + public Task<ItemUpdateType> FetchAsync(Movie item, IDirectoryService directoryService, CancellationToken cancellationToken) { - return FetchVideoInfo(item, cancellationToken); + return FetchVideoInfo(item, directoryService, cancellationToken); } - public Task<ItemUpdateType> FetchAsync(AdultVideo item, CancellationToken cancellationToken) + public Task<ItemUpdateType> FetchAsync(AdultVideo item, IDirectoryService directoryService, CancellationToken cancellationToken) { - return FetchVideoInfo(item, cancellationToken); + return FetchVideoInfo(item, directoryService, cancellationToken); } - public Task<ItemUpdateType> FetchAsync(LiveTvVideoRecording item, CancellationToken cancellationToken) + public Task<ItemUpdateType> FetchAsync(LiveTvVideoRecording item, IDirectoryService directoryService, CancellationToken cancellationToken) { - return FetchVideoInfo(item, cancellationToken); + return FetchVideoInfo(item, directoryService, cancellationToken); } - public Task<ItemUpdateType> FetchAsync(Trailer item, CancellationToken cancellationToken) + public Task<ItemUpdateType> FetchAsync(Trailer item, IDirectoryService directoryService, CancellationToken cancellationToken) { - return FetchVideoInfo(item, cancellationToken); + return FetchVideoInfo(item, directoryService, cancellationToken); } - public Task<ItemUpdateType> FetchAsync(Video item, CancellationToken cancellationToken) + public Task<ItemUpdateType> FetchAsync(Video item, IDirectoryService directoryService, CancellationToken cancellationToken) { - return FetchVideoInfo(item, cancellationToken); + return FetchVideoInfo(item, directoryService, cancellationToken); } - public Task<ItemUpdateType> FetchAsync(Audio item, CancellationToken cancellationToken) + public Task<ItemUpdateType> FetchAsync(Audio item, IDirectoryService directoryService, CancellationToken cancellationToken) { return FetchAudioInfo(item, cancellationToken); } - public Task<ItemUpdateType> FetchAsync(LiveTvAudioRecording item, CancellationToken cancellationToken) + public Task<ItemUpdateType> FetchAsync(LiveTvAudioRecording item, IDirectoryService directoryService, CancellationToken cancellationToken) { return FetchAudioInfo(item, cancellationToken); } - public FFProbeProvider(ILogger logger, IIsoManager isoManager, IMediaEncoder mediaEncoder, IItemRepository itemRepo, IBlurayExaminer blurayExaminer, ILocalizationManager localization) + public FFProbeProvider(ILogger logger, IIsoManager isoManager, IMediaEncoder mediaEncoder, IItemRepository itemRepo, IBlurayExaminer blurayExaminer, ILocalizationManager localization, IApplicationPaths appPaths, IJsonSerializer json) { _logger = logger; _isoManager = isoManager; @@ -94,10 +100,12 @@ namespace MediaBrowser.Providers.MediaInfo _itemRepo = itemRepo; _blurayExaminer = blurayExaminer; _localization = localization; + _appPaths = appPaths; + _json = json; } - private readonly Task<ItemUpdateType> _cachedTask = Task.FromResult(ItemUpdateType.Unspecified); - public Task<ItemUpdateType> FetchVideoInfo<T>(T item, CancellationToken cancellationToken) + private readonly Task<ItemUpdateType> _cachedTask = Task.FromResult(ItemUpdateType.None); + public Task<ItemUpdateType> FetchVideoInfo<T>(T item, IDirectoryService directoryService, CancellationToken cancellationToken) where T : Video { if (item.LocationType != LocationType.FileSystem) @@ -115,9 +123,9 @@ namespace MediaBrowser.Providers.MediaInfo return _cachedTask; } - var prober = new FFProbeVideoInfo(_logger, _isoManager, _mediaEncoder, _itemRepo, _blurayExaminer, _localization); + var prober = new FFProbeVideoInfo(_logger, _isoManager, _mediaEncoder, _itemRepo, _blurayExaminer, _localization, _appPaths, _json); - return prober.ProbeVideo(item, cancellationToken); + return prober.ProbeVideo(item, directoryService, cancellationToken); } public Task<ItemUpdateType> FetchAudioInfo<T>(T item, CancellationToken cancellationToken) @@ -128,14 +136,40 @@ namespace MediaBrowser.Providers.MediaInfo return _cachedTask; } - var prober = new FFProbeAudioInfo(_mediaEncoder, _itemRepo); + var prober = new FFProbeAudioInfo(_mediaEncoder, _itemRepo, _appPaths, _json); return prober.Probe(item, cancellationToken); } - public bool HasChanged(IHasMetadata item, DateTime date) + public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date) { - return item.DateModified > date; + if (item.DateModified > date) + { + return true; + } + + if (item.SupportsLocalMetadata) + { + var video = item as Video; + + if (video != null) + { + var prober = new FFProbeVideoInfo(_logger, _isoManager, _mediaEncoder, _itemRepo, _blurayExaminer, _localization, _appPaths, _json); + + return !video.SubtitleFiles.SequenceEqual(prober.GetSubtitleFiles(video, directoryService).Select(i => i.FullName).OrderBy(i => i), StringComparer.OrdinalIgnoreCase); + } + } + + return false; + } + + public int Order + { + get + { + // Run last + return 100; + } } } } |
