Only analyze seasons with >= 1 unanalyzed episode
This commit is contained in:
parent
a8b5e2b2c5
commit
8a22db39b3
@ -139,7 +139,7 @@ public class AnalyzeEpisodesTask : IScheduledTask
|
|||||||
// Analyze all episodes in the queue using the degrees of parallelism the user specified.
|
// Analyze all episodes in the queue using the degrees of parallelism the user specified.
|
||||||
Parallel.ForEach(queue, options, (season) =>
|
Parallel.ForEach(queue, options, (season) =>
|
||||||
{
|
{
|
||||||
var episodes = VerifyEpisodes(season.Value.AsReadOnly());
|
var (episodes, unanalyzed) = VerifyEpisodes(season.Value.AsReadOnly());
|
||||||
if (episodes.Count == 0)
|
if (episodes.Count == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -148,6 +148,16 @@ public class AnalyzeEpisodesTask : IScheduledTask
|
|||||||
var first = episodes[0];
|
var first = episodes[0];
|
||||||
var writeEdl = false;
|
var writeEdl = false;
|
||||||
|
|
||||||
|
if (!unanalyzed)
|
||||||
|
{
|
||||||
|
_logger.LogDebug(
|
||||||
|
"All episodes in {Name} season {Season} have already been analyzed",
|
||||||
|
first.SeriesName,
|
||||||
|
first.SeasonNumber);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (cancellationToken.IsCancellationRequested)
|
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.
|
/// Verify that all episodes in a season exist in Jellyfin and as a file in storage.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="candidates">QueuedEpisodes.</param>
|
/// <param name="candidates">QueuedEpisodes.</param>
|
||||||
/// <returns>Verified QueuedEpisodes.</returns>
|
/// <returns>Verified QueuedEpisodes and a flag indicating if any episode in this season has not been analyzed yet.</returns>
|
||||||
private ReadOnlyCollection<QueuedEpisode> VerifyEpisodes(ReadOnlyCollection<QueuedEpisode> candidates)
|
private (
|
||||||
|
ReadOnlyCollection<QueuedEpisode> VerifiedEpisodes,
|
||||||
|
bool AnyUnanalyzed)
|
||||||
|
VerifyEpisodes(ReadOnlyCollection<QueuedEpisode> candidates)
|
||||||
{
|
{
|
||||||
|
var unanalyzed = false;
|
||||||
var verified = new List<QueuedEpisode>();
|
var verified = new List<QueuedEpisode>();
|
||||||
|
|
||||||
foreach (var candidate in candidates)
|
foreach (var candidate in candidates)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// Verify that the episode exists in Jellyfin and in storage
|
||||||
var path = Plugin.Instance!.GetItemPath(candidate.EpisodeId);
|
var path = Plugin.Instance!.GetItemPath(candidate.EpisodeId);
|
||||||
|
|
||||||
if (File.Exists(path))
|
if (File.Exists(path))
|
||||||
{
|
{
|
||||||
verified.Add(candidate);
|
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)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -227,7 +248,7 @@ public class AnalyzeEpisodesTask : IScheduledTask
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return verified.AsReadOnly();
|
return (verified.AsReadOnly(), unanalyzed);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user