diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-25 01:17:32 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-25 01:17:32 -0400 |
| commit | 6611b53606c9e96124cf8674b160c0a984147204 (patch) | |
| tree | 57dd47a8a478f068aa2b4f9f37b959409033404d /MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs | |
| parent | 3b5f0a3058b08a5357c6df1cf9ec39259f95e54e (diff) | |
don't try to keep extracting images that fail
Diffstat (limited to 'MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs index 4178d4f8b..95dc4e7ae 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs @@ -4,12 +4,14 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Serialization; +using MoreLinq; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; -using MoreLinq; namespace MediaBrowser.Server.Implementations.ScheduledTasks { @@ -18,6 +20,8 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks /// </summary> class ChapterImagesTask : IScheduledTask { + private readonly IJsonSerializer _jsonSerializer; + /// <summary> /// The _kernel /// </summary> @@ -40,18 +44,20 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks /// </summary> /// <value>The new item timer.</value> private Timer NewItemTimer { get; set; } - + /// <summary> /// Initializes a new instance of the <see cref="ChapterImagesTask" /> class. /// </summary> /// <param name="kernel">The kernel.</param> /// <param name="logManager">The log manager.</param> /// <param name="libraryManager">The library manager.</param> - public ChapterImagesTask(Kernel kernel, ILogManager logManager, ILibraryManager libraryManager) + /// <param name="jsonSerializer">The json serializer.</param> + public ChapterImagesTask(Kernel kernel, ILogManager logManager, ILibraryManager libraryManager, IJsonSerializer jsonSerializer) { _kernel = kernel; _logger = logManager.GetLogger(GetType().Name); _libraryManager = libraryManager; + _jsonSerializer = jsonSerializer; libraryManager.ItemAdded += libraryManager_ItemAdded; libraryManager.ItemUpdated += libraryManager_ItemAdded; @@ -93,8 +99,9 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks NewItemTimer = null; } + // Limit to video files to reduce changes of ffmpeg crash dialog foreach (var item in newItems - .Where(i => i.LocationType == LocationType.FileSystem && string.IsNullOrEmpty(i.PrimaryImagePath) && i.MediaStreams.Any(m => m.Type == MediaStreamType.Video)) + .Where(i => i.LocationType == LocationType.FileSystem && i.VideoType == VideoType.VideoFile && string.IsNullOrEmpty(i.PrimaryImagePath) && i.MediaStreams.Any(m => m.Type == MediaStreamType.Video)) .Take(1)) { try @@ -135,11 +142,34 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks var numComplete = 0; + var failHistoryPath = Path.Combine(_kernel.FFMpegManager.VideoImagesDataPath, "failures.json"); + + List<string> previouslyFailedImages; + + try + { + previouslyFailedImages = _jsonSerializer.DeserializeFromFile<List<string>>(failHistoryPath); + } + catch (FileNotFoundException) + { + previouslyFailedImages = new List<string>(); + } + foreach (var video in videos) { cancellationToken.ThrowIfCancellationRequested(); - await _kernel.FFMpegManager.PopulateChapterImages(video, cancellationToken, true, true); + var key = video.Path + video.DateModified.Ticks; + + var extract = !previouslyFailedImages.Contains(key, StringComparer.OrdinalIgnoreCase); + + var success = await _kernel.FFMpegManager.PopulateChapterImages(video, cancellationToken, extract, true); + + if (!success) + { + previouslyFailedImages.Add(key); + _jsonSerializer.SerializeToFile(previouslyFailedImages, failHistoryPath); + } numComplete++; double percent = numComplete; |
