Merge pull request #17399 from Shadowghost/fix-extra-year
Fix incorrect year on local trailers
This commit is contained in:
@@ -1546,15 +1546,27 @@ namespace MediaBrowser.Controller.Entities
|
||||
var extras = LibraryManager.FindExtras(item, fileSystemChildren, options.DirectoryService).ToArray();
|
||||
var newExtraIds = Array.ConvertAll(extras, x => x.Id);
|
||||
|
||||
var currentExtraIds = LibraryManager.GetItemList(new InternalItemsQuery()
|
||||
var currentExtras = LibraryManager.GetItemList(new InternalItemsQuery()
|
||||
{
|
||||
OwnerIds = [item.Id]
|
||||
}).Select(e => e.Id).ToArray();
|
||||
});
|
||||
|
||||
var currentExtraIds = currentExtras.Select(e => e.Id).ToArray();
|
||||
|
||||
var extrasChanged = !currentExtraIds.OrderBy(x => x).SequenceEqual(newExtraIds.OrderBy(x => x));
|
||||
|
||||
if (!extrasChanged && !options.ReplaceAllMetadata && options.MetadataRefreshMode != MetadataRefreshMode.FullRefresh)
|
||||
{
|
||||
// The owner's dates may only have become known after its extras were created, so keep
|
||||
// them in sync even when there is nothing to refresh.
|
||||
foreach (var extra in currentExtras)
|
||||
{
|
||||
if (extra.ExtraType is not null && InheritDatesFromOwner(item, extra))
|
||||
{
|
||||
await extra.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1570,6 +1582,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
|
||||
i.OwnerId = ownerId;
|
||||
i.ParentId = Guid.Empty;
|
||||
|
||||
return RefreshMetadataForOwnedItem(i, true, subOptions, cancellationToken);
|
||||
});
|
||||
|
||||
@@ -2652,6 +2665,32 @@ namespace MediaBrowser.Controller.Entities
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Applies the owner's premiere date and production year to an owned item, returning whether anything changed.
|
||||
/// </summary>
|
||||
/// <param name="owner">The owner.</param>
|
||||
/// <param name="ownedItem">The owned item.</param>
|
||||
/// <returns><c>true</c> if the owned item was changed, else <c>false</c>.</returns>
|
||||
internal static bool InheritDatesFromOwner(BaseItem owner, BaseItem ownedItem)
|
||||
{
|
||||
// Extras have no release date of their own, so the owner's is authoritative.
|
||||
var changed = false;
|
||||
|
||||
if (owner.ProductionYear is not null && ownedItem.ProductionYear != owner.ProductionYear)
|
||||
{
|
||||
ownedItem.ProductionYear = owner.ProductionYear;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (owner.PremiereDate is not null && ownedItem.PremiereDate != owner.PremiereDate)
|
||||
{
|
||||
ownedItem.PremiereDate = owner.PremiereDate;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
protected async Task RefreshMetadataForOwnedItem(BaseItem ownedItem, bool copyTitleMetadata, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
||||
{
|
||||
var newOptions = new MetadataRefreshOptions(options)
|
||||
@@ -2711,6 +2750,11 @@ namespace MediaBrowser.Controller.Entities
|
||||
ownedItem.CustomRating = item.CustomRating;
|
||||
newOptions.ForceSave = true;
|
||||
}
|
||||
|
||||
if (InheritDatesFromOwner(item, ownedItem))
|
||||
{
|
||||
newOptions.ForceSave = true;
|
||||
}
|
||||
}
|
||||
|
||||
await ownedItem.RefreshMetadata(newOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
@@ -90,7 +90,7 @@ namespace MediaBrowser.Controller.Entities.Movies
|
||||
{
|
||||
var hasChanges = base.BeforeMetadataRefresh(replaceAllMetadata);
|
||||
|
||||
if (!ProductionYear.HasValue)
|
||||
if (ProductionYear is null)
|
||||
{
|
||||
var info = LibraryManager.ParseName(Name);
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
{
|
||||
var hasChanges = base.BeforeMetadataRefresh(replaceAllMetadata);
|
||||
|
||||
if (!ProductionYear.HasValue)
|
||||
if (ProductionYear is null)
|
||||
{
|
||||
var info = LibraryManager.ParseName(Name);
|
||||
|
||||
|
||||
@@ -507,7 +507,7 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||
{
|
||||
var hasChanges = base.BeforeMetadataRefresh(replaceAllMetadata);
|
||||
|
||||
if (!ProductionYear.HasValue)
|
||||
if (ProductionYear is null)
|
||||
{
|
||||
var info = LibraryManager.ParseName(Name);
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
{
|
||||
var hasChanges = base.BeforeMetadataRefresh(replaceAllMetadata);
|
||||
|
||||
if (!ProductionYear.HasValue)
|
||||
if (ProductionYear is null)
|
||||
{
|
||||
var info = LibraryManager.ParseName(Name);
|
||||
|
||||
|
||||
@@ -730,7 +730,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
// Apply year filter
|
||||
if (query.Years.Length > 0)
|
||||
{
|
||||
if (!(item.ProductionYear.HasValue && query.Years.Contains(item.ProductionYear.Value)))
|
||||
if (item.ProductionYear is null || !query.Years.Contains(item.ProductionYear.Value))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user