From c79324154f3b3a8e7f005c9492e0de311fa4a0f1 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Tue, 19 Feb 2019 17:10:11 +0100 Subject: [PATCH 1/8] Revert "Merge pull request #933 from cvium/fix_movie_matching_again" This reverts commit 77d4fec6eb75b9b26a24e0678c7a75d8decb2e29, reversing changes made to f274d024ceaacc23f0a30697aab8c0dfb05c402c. --- Emby.Naming/Video/VideoListResolver.cs | 50 +------------------------- 1 file changed, 1 insertion(+), 49 deletions(-) diff --git a/Emby.Naming/Video/VideoListResolver.cs b/Emby.Naming/Video/VideoListResolver.cs index 3348ec2fb3..20fa100fa1 100644 --- a/Emby.Naming/Video/VideoListResolver.cs +++ b/Emby.Naming/Video/VideoListResolver.cs @@ -175,55 +175,7 @@ namespace Emby.Naming.Video return videos; } - var folderName = Path.GetFileName(Path.GetDirectoryName(videos[0].Files[0].Path)); - if (!string.IsNullOrEmpty(folderName)) - { - var videosMatchingFolder = new List(); - 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(), - 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 + 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' From 518142723493cb95db37e06f917876464081229e Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Tue, 19 Feb 2019 17:34:43 +0100 Subject: [PATCH 2/8] Revert "Merge pull request #924 from cvium/fix_movie_matching" This reverts commit f274d024ceaacc23f0a30697aab8c0dfb05c402c, reversing changes made to 4b4399fba6df3368ab04e78acd2dd08873e4f07b. --- Emby.Naming/Video/VideoListResolver.cs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Emby.Naming/Video/VideoListResolver.cs b/Emby.Naming/Video/VideoListResolver.cs index 20fa100fa1..ef97b87396 100644 --- a/Emby.Naming/Video/VideoListResolver.cs +++ b/Emby.Naming/Video/VideoListResolver.cs @@ -175,16 +175,23 @@ 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) && folderName.Length > 1) { - // Because of the grouping, we can grab the information from the first movie and make it primary - // The remaining movie matches are 'alternate versions' - Name = group.First().Name, - Year = group.First().Year, - Files = group.First().Files, - AlternateVersions = group.Skip(1).Select(i => i.Files[0]).ToList(), - Extras = group.First().Extras.Concat(group.Skip(1).SelectMany(i => i.Extras)).ToList() - }); + var ordered = videos.OrderBy(i => i.Name); + + return ordered.GroupBy(v => new {v.Name, v.Year}).Select(group => new VideoInfo + { + Name = folderName, + Year = group.First().Year, + Files = group.First().Files, + AlternateVersions = group.Skip(1).Select(i => i.Files[0]).ToList(), + Extras = group.First().Extras.Concat(group.Skip(1).SelectMany(i => i.Extras)).ToList() + }); + } + + return videos; } private List GetExtras(IEnumerable remainingFiles, List baseNames) From de5c0bab7032f60053f528ca77c311c03899bd54 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Tue, 19 Feb 2019 17:39:10 +0100 Subject: [PATCH 3/8] Revert "Add Year to the new VideoInfo" This reverts commit 05ad2e9b3f5209d9e7ff9949d8c20cd8ef7062b6. --- Emby.Naming/Video/VideoListResolver.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Emby.Naming/Video/VideoListResolver.cs b/Emby.Naming/Video/VideoListResolver.cs index ef97b87396..db8ebb56a9 100644 --- a/Emby.Naming/Video/VideoListResolver.cs +++ b/Emby.Naming/Video/VideoListResolver.cs @@ -184,7 +184,6 @@ namespace Emby.Naming.Video return ordered.GroupBy(v => new {v.Name, v.Year}).Select(group => new VideoInfo { Name = folderName, - Year = group.First().Year, Files = group.First().Files, AlternateVersions = group.Skip(1).Select(i => i.Files[0]).ToList(), Extras = group.First().Extras.Concat(group.Skip(1).SelectMany(i => i.Extras)).ToList() From 46acff4113a9463ff8294cf39b15e8a67ce799e6 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Tue, 19 Feb 2019 17:39:30 +0100 Subject: [PATCH 4/8] Revert "Remove unnecessary ToList" This reverts commit 42abb5a9931806a2ae1cedd433144ebf82768a0d. --- Emby.Naming/Video/VideoListResolver.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Emby.Naming/Video/VideoListResolver.cs b/Emby.Naming/Video/VideoListResolver.cs index db8ebb56a9..156739c0a7 100644 --- a/Emby.Naming/Video/VideoListResolver.cs +++ b/Emby.Naming/Video/VideoListResolver.cs @@ -179,7 +179,7 @@ namespace Emby.Naming.Video if (!string.IsNullOrEmpty(folderName) && folderName.Length > 1) { - var ordered = videos.OrderBy(i => i.Name); + var ordered = videos.OrderBy(i => i.Name).ToList(); return ordered.GroupBy(v => new {v.Name, v.Year}).Select(group => new VideoInfo { From aa0c20afd572a48a2597689a6020359498c87603 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Tue, 19 Feb 2019 17:39:47 +0100 Subject: [PATCH 5/8] Revert "Change multi version logic for movies" This reverts commit a4055779f6c824cc0289dfb4f77dc094f2de850a. --- Emby.Naming/Video/VideoListResolver.cs | 65 ++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 8 deletions(-) diff --git a/Emby.Naming/Video/VideoListResolver.cs b/Emby.Naming/Video/VideoListResolver.cs index 156739c0a7..0506d0734c 100644 --- a/Emby.Naming/Video/VideoListResolver.cs +++ b/Emby.Naming/Video/VideoListResolver.cs @@ -175,22 +175,71 @@ namespace Emby.Naming.Video return videos; } + var list = new List(); + var folderName = Path.GetFileName(Path.GetDirectoryName(videos[0].Files[0].Path)); if (!string.IsNullOrEmpty(folderName) && folderName.Length > 1) { - var ordered = videos.OrderBy(i => i.Name).ToList(); - - return ordered.GroupBy(v => new {v.Name, v.Year}).Select(group => new VideoInfo + if (videos.All(i => i.Files.Count == 1 && IsEligibleForMultiVersion(folderName, i.Files[0].Path))) { - Name = folderName, - Files = group.First().Files, - AlternateVersions = group.Skip(1).Select(i => i.Files[0]).ToList(), - Extras = group.First().Extras.Concat(group.Skip(1).SelectMany(i => i.Extras)).ToList() - }); + // Enforce the multi-version limit + if (videos.Count <= 8 && HaveSameYear(videos)) + { + var ordered = videos.OrderBy(i => i.Name).ToList(); + + list.Add(ordered[0]); + + list[0].AlternateVersions = ordered.Skip(1).Select(i => i.Files[0]).ToList(); + list[0].Name = folderName; + list[0].Extras.AddRange(ordered.Skip(1).SelectMany(i => i.Extras)); + + return list; + } + } } return videos; + //foreach (var video in videos.OrderBy(i => i.Name)) + //{ + // var match = list + // .FirstOrDefault(i => string.Equals(i.Name, video.Name, StringComparison.OrdinalIgnoreCase)); + + // if (match != null && video.Files.Count == 1 && match.Files.Count == 1) + // { + // match.AlternateVersions.Add(video.Files[0]); + // match.Extras.AddRange(video.Extras); + // } + // else + // { + // list.Add(video); + // } + //} + + //return list; + } + + private bool HaveSameYear(List videos) + { + return videos.Select(i => i.Year ?? -1).Distinct().Count() < 2; + } + + private bool IsEligibleForMultiVersion(string folderName, string testFilename) + { + testFilename = Path.GetFileNameWithoutExtension(testFilename); + + if (string.Equals(folderName, testFilename, StringComparison.OrdinalIgnoreCase)) + { + return true; + } + + if (testFilename.StartsWith(folderName, StringComparison.OrdinalIgnoreCase)) + { + testFilename = testFilename.Substring(folderName.Length).Trim(); + return testFilename.StartsWith("-", StringComparison.OrdinalIgnoreCase) || Regex.Replace(testFilename, @"\[([^]]*)\]", "").Trim() == string.Empty; + } + + return false; } private List GetExtras(IEnumerable remainingFiles, List baseNames) From 6c1ca6f737e63bbc69fb9dbfd5a7e19fd3e55a59 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Tue, 19 Feb 2019 19:33:41 +0100 Subject: [PATCH 6/8] Remove arbitrary limit and minor style fixes --- Emby.Naming/Video/VideoListResolver.cs | 30 +++++--------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/Emby.Naming/Video/VideoListResolver.cs b/Emby.Naming/Video/VideoListResolver.cs index 0506d0734c..6ffc105167 100644 --- a/Emby.Naming/Video/VideoListResolver.cs +++ b/Emby.Naming/Video/VideoListResolver.cs @@ -184,7 +184,7 @@ namespace Emby.Naming.Video if (videos.All(i => i.Files.Count == 1 && IsEligibleForMultiVersion(folderName, i.Files[0].Path))) { // Enforce the multi-version limit - if (videos.Count <= 8 && HaveSameYear(videos)) + if (HaveSameYear(videos)) { var ordered = videos.OrderBy(i => i.Name).ToList(); @@ -200,23 +200,6 @@ namespace Emby.Naming.Video } return videos; - //foreach (var video in videos.OrderBy(i => i.Name)) - //{ - // var match = list - // .FirstOrDefault(i => string.Equals(i.Name, video.Name, StringComparison.OrdinalIgnoreCase)); - - // if (match != null && video.Files.Count == 1 && match.Files.Count == 1) - // { - // match.AlternateVersions.Add(video.Files[0]); - // match.Extras.AddRange(video.Extras); - // } - // else - // { - // list.Add(video); - // } - //} - - //return list; } private bool HaveSameYear(List videos) @@ -226,17 +209,14 @@ namespace Emby.Naming.Video private bool IsEligibleForMultiVersion(string folderName, string testFilename) { - testFilename = Path.GetFileNameWithoutExtension(testFilename); - - if (string.Equals(folderName, testFilename, StringComparison.OrdinalIgnoreCase)) - { - return true; - } + testFilename = Path.GetFileNameWithoutExtension(testFilename) ?? string.Empty; if (testFilename.StartsWith(folderName, StringComparison.OrdinalIgnoreCase)) { testFilename = testFilename.Substring(folderName.Length).Trim(); - return testFilename.StartsWith("-", StringComparison.OrdinalIgnoreCase) || Regex.Replace(testFilename, @"\[([^]]*)\]", "").Trim() == string.Empty; + return string.IsNullOrEmpty(testFilename) || + testFilename.StartsWith("-") || + string.IsNullOrEmpty(Regex.Replace(testFilename, @"\[([^]]*)\]", string.Empty)) ; } return false; From 566646ad8b079ad09d1adb728d09a0536763beb8 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Tue, 19 Feb 2019 19:44:22 +0100 Subject: [PATCH 7/8] Remove limit comment --- Emby.Naming/Video/VideoListResolver.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Emby.Naming/Video/VideoListResolver.cs b/Emby.Naming/Video/VideoListResolver.cs index 6ffc105167..d5c07ce735 100644 --- a/Emby.Naming/Video/VideoListResolver.cs +++ b/Emby.Naming/Video/VideoListResolver.cs @@ -183,7 +183,6 @@ namespace Emby.Naming.Video { if (videos.All(i => i.Files.Count == 1 && IsEligibleForMultiVersion(folderName, i.Files[0].Path))) { - // Enforce the multi-version limit if (HaveSameYear(videos)) { var ordered = videos.OrderBy(i => i.Name).ToList(); From 6016a277360c737c46cf4b3964c83b991a561842 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Tue, 19 Feb 2019 22:30:21 +0100 Subject: [PATCH 8/8] Check for whitespace --- Emby.Naming/Video/VideoListResolver.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Emby.Naming/Video/VideoListResolver.cs b/Emby.Naming/Video/VideoListResolver.cs index d5c07ce735..afedc30ef2 100644 --- a/Emby.Naming/Video/VideoListResolver.cs +++ b/Emby.Naming/Video/VideoListResolver.cs @@ -215,7 +215,7 @@ namespace Emby.Naming.Video testFilename = testFilename.Substring(folderName.Length).Trim(); return string.IsNullOrEmpty(testFilename) || testFilename.StartsWith("-") || - string.IsNullOrEmpty(Regex.Replace(testFilename, @"\[([^]]*)\]", string.Empty)) ; + string.IsNullOrWhiteSpace(Regex.Replace(testFilename, @"\[([^]]*)\]", string.Empty)) ; } return false;