When a scan is already running, append it

This commit is contained in:
TwistedUmbrellaX 2024-04-14 09:50:56 -04:00
parent b1e94bd24c
commit 3096f3fe6a
5 changed files with 31 additions and 26 deletions

View File

@ -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;
/// <summary>
/// Initializes a new instance of the <see cref="Entrypoint"/> class.
@ -56,6 +57,10 @@ public class Entrypoint : IServerEntryPoint
null,
Timeout.InfiniteTimeSpan,
Timeout.InfiniteTimeSpan);
_queueManager = new QueueManager(
_loggerFactory.CreateLogger<QueueManager>(),
_libraryManager);
}
/// <summary>
@ -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<QueueManager>(), _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();
}
}
/// <summary>
@ -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();
}
}
/// <summary>

View File

@ -171,7 +171,11 @@ public class QueueManager
_logger.LogDebug("Queued {Count} episodes", items.Count);
}
private void QueueEpisode(Episode episode)
/// <summary>
/// Adds a single episode to the current queue for analyzing.
/// </summary>
/// <param name="episode">The episode to analyze.</param>
public void QueueEpisode(Episode episode)
{
if (Plugin.Instance is null)
{

View File

@ -74,11 +74,6 @@ public class DetectCreditsTask : IScheduledTask
{
return Task.CompletedTask;
}
else if (Plugin.Instance!.AnalyzerTaskIsRunning && Entrypoint.AutomaticTaskState == TaskState.Running)
{
_logger.LogInformation("Automatic Task is {0} and will be canceled.", Entrypoint.AutomaticTaskState);
Entrypoint.CancelAutomaticTask();
}
_logger.LogInformation("Scheduled Task is starting");
Plugin.Instance!.AnalyzerTaskIsRunning = true;

View File

@ -73,11 +73,6 @@ public class DetectIntrosCreditsTask : IScheduledTask
{
return Task.CompletedTask;
}
else if (Plugin.Instance!.AnalyzerTaskIsRunning && Entrypoint.AutomaticTaskState == TaskState.Running)
{
_logger.LogInformation("Automatic Task is {0} and will be canceled.", Entrypoint.AutomaticTaskState);
Entrypoint.CancelAutomaticTask();
}
_logger.LogInformation("Scheduled Task is starting");
Plugin.Instance!.AnalyzerTaskIsRunning = true;

View File

@ -73,11 +73,6 @@ public class DetectIntrosTask : IScheduledTask
{
return Task.CompletedTask;
}
else if (Plugin.Instance!.AnalyzerTaskIsRunning && Entrypoint.AutomaticTaskState == TaskState.Running)
{
_logger.LogInformation("Automatic Task is {0} and will be canceled.", Entrypoint.AutomaticTaskState);
Entrypoint.CancelAutomaticTask();
}
_logger.LogInformation("Scheduled Task is starting");
Plugin.Instance!.AnalyzerTaskIsRunning = true;