aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBond-009 <bond.009@outlook.com>2026-06-13 21:43:56 +0200
committerGitHub <noreply@github.com>2026-06-13 21:43:56 +0200
commitdb89b4975242c4b96f567446ad83ead9200e7940 (patch)
treeee6513a9980cddf798bb1a8f50206edfbac8426b
parent21efb55db6aedfa519247344a070cf50b6e3c167 (diff)
parent0a0060c9ca816df5dbf68a4b7f4d7ef5edad974e (diff)
Merge pull request #17051 from ivanjx/hydrate-eps
Assign correct season info to new episodes
-rw-r--r--MediaBrowser.Providers/TV/SeriesMetadataService.cs25
1 files changed, 22 insertions, 3 deletions
diff --git a/MediaBrowser.Providers/TV/SeriesMetadataService.cs b/MediaBrowser.Providers/TV/SeriesMetadataService.cs
index 078c396730..02040653d1 100644
--- a/MediaBrowser.Providers/TV/SeriesMetadataService.cs
+++ b/MediaBrowser.Providers/TV/SeriesMetadataService.cs
@@ -236,6 +236,7 @@ public class SeriesMetadataService : MetadataService<Series, SeriesInfo>
{
var seriesChildren = series.GetRecursiveChildren(i => i is Episode || i is Season);
var seasons = seriesChildren.OfType<Season>().ToList();
+ var episodes = seriesChildren.OfType<Episode>().ToList();
var physicalSeasonIds = seasons
.Where(e => e.LocationType != LocationType.Virtual)
@@ -261,11 +262,12 @@ public class SeriesMetadataService : MetadataService<Series, SeriesInfo>
if (existingSeason is null)
{
var seasonName = GetValidSeasonNameForSeries(series, null, seasonNumber);
- await CreateSeasonAsync(series, seasonName, seasonNumber, cancellationToken).ConfigureAwait(false);
+ var season = await CreateSeasonAsync(series, seasonName, seasonNumber, cancellationToken).ConfigureAwait(false);
+ seasons.Add(season);
}
else if (existingSeason.IsVirtualItem)
{
- var episodeCount = seriesChildren.OfType<Episode>().Count(e => e.ParentIndexNumber == seasonNumber && !e.IsMissingEpisode);
+ var episodeCount = episodes.Count(e => e.ParentIndexNumber == seasonNumber && !e.IsMissingEpisode);
if (episodeCount > 0)
{
existingSeason.IsVirtualItem = false;
@@ -273,6 +275,21 @@ public class SeriesMetadataService : MetadataService<Series, SeriesInfo>
}
}
}
+
+ // Loop through episodes
+ foreach (var episode in episodes)
+ {
+ var season = seasons.FirstOrDefault(i => i.IndexNumber == episode.ParentIndexNumber);
+ if (season is null || episode.SeasonId.Equals(season.Id))
+ {
+ continue;
+ }
+
+ // Assign the correct season id and name to episode.
+ episode.SeasonId = season.Id;
+ episode.SeasonName = season.Name;
+ await episode.UpdateToRepositoryAsync(ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false);
+ }
}
/// <summary>
@@ -283,7 +300,7 @@ public class SeriesMetadataService : MetadataService<Series, SeriesInfo>
/// <param name="seasonNumber">The season number.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>The newly created season.</returns>
- private async Task CreateSeasonAsync(
+ private async Task<Season> CreateSeasonAsync(
Series series,
string? seasonName,
int? seasonNumber,
@@ -306,6 +323,8 @@ public class SeriesMetadataService : MetadataService<Series, SeriesInfo>
series.AddChild(season);
await season.RefreshMetadata(new MetadataRefreshOptions(new DirectoryService(FileSystem)), cancellationToken).ConfigureAwait(false);
+
+ return season;
}
private string GetValidSeasonNameForSeries(Series series, string? seasonName, int? seasonNumber)