Merge pull request #17399 from Shadowghost/fix-extra-year
Fix incorrect year on local trailers
This commit is contained in:
@@ -6,6 +6,7 @@ using System.Threading;
|
||||
using Jellyfin.Database.Implementations.Entities;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.LiveTv;
|
||||
using MediaBrowser.Controller.MediaSegments;
|
||||
@@ -366,4 +367,80 @@ public class BaseItemTests
|
||||
Assert.Contains(alt2.Id, ids);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InheritDatesFromOwner_OwnerHasDates_OverwritesOwnedItemDates()
|
||||
{
|
||||
var owner = new Movie
|
||||
{
|
||||
ProductionYear = 1982,
|
||||
PremiereDate = new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc)
|
||||
};
|
||||
|
||||
// 2016 is what the container creation date of a re-encoded trailer would have yielded.
|
||||
var trailer = new Trailer
|
||||
{
|
||||
ExtraType = ExtraType.Trailer,
|
||||
ProductionYear = 2016,
|
||||
PremiereDate = new DateTime(2016, 5, 4, 0, 0, 0, DateTimeKind.Utc)
|
||||
};
|
||||
|
||||
Assert.True(BaseItem.InheritDatesFromOwner(owner, trailer));
|
||||
Assert.Equal(owner.ProductionYear, trailer.ProductionYear);
|
||||
Assert.Equal(owner.PremiereDate, trailer.PremiereDate);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InheritDatesFromOwner_OwnerHasNoDates_KeepsOwnedItemDates()
|
||||
{
|
||||
var owner = new Movie();
|
||||
var trailer = new Trailer
|
||||
{
|
||||
ExtraType = ExtraType.Trailer,
|
||||
ProductionYear = 1982,
|
||||
PremiereDate = new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc)
|
||||
};
|
||||
|
||||
Assert.False(BaseItem.InheritDatesFromOwner(owner, trailer));
|
||||
Assert.Equal(1982, trailer.ProductionYear);
|
||||
Assert.Equal(new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc), trailer.PremiereDate);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InheritDatesFromOwner_DatesAlreadyMatch_ReportsNoChange()
|
||||
{
|
||||
var owner = new Movie
|
||||
{
|
||||
ProductionYear = 1982,
|
||||
PremiereDate = new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc)
|
||||
};
|
||||
|
||||
var trailer = new Trailer
|
||||
{
|
||||
ExtraType = ExtraType.Trailer,
|
||||
ProductionYear = owner.ProductionYear,
|
||||
PremiereDate = owner.PremiereDate
|
||||
};
|
||||
|
||||
Assert.False(BaseItem.InheritDatesFromOwner(owner, trailer));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InheritDatesFromOwner_OwnedItemHasNoDates_TakesOwnerDates()
|
||||
{
|
||||
var owner = new Movie
|
||||
{
|
||||
ProductionYear = 1982,
|
||||
PremiereDate = new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc)
|
||||
};
|
||||
|
||||
var trailer = new Trailer
|
||||
{
|
||||
ExtraType = ExtraType.Trailer
|
||||
};
|
||||
|
||||
Assert.True(BaseItem.InheritDatesFromOwner(owner, trailer));
|
||||
Assert.Equal(1982, trailer.ProductionYear);
|
||||
Assert.Equal(new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc), trailer.PremiereDate);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,9 @@ using AutoFixture;
|
||||
using AutoFixture.AutoMoq;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Model.Configuration;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Providers.MediaInfo;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
@@ -75,4 +77,62 @@ public class FFProbeVideoInfoTests
|
||||
|
||||
Assert.All(chapters, chapter => Assert.True(chapter.StartPositionTicks < runtime));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(false)]
|
||||
[InlineData(true)]
|
||||
public void FetchEmbeddedInfo_NoExtra_AppliesContainerDates(bool replaceAllMetadata)
|
||||
{
|
||||
var video = new Video();
|
||||
|
||||
_fFProbeVideoInfo.FetchEmbeddedInfo(video, CreateMediaInfoWithDates(), CreateRefreshOptions(replaceAllMetadata), new LibraryOptions());
|
||||
|
||||
Assert.Equal(2016, video.ProductionYear);
|
||||
Assert.Equal(new DateTime(2016, 5, 4, 0, 0, 0, DateTimeKind.Utc), video.PremiereDate);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(false)]
|
||||
[InlineData(true)]
|
||||
public void FetchEmbeddedInfo_Extra_IgnoresContainerDates(bool replaceAllMetadata)
|
||||
{
|
||||
var video = new Video
|
||||
{
|
||||
ExtraType = ExtraType.Trailer,
|
||||
ProductionYear = 1982,
|
||||
PremiereDate = new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc)
|
||||
};
|
||||
|
||||
_fFProbeVideoInfo.FetchEmbeddedInfo(video, CreateMediaInfoWithDates(), CreateRefreshOptions(replaceAllMetadata), new LibraryOptions());
|
||||
|
||||
Assert.Equal(1982, video.ProductionYear);
|
||||
Assert.Equal(new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc), video.PremiereDate);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FetchEmbeddedInfo_ExtraWithoutDates_StaysWithoutDates()
|
||||
{
|
||||
var video = new Video
|
||||
{
|
||||
ExtraType = ExtraType.Trailer
|
||||
};
|
||||
|
||||
_fFProbeVideoInfo.FetchEmbeddedInfo(video, CreateMediaInfoWithDates(), CreateRefreshOptions(false), new LibraryOptions());
|
||||
|
||||
Assert.Null(video.ProductionYear);
|
||||
Assert.Null(video.PremiereDate);
|
||||
}
|
||||
|
||||
private static MediaBrowser.Model.MediaInfo.MediaInfo CreateMediaInfoWithDates()
|
||||
=> new()
|
||||
{
|
||||
ProductionYear = 2016,
|
||||
PremiereDate = new DateTime(2016, 5, 4, 0, 0, 0, DateTimeKind.Utc)
|
||||
};
|
||||
|
||||
private static MetadataRefreshOptions CreateRefreshOptions(bool replaceAllMetadata)
|
||||
=> new(Mock.Of<IDirectoryService>())
|
||||
{
|
||||
ReplaceAllMetadata = replaceAllMetadata
|
||||
};
|
||||
}
|
||||
|
||||
@@ -305,6 +305,47 @@ public class FindExtrasTests
|
||||
Assert.Empty(extras);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FindExtras_TrailerWithYearInFilename_SetsProductionYearFromFilename()
|
||||
{
|
||||
var owner = new Movie { Name = "Up", Path = "/movies/Up/Up.mkv" };
|
||||
var paths = new List<string>
|
||||
{
|
||||
"/movies/Up/Up.mkv",
|
||||
"/movies/Up/trailers"
|
||||
};
|
||||
|
||||
_fileSystemMock.Setup(f => f.GetFiles(
|
||||
"/movies/Up/trailers",
|
||||
It.IsAny<string[]>(),
|
||||
false,
|
||||
false))
|
||||
.Returns(new List<FileSystemMetadata>
|
||||
{
|
||||
new()
|
||||
{
|
||||
FullName = "/movies/Up/trailers/Trailer 1 (2013).mkv",
|
||||
Name = "Trailer 1 (2013).mkv",
|
||||
IsDirectory = false
|
||||
}
|
||||
}).Verifiable();
|
||||
|
||||
var files = paths.Select(p => new FileSystemMetadata
|
||||
{
|
||||
FullName = p,
|
||||
Name = Path.GetFileName(p),
|
||||
IsDirectory = !Path.HasExtension(p)
|
||||
}).ToList();
|
||||
|
||||
var extras = _libraryManager.FindExtras(owner, files, new DirectoryService(_fileSystemMock.Object)).ToList();
|
||||
|
||||
_fileSystemMock.Verify();
|
||||
var trailer = Assert.Single(extras);
|
||||
Assert.Equal(ExtraType.Trailer, trailer.ExtraType);
|
||||
Assert.Equal(typeof(Trailer), trailer.GetType());
|
||||
Assert.Equal(2013, trailer.ProductionYear);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FindExtras_SeriesWithTrailers_FindsCorrectExtras()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user