Pārlūkot izejas kodu

Merge pull request #933 from cvium/fix_movie_matching_again

Semi-revert to prefer old movie grouping behaviour
Bond-009 6 gadi atpakaļ
vecāks
revīzija
77d4fec6eb
1 mainītis faili ar 49 papildinājumiem un 1 dzēšanām
  1. 49 1
      Emby.Naming/Video/VideoListResolver.cs

+ 49 - 1
Emby.Naming/Video/VideoListResolver.cs

@@ -175,7 +175,55 @@ namespace Emby.Naming.Video
                 return videos;
                 return videos;
             }
             }
 
 
-            return videos.GroupBy(v => new {v.Name, v.Year}).Select(group => new VideoInfo
+            var folderName = Path.GetFileName(Path.GetDirectoryName(videos[0].Files[0].Path));
+            if (!string.IsNullOrEmpty(folderName))
+            {
+                var videosMatchingFolder = new List<VideoInfo>();
+                foreach (VideoInfo video in videos)
+                {
+                    // Only interested in single files
+                    if (video.Files.Count != 1)
+                    {
+                        continue;
+                    }
+
+                    if (string.Equals(folderName, video.Name, StringComparison.OrdinalIgnoreCase))
+                    {
+                        videosMatchingFolder.Add(video);
+                    }
+                    // Eg. My Movie == My Movie - Some Other Info, TODO doesn't seem like a robust test
+                    else if (video.Name.StartsWith(folderName, StringComparison.OrdinalIgnoreCase) &&
+                        video.Name.Substring(folderName.Length).TrimStart().StartsWith("-"))
+                    {
+                        videosMatchingFolder.Add(video);
+                    }
+                }
+
+                // It is assumed that any non-matching files are random samples, trailers, extras etc.
+                // So if there's at least one video file matching the folder name, skip the rest.
+                if (videosMatchingFolder.Count > 0)
+                {
+                    var primary = videosMatchingFolder[0];
+                    var remainingVideos = videosMatchingFolder.Skip(1);
+                    var videoInfo = new VideoInfo
+                    {
+                        Name = folderName,
+                        Year = primary.Year,
+                        Files = primary.Files,
+                        AlternateVersions = new List<VideoFileInfo>(),
+                        Extras = primary.Extras
+                    };
+                    foreach (VideoInfo video in remainingVideos)
+                    {
+                        videoInfo.AlternateVersions.Add(video.Files.First());
+                        videoInfo.Extras.AddRange(video.Extras);
+                    }
+
+                    return new[] { videoInfo };
+                }
+            }
+
+            return videos.GroupBy(v => new { v.Name, v.Year }).Select(group => new VideoInfo
             {
             {
                 // Because of the grouping, we can grab the information from the first movie and make it primary
                 // Because of the grouping, we can grab the information from the first movie and make it primary
                 // The remaining movie matches are 'alternate versions'
                 // The remaining movie matches are 'alternate versions'