aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs')
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs86
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;
+ }
}
}
}