Fix season names

pull/11647/head
Shadowghost 3 weeks ago
parent f396a95f05
commit 48228430c0

@ -83,7 +83,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV
var seasonNumber = season.IndexNumber.Value;
if (string.IsNullOrEmpty(season.Name))
{
var seasonNames = series.SeasonNames;
var seasonNames = series.GetSeasonNames();
if (seasonNames.TryGetValue(seasonNumber, out var seasonName))
{
season.Name = seasonName;

@ -25,19 +25,18 @@ namespace MediaBrowser.Controller.Entities.TV
/// </summary>
public class Series : Folder, IHasTrailers, IHasDisplayOrder, IHasLookupInfo<SeriesInfo>, IMetadataContainer
{
private readonly Dictionary<int, string> _seasonNames;
public Series()
{
AirDays = Array.Empty<DayOfWeek>();
SeasonNames = new Dictionary<int, string>();
_seasonNames = new Dictionary<int, string>();
}
public DayOfWeek[] AirDays { get; set; }
public string AirTime { get; set; }
[JsonIgnore]
public Dictionary<int, string> SeasonNames { get; set; }
[JsonIgnore]
public override bool SupportsAddingToPlaylist => true;
@ -213,6 +212,24 @@ namespace MediaBrowser.Controller.Entities.TV
return LibraryManager.GetItemList(query);
}
public Dictionary<int, string> GetSeasonNames()
{
if (_seasonNames.Count > 0)
{
return _seasonNames;
}
return Children.OfType<Season>()
.Where(s => s.IndexNumber.HasValue)
.DistinctBy(s => s.IndexNumber)
.ToDictionary(s => s.IndexNumber.Value, s => s.Name);
}
public void SetSeasonName(int index, string name)
{
_seasonNames[index] = name;
}
private void SetSeasonQueryOptions(InternalItemsQuery query, User user)
{
var seriesKey = GetUniqueSeriesKey(this);

@ -88,18 +88,17 @@ namespace MediaBrowser.Providers.TV
var sourceItem = source.Item;
var targetItem = target.Item;
var sourceSeasonNames = sourceItem.SeasonNames;
var targetSeasonNames = targetItem.SeasonNames;
var sourceSeasonNames = sourceItem.GetSeasonNames();
var targetSeasonNames = targetItem.GetSeasonNames();
if (replaceData || targetSeasonNames.Count == 0)
{
targetItem.SeasonNames = sourceSeasonNames;
}
else if (targetSeasonNames.Count != sourceSeasonNames.Count || !sourceSeasonNames.Keys.All(targetSeasonNames.ContainsKey))
if (replaceData
|| targetSeasonNames.Count == 0
|| targetSeasonNames.Count != sourceSeasonNames.Count
|| !sourceSeasonNames.Keys.All(targetSeasonNames.ContainsKey))
{
foreach (var (number, name) in sourceSeasonNames)
{
targetSeasonNames.TryAdd(number, name);
target.Item.SetSeasonName(number, name);
}
}
@ -221,7 +220,7 @@ namespace MediaBrowser.Providers.TV
/// <returns>The async task.</returns>
private async Task UpdateAndCreateSeasonsAsync(Series series, CancellationToken cancellationToken)
{
var seasonNames = series.SeasonNames;
var seasonNames = series.GetSeasonNames();
var seriesChildren = series.GetRecursiveChildren(i => i is Episode || i is Season);
var seasons = seriesChildren.OfType<Season>().ToList();
var uniqueSeasonNumbers = seriesChildren

@ -107,7 +107,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
if (!string.IsNullOrWhiteSpace(name) && parsed)
{
item.SeasonNames[seasonNumber] = name;
item.SetSeasonName(seasonNumber, name);
}
break;

Loading…
Cancel
Save