diff options
| author | Ivan Kara <ivanjuan222@gmail.com> | 2026-06-08 17:50:31 +0700 |
|---|---|---|
| committer | Ivan Kara <ivanjuan222@gmail.com> | 2026-06-08 20:00:22 +0700 |
| commit | 0a0060c9ca816df5dbf68a4b7f4d7ef5edad974e (patch) | |
| tree | 0092382107eccff121cb970a5085559968fcd854 | |
| parent | 8b002e3fca98a9ccb368022678e76026f4c2f10d (diff) | |
Assign correct season id and name to new episodes
| -rw-r--r-- | MediaBrowser.Providers/TV/SeriesMetadataService.cs | 25 |
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) |
