using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; namespace ConfusedPolarBear.Plugin.IntroSkipper; /// <summary> /// Analyze all television episodes for introduction sequences. /// </summary> public class DetectIntroductionsTask : IScheduledTask { private readonly ILoggerFactory _loggerFactory; private readonly ILibraryManager _libraryManager; /// <summary> /// Initializes a new instance of the <see cref="DetectIntroductionsTask"/> class. /// </summary> /// <param name="loggerFactory">Logger factory.</param> /// <param name="libraryManager">Library manager.</param> public DetectIntroductionsTask( ILoggerFactory loggerFactory, ILibraryManager libraryManager) { _loggerFactory = loggerFactory; _libraryManager = libraryManager; } /// <summary> /// Gets the task name. /// </summary> public string Name => "Detect Introductions"; /// <summary> /// Gets the task category. /// </summary> public string Category => "Intro Skipper"; /// <summary> /// Gets the task description. /// </summary> public string Description => "Analyzes the audio of all television episodes to find introduction sequences."; /// <summary> /// Gets the task key. /// </summary> public string Key => "CPBIntroSkipperDetectIntroductions"; /// <summary> /// Analyze all episodes in the queue. Only one instance of this task should be run at a time. /// </summary> /// <param name="progress">Task progress.</param> /// <param name="cancellationToken">Cancellation token.</param> /// <returns>Task.</returns> public Task ExecuteAsync(IProgress<double> progress, CancellationToken cancellationToken) { if (_libraryManager is null) { throw new InvalidOperationException("Library manager was null"); } var baseAnalyzer = new BaseItemAnalyzerTask( AnalysisMode.Introduction, _loggerFactory.CreateLogger<DetectIntroductionsTask>(), _loggerFactory, _libraryManager); baseAnalyzer.AnalyzeItems(progress, cancellationToken); return Task.CompletedTask; } /// <summary> /// Get task triggers. /// </summary> /// <returns>Task triggers.</returns> public IEnumerable<TaskTriggerInfo> GetDefaultTriggers() { return new[] { new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerDaily, TimeOfDayTicks = TimeSpan.FromHours(0).Ticks } }; } }