ChapterImagesTask.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using MediaBrowser.Common.ScheduledTasks;
  2. using MediaBrowser.Controller;
  3. using MediaBrowser.Controller.Entities;
  4. using MediaBrowser.Controller.Library;
  5. using MediaBrowser.Model.Entities;
  6. using MediaBrowser.Model.Logging;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. namespace MediaBrowser.Server.Implementations.ScheduledTasks
  13. {
  14. /// <summary>
  15. /// Class ChapterImagesTask
  16. /// </summary>
  17. class ChapterImagesTask : IScheduledTask
  18. {
  19. /// <summary>
  20. /// The _kernel
  21. /// </summary>
  22. private readonly Kernel _kernel;
  23. /// <summary>
  24. /// The _logger
  25. /// </summary>
  26. private readonly ILogger _logger;
  27. /// <summary>
  28. /// The _library manager
  29. /// </summary>
  30. private readonly ILibraryManager _libraryManager;
  31. /// <summary>
  32. /// Initializes a new instance of the <see cref="ChapterImagesTask" /> class.
  33. /// </summary>
  34. /// <param name="kernel">The kernel.</param>
  35. /// <param name="logger">The logger.</param>
  36. /// <param name="libraryManager">The library manager.</param>
  37. public ChapterImagesTask(Kernel kernel, ILogger logger, ILibraryManager libraryManager)
  38. {
  39. _kernel = kernel;
  40. _logger = logger;
  41. _libraryManager = libraryManager;
  42. }
  43. /// <summary>
  44. /// Creates the triggers that define when the task will run
  45. /// </summary>
  46. /// <returns>IEnumerable{BaseTaskTrigger}.</returns>
  47. public IEnumerable<ITaskTrigger> GetDefaultTriggers()
  48. {
  49. return new ITaskTrigger[]
  50. {
  51. new DailyTrigger { TimeOfDay = TimeSpan.FromHours(4) }
  52. };
  53. }
  54. /// <summary>
  55. /// Returns the task to be executed
  56. /// </summary>
  57. /// <param name="cancellationToken">The cancellation token.</param>
  58. /// <param name="progress">The progress.</param>
  59. /// <returns>Task.</returns>
  60. public async Task Execute(CancellationToken cancellationToken, IProgress<double> progress)
  61. {
  62. var videos = _libraryManager.RootFolder.RecursiveChildren
  63. .OfType<Video>()
  64. .Where(v => v.Chapters != null && v.Chapters.Count != 0)
  65. .ToList();
  66. var numComplete = 0;
  67. foreach (var video in videos)
  68. {
  69. cancellationToken.ThrowIfCancellationRequested();
  70. await _kernel.FFMpegManager.PopulateChapterImages(video, cancellationToken, true, true);
  71. numComplete++;
  72. double percent = numComplete;
  73. percent /= videos.Count;
  74. progress.Report(100 * percent);
  75. }
  76. }
  77. /// <summary>
  78. /// Gets the name of the task
  79. /// </summary>
  80. /// <value>The name.</value>
  81. public string Name
  82. {
  83. get { return "Chapter image extraction"; }
  84. }
  85. /// <summary>
  86. /// Gets the description.
  87. /// </summary>
  88. /// <value>The description.</value>
  89. public string Description
  90. {
  91. get { return "Creates thumbnails for videos that have chapters."; }
  92. }
  93. /// <summary>
  94. /// Gets the category.
  95. /// </summary>
  96. /// <value>The category.</value>
  97. public string Category
  98. {
  99. get
  100. {
  101. return "Library";
  102. }
  103. }
  104. }
  105. }