fixed movie folders resolving incorrectly when using multi-disc naming

This commit is contained in:
Luke Pulverenti 2013-12-19 22:21:37 -05:00
parent cd859ac2e6
commit 7881a4be0a

View File

@ -268,7 +268,9 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
if (multiDiscFolders.Count > 0) if (multiDiscFolders.Count > 0)
{ {
return GetMultiDiscMovie<T>(multiDiscFolders); var folders = fileSystemEntries.Where(child => (child.Attributes & FileAttributes.Directory) == FileAttributes.Directory);
return GetMultiDiscMovie<T>(multiDiscFolders, folders);
} }
return null; return null;
@ -278,25 +280,26 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
/// Gets the multi disc movie. /// Gets the multi disc movie.
/// </summary> /// </summary>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <param name="folders">The folders.</param> /// <param name="multiDiscFolders">The folders.</param>
/// <param name="allFolders">All folders.</param>
/// <returns>``0.</returns> /// <returns>``0.</returns>
private T GetMultiDiscMovie<T>(List<FileSystemInfo> folders) private T GetMultiDiscMovie<T>(List<FileSystemInfo> multiDiscFolders, IEnumerable<FileSystemInfo> allFolders)
where T : Video, new() where T : Video, new()
{ {
var videoType = VideoType.BluRay; var videoTypes = new List<VideoType>();
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(); var subfolders = Directory.GetDirectories(i).Select(Path.GetFileName).ToList();
if (subfolders.Any(IsDvdDirectory)) if (subfolders.Any(IsDvdDirectory))
{ {
videoType = VideoType.Dvd; videoTypes.Add(VideoType.Dvd);
return true; return true;
} }
if (subfolders.Any(IsBluRayDirectory)) if (subfolders.Any(IsBluRayDirectory))
{ {
videoType = VideoType.BluRay; videoTypes.Add(VideoType.BluRay);
return true; return true;
} }
@ -304,18 +307,46 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
}).OrderBy(i => i).ToList(); }).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) if (folderPaths.Count == 0)
{ {
return null; 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 return new T
{ {
Path = folderPaths[0], Path = folderPaths[0],
IsMultiPart = true, IsMultiPart = true,
VideoType = videoType VideoType = videoTypes[0]
}; };
} }