diff --git a/ConfusedPolarBear.Plugin.IntroSkipper/Entrypoint.cs b/ConfusedPolarBear.Plugin.IntroSkipper/Entrypoint.cs index 97abcc7..245cc8e 100644 --- a/ConfusedPolarBear.Plugin.IntroSkipper/Entrypoint.cs +++ b/ConfusedPolarBear.Plugin.IntroSkipper/Entrypoint.cs @@ -26,6 +26,7 @@ public class Entrypoint : IServerEntryPoint private bool _analyzeAgain; private static CancellationTokenSource? _cancellationTokenSource; private static ManualResetEventSlim _autoTaskCompletEvent = new ManualResetEventSlim(false); + private QueueManager _queueManager; /// /// Initializes a new instance of the class. @@ -56,6 +57,10 @@ public class Entrypoint : IServerEntryPoint null, Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan); + + _queueManager = new QueueManager( + _loggerFactory.CreateLogger(), + _libraryManager); } /// @@ -92,8 +97,7 @@ public class Entrypoint : IServerEntryPoint { // 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(); + _queueManager.GetMediaItems(); } catch (Exception ex) { @@ -121,7 +125,7 @@ public class Entrypoint : IServerEntryPoint } // Don't do anything if it's not a supported media type - if (itemChangeEventArgs.Item is not Episode) + if (itemChangeEventArgs.Item is not Episode episode) { return; } @@ -131,9 +135,15 @@ public class Entrypoint : IServerEntryPoint return; } - Plugin.Instance!.Configuration.PathRestrictions.Add(itemChangeEventArgs.Item.ContainingFolderPath); - - StartTimer(); + if (Plugin.Instance!.AnalyzerTaskIsRunning) + { + _queueManager.QueueEpisode(episode); + } + else + { + Plugin.Instance!.Configuration.PathRestrictions.Add(itemChangeEventArgs.Item.ContainingFolderPath); + StartTimer(); + } } /// @@ -150,7 +160,7 @@ public class Entrypoint : IServerEntryPoint } // Don't do anything if it's not a supported media type - if (itemChangeEventArgs.Item is not Episode) + if (itemChangeEventArgs.Item is not Episode episode) { return; } @@ -160,9 +170,15 @@ public class Entrypoint : IServerEntryPoint return; } - Plugin.Instance!.Configuration.PathRestrictions.Add(itemChangeEventArgs.Item.ContainingFolderPath); - - StartTimer(); + if (Plugin.Instance!.AnalyzerTaskIsRunning) + { + _queueManager.QueueEpisode(episode); + } + else + { + Plugin.Instance!.Configuration.PathRestrictions.Add(itemChangeEventArgs.Item.ContainingFolderPath); + StartTimer(); + } } /// @@ -284,8 +300,8 @@ public class Entrypoint : IServerEntryPoint } } - Plugin.Instance!.AnalyzerTaskIsRunning = false; Plugin.Instance!.Configuration.PathRestrictions.Clear(); + Plugin.Instance!.AnalyzerTaskIsRunning = false; _autoTaskCompletEvent.Set(); // New item detected, start timer again diff --git a/ConfusedPolarBear.Plugin.IntroSkipper/QueueManager.cs b/ConfusedPolarBear.Plugin.IntroSkipper/QueueManager.cs index ccc1d1c..564d631 100644 --- a/ConfusedPolarBear.Plugin.IntroSkipper/QueueManager.cs +++ b/ConfusedPolarBear.Plugin.IntroSkipper/QueueManager.cs @@ -171,7 +171,11 @@ public class QueueManager _logger.LogDebug("Queued {Count} episodes", items.Count); } - private void QueueEpisode(Episode episode) + /// + /// Adds a single episode to the current queue for analyzing. + /// + /// The episode to analyze. + public void QueueEpisode(Episode episode) { if (Plugin.Instance is null) { diff --git a/ConfusedPolarBear.Plugin.IntroSkipper/ScheduledTasks/BaseItemAnalyzerTask.cs b/ConfusedPolarBear.Plugin.IntroSkipper/ScheduledTasks/BaseItemAnalyzerTask.cs index f80f0a4..3eabd6d 100644 --- a/ConfusedPolarBear.Plugin.IntroSkipper/ScheduledTasks/BaseItemAnalyzerTask.cs +++ b/ConfusedPolarBear.Plugin.IntroSkipper/ScheduledTasks/BaseItemAnalyzerTask.cs @@ -146,13 +146,20 @@ public class BaseItemAnalyzerTask EdlManager.UpdateEDLFiles(episodes); } - if (_analysisMode == AnalysisMode.Introduction) + if (_logger is ILogger) { - progress.Report(((totalProcessed * 100) / totalQueued) / 2); + if (_analysisMode == AnalysisMode.Introduction) + { + progress.Report(((totalProcessed * 100) / totalQueued) / 2); + } + else + { + progress.Report((((totalProcessed * 100) / totalQueued) / 2) + 50); + } } else { - progress.Report((((totalProcessed * 100) / totalQueued) / 2) + 50); + progress.Report((totalProcessed * 100) / totalQueued); } });