aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBond-009 <bond.009@outlook.com>2019-02-18 16:48:05 -0500
committerGitHub <noreply@github.com>2019-02-18 16:48:05 -0500
commit77d4fec6eb75b9b26a24e0678c7a75d8decb2e29 (patch)
tree0ae85236f643ba503ee34bb26f50a7c7c906bbd8
parentf274d024ceaacc23f0a30697aab8c0dfb05c402c (diff)
parent29ff80d69cbc518e730bcb62da839ee31e19c977 (diff)
Merge pull request #933 from cvium/fix_movie_matching_again
Semi-revert to prefer old movie grouping behaviour
-rw-r--r--Emby.Naming/Video/VideoListResolver.cs50
1 files changed, 49 insertions, 1 deletions
diff --git a/Emby.Naming/Video/VideoListResolver.cs b/Emby.Naming/Video/VideoListResolver.cs
index 20fa100fa..3348ec2fb 100644
--- a/Emby.Naming/Video/VideoListResolver.cs
+++ b/Emby.Naming/Video/VideoListResolver.cs
@@ -175,7 +175,55 @@ namespace Emby.Naming.Video
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
// The remaining movie matches are 'alternate versions'