diff --git a/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index 68b66ab7f5..42e297e047 100644 --- a/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -489,6 +489,19 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies { return GetMultiDiscMovie(multiDiscFolders, directoryService); } + else if ( + result.Items.Count == 0 && + (collectionType == CollectionType.movies || collectionType is null) && + fileSystemEntries.Any(i => string.Equals(i.Name, "movie.nfo", StringComparison.OrdinalIgnoreCase))) + { + return new T + { + Path = path, + Name = Path.GetFileName(path), + IsVirtualItem = true, + IsPlaceHolder = true + }; + } return null; } diff --git a/tests/Jellyfin.Server.Implementations.Tests/Library/MovieResolverTests.cs b/tests/Jellyfin.Server.Implementations.Tests/Library/MovieResolverTests.cs index e1346a8436..00634c5bbd 100644 --- a/tests/Jellyfin.Server.Implementations.Tests/Library/MovieResolverTests.cs +++ b/tests/Jellyfin.Server.Implementations.Tests/Library/MovieResolverTests.cs @@ -40,6 +40,32 @@ public class MovieResolverTests Assert.NotNull(movieResolver.Resolve(itemResolveArgs)); } + [Fact] + public void Resolve_MetadataOnlyFolder_ResolvesToMovie() + { + var movieResolver = new MovieResolver(Mock.Of(), Mock.Of>(), _namingOptions, Mock.Of(), _videoListResolver); + var itemResolveArgs = new ItemResolveArgs( + Mock.Of(), + null) + { + Parent = new MediaBrowser.Controller.Entities.Folder(), + FileInfo = new FileSystemMetadata + { + FullName = "/movies/Upcoming Movie", + IsDirectory = true + }, + FileSystemChildren = [ + new FileSystemMetadata { Name = "movie.nfo", FullName = "/movies/Upcoming Movie/movie.nfo" }, + new FileSystemMetadata { Name = "poster.jpg", FullName = "/movies/Upcoming Movie/poster.jpg" } + ] + }; + + var result = movieResolver.Resolve(itemResolveArgs); + Assert.NotNull(result); + Assert.True(result.IsVirtualItem); + Assert.True(result.IsPlaceHolder); + } + [Fact] public void ResolveMultiple_GivenTvShowsCollection_CreatesEpisodeItems() {