aboutsummaryrefslogtreecommitdiff
path: root/Emby.Naming
diff options
context:
space:
mode:
authorClaus Vium <clausvium@gmail.com>2019-02-18 21:56:08 +0100
committerClaus Vium <clausvium@gmail.com>2019-02-18 21:56:08 +0100
commit4a700778e3e76d53a89c824ff53eb4e83f03a7c8 (patch)
treeb50a80d6086dfa4f287482c27290db065432d76d /Emby.Naming
parentf274d024ceaacc23f0a30697aab8c0dfb05c402c (diff)
Semi-revert to prefer old movie grouping behaviour
Diffstat (limited to 'Emby.Naming')
-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..3e3545831 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.First().Files.First().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.First();
+ var remainingVideos = videosMatchingFolder.Skip(1);
+ var videoInfo = new VideoInfo
+ {
+ Name = folderName,
+ Year = videosMatchingFolder.First().Year,
+ Files = videosMatchingFolder.First().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'