using System; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Library; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace ConfusedPolarBear.Plugin.IntroSkipper; /// /// Server entrypoint. /// public class Entrypoint : IHostedService { private readonly IUserManager _userManager; private readonly IUserViewManager _userViewManager; private readonly ILibraryManager _libraryManager; private readonly ILogger _logger; private readonly ILoggerFactory _loggerFactory; /// /// Initializes a new instance of the class. /// /// User manager. /// User view manager. /// Library manager. /// Logger. /// Logger factory. public Entrypoint( IUserManager userManager, IUserViewManager userViewManager, ILibraryManager libraryManager, ILogger logger, ILoggerFactory loggerFactory) { _userManager = userManager; _userViewManager = userViewManager; _libraryManager = libraryManager; _logger = logger; _loggerFactory = loggerFactory; } /// /// Dispose. /// public void Dispose() { Dispose(true); } /// /// Protected dispose. /// /// Dispose. protected virtual void Dispose(bool dispose) { if (!dispose) { return; } } /// public Task StartAsync(CancellationToken cancellationToken) { FFmpegWrapper.Logger = _logger; // TODO: when a new item is added to the server, immediately analyze the season it belongs to // instead of waiting for the next task interval. The task start should be debounced by a few seconds. try { // Enqueue all episodes at startup to ensure any FFmpeg errors appear as early as possible _logger.LogInformation("Running startup enqueue"); var queueManager = new QueueManager(_loggerFactory.CreateLogger(), _libraryManager); queueManager?.GetMediaItems(); } catch (Exception ex) { _logger.LogError("Unable to run startup enqueue: {Exception}", ex); } return Task.CompletedTask; } /// public Task StopAsync(CancellationToken cancellationToken) { return Task.CompletedTask; } }