mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-14 03:30:25 +01:00
Assign correct season id and name to new episodes
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user