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); } ///