From 7881a4be0af65148128a5d63f9997937178f139e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 19 Dec 2013 22:21:37 -0500 Subject: [PATCH] fixed movie folders resolving incorrectly when using multi-disc naming --- .../Library/Resolvers/Movies/MovieResolver.cs | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index e335f4ad5d..589f8c9f03 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -268,7 +268,9 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies if (multiDiscFolders.Count > 0) { - return GetMultiDiscMovie(multiDiscFolders); + var folders = fileSystemEntries.Where(child => (child.Attributes & FileAttributes.Directory) == FileAttributes.Directory); + + return GetMultiDiscMovie(multiDiscFolders, folders); } return null; @@ -278,25 +280,26 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies /// Gets the multi disc movie. /// /// - /// The folders. + /// The folders. + /// All folders. /// ``0. - private T GetMultiDiscMovie(List folders) + private T GetMultiDiscMovie(List multiDiscFolders, IEnumerable allFolders) where T : Video, new() { - var videoType = VideoType.BluRay; + var videoTypes = new List(); - var folderPaths = folders.Select(i => i.FullName).Where(i => + var folderPaths = multiDiscFolders.Select(i => i.FullName).Where(i => { var subfolders = Directory.GetDirectories(i).Select(Path.GetFileName).ToList(); if (subfolders.Any(IsDvdDirectory)) { - videoType = VideoType.Dvd; + videoTypes.Add(VideoType.Dvd); return true; } if (subfolders.Any(IsBluRayDirectory)) { - videoType = VideoType.BluRay; + videoTypes.Add(VideoType.BluRay); return true; } @@ -304,18 +307,46 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies }).OrderBy(i => i).ToList(); + // If different video types were found, don't allow this + if (videoTypes.Count > 0 && videoTypes.Any(i => i != videoTypes[0])) + { + return null; + } + if (folderPaths.Count == 0) { return null; } + // If there are other folders side by side that are folder rips, don't allow it + // TODO: Improve this to return null if any folder is present aside from our regularly ignored folders + if (allFolders.Except(multiDiscFolders).Any(i => + { + var subfolders = Directory.GetDirectories(i.FullName).Select(Path.GetFileName).ToList(); + + if (subfolders.Any(IsDvdDirectory)) + { + return true; + } + if (subfolders.Any(IsBluRayDirectory)) + { + return true; + } + + return false; + + })) + { + return null; + } + return new T { Path = folderPaths[0], IsMultiPart = true, - VideoType = videoType + VideoType = videoTypes[0] }; }