Procházet zdrojové kódy

Merge pull request #5461 from cvium/fix_multiversion

Bond-009 před 4 roky
rodič
revize
d967267cef

+ 9 - 7
Emby.Naming/Video/VideoListResolver.cs

@@ -221,20 +221,22 @@ namespace Emby.Naming.Video
             string testFilename = Path.GetFileNameWithoutExtension(testFilePath);
             if (testFilename.StartsWith(folderName, StringComparison.OrdinalIgnoreCase))
             {
-                if (CleanStringParser.TryClean(testFilename, _options.CleanStringRegexes, out var cleanName))
+                // Remove the folder name before cleaning as we don't care about cleaning that part
+                if (folderName.Length <= testFilename.Length)
                 {
-                    testFilename = cleanName.ToString();
+                    testFilename = testFilename.Substring(folderName.Length).Trim();
                 }
 
-                if (folderName.Length <= testFilename.Length)
+                if (CleanStringParser.TryClean(testFilename, _options.CleanStringRegexes, out var cleanName))
                 {
-                    testFilename = testFilename.Substring(folderName.Length).Trim();
+                    testFilename = cleanName.Trim().ToString();
                 }
 
+                // The CleanStringParser should have removed common keywords etc.
                 return string.IsNullOrEmpty(testFilename)
-                   || testFilename[0] == '-'
-                   || testFilename[0] == '_'
-                   || string.IsNullOrWhiteSpace(Regex.Replace(testFilename, @"\[([^]]*)\]", string.Empty));
+                       || testFilename[0] == '-'
+                       || testFilename[0] == '_'
+                       || Regex.IsMatch(testFilename, @"^\[([^]]*)\]");
             }
 
             return false;

+ 38 - 0
tests/Jellyfin.Naming.Tests/Video/MultiVersionTests.cs

@@ -368,6 +368,44 @@ namespace Jellyfin.Naming.Tests.Video
             Assert.Single(result[0].AlternateVersions);
         }
 
+        [Fact]
+        public void Resolve_GivenFolderNameWithBracketsAndHyphens_GroupsBasedOnFolderName()
+        {
+            var files = new[]
+            {
+                @"/movies/John Wick - Kapitel 3 (2019) [imdbid=tt6146586]/John Wick - Kapitel 3 (2019) [imdbid=tt6146586] - Version 1.mkv",
+                @"/movies/John Wick - Kapitel 3 (2019) [imdbid=tt6146586]/John Wick - Kapitel 3 (2019) [imdbid=tt6146586] - Version 2.mkv"
+            };
+
+            var result = _videoListResolver.Resolve(files.Select(i => new FileSystemMetadata
+            {
+                IsDirectory = false,
+                FullName = i
+            }).ToList()).ToList();
+
+            Assert.Single(result);
+            Assert.Empty(result[0].Extras);
+            Assert.Single(result[0].AlternateVersions);
+        }
+
+        [Fact]
+        public void Resolve_GivenUnclosedBrackets_DoesNotGroup()
+        {
+            var files = new[]
+            {
+                @"/movies/John Wick - Chapter 3 (2019)/John Wick - Chapter 3 (2019) [Version 1].mkv",
+                @"/movies/John Wick - Chapter 3 (2019)/John Wick - Chapter 3 (2019) [Version 2.mkv"
+            };
+
+            var result = _videoListResolver.Resolve(files.Select(i => new FileSystemMetadata
+            {
+                IsDirectory = false,
+                FullName = i
+            }).ToList()).ToList();
+
+            Assert.Equal(2, result.Count);
+        }
+
         [Fact]
         public void TestEmptyList()
         {