From 8a22db39b35112c49cded8c127a9721c89a1bad3 Mon Sep 17 00:00:00 2001
From: ConfusedPolarBear <33811686+ConfusedPolarBear@users.noreply.github.com>
Date: Mon, 10 Oct 2022 02:05:15 -0500
Subject: [PATCH] Only analyze seasons with >= 1 unanalyzed episode
---
.../ScheduledTasks/AnalyzeEpisodesTask.cs | 29 ++++++++++++++++---
1 file changed, 25 insertions(+), 4 deletions(-)
diff --git a/ConfusedPolarBear.Plugin.IntroSkipper/ScheduledTasks/AnalyzeEpisodesTask.cs b/ConfusedPolarBear.Plugin.IntroSkipper/ScheduledTasks/AnalyzeEpisodesTask.cs
index 6f40ec3..467b278 100644
--- a/ConfusedPolarBear.Plugin.IntroSkipper/ScheduledTasks/AnalyzeEpisodesTask.cs
+++ b/ConfusedPolarBear.Plugin.IntroSkipper/ScheduledTasks/AnalyzeEpisodesTask.cs
@@ -139,7 +139,7 @@ public class AnalyzeEpisodesTask : IScheduledTask
// Analyze all episodes in the queue using the degrees of parallelism the user specified.
Parallel.ForEach(queue, options, (season) =>
{
- var episodes = VerifyEpisodes(season.Value.AsReadOnly());
+ var (episodes, unanalyzed) = VerifyEpisodes(season.Value.AsReadOnly());
if (episodes.Count == 0)
{
return;
@@ -148,6 +148,16 @@ public class AnalyzeEpisodesTask : IScheduledTask
var first = episodes[0];
var writeEdl = false;
+ if (!unanalyzed)
+ {
+ _logger.LogDebug(
+ "All episodes in {Name} season {Season} have already been analyzed",
+ first.SeriesName,
+ first.SeasonNumber);
+
+ return;
+ }
+
try
{
if (cancellationToken.IsCancellationRequested)
@@ -201,21 +211,32 @@ public class AnalyzeEpisodesTask : IScheduledTask
/// Verify that all episodes in a season exist in Jellyfin and as a file in storage.
///
/// QueuedEpisodes.
- /// Verified QueuedEpisodes.
- private ReadOnlyCollection VerifyEpisodes(ReadOnlyCollection candidates)
+ /// Verified QueuedEpisodes and a flag indicating if any episode in this season has not been analyzed yet.
+ private (
+ ReadOnlyCollection VerifiedEpisodes,
+ bool AnyUnanalyzed)
+ VerifyEpisodes(ReadOnlyCollection candidates)
{
+ var unanalyzed = false;
var verified = new List();
foreach (var candidate in candidates)
{
try
{
+ // Verify that the episode exists in Jellyfin and in storage
var path = Plugin.Instance!.GetItemPath(candidate.EpisodeId);
if (File.Exists(path))
{
verified.Add(candidate);
}
+
+ // Flag this season for analysis if the current episode hasn't been analyzed yet
+ if (!Plugin.Instance.Intros.ContainsKey(candidate.EpisodeId))
+ {
+ unanalyzed = true;
+ }
}
catch (Exception ex)
{
@@ -227,7 +248,7 @@ public class AnalyzeEpisodesTask : IScheduledTask
}
}
- return verified.AsReadOnly();
+ return (verified.AsReadOnly(), unanalyzed);
}
///