Bond_009 5 лет назад
Родитель
Сommit
b1dc595be1

+ 1 - 1
Emby.Naming/Common/NamingOptions.cs

@@ -182,7 +182,7 @@ namespace Emby.Naming.Common
 
 
             CleanStrings = new[]
             CleanStrings = new[]
             {
             {
-                @"[ _\,\.\(\)\[\]\-](ac3|dts|custom|dc|divx|divx5|dsr|dsrip|dutch|dvd|dvdrip|dvdscr|dvdscreener|screener|dvdivx|cam|fragment|fs|hdtv|hdrip|hdtvrip|internal|limited|multisubs|ntsc|ogg|ogm|pal|pdtv|proper|repack|rerip|retail|cd[1-9]|r3|r5|bd5|se|svcd|swedish|german|read.nfo|nfofix|unrated|ws|telesync|ts|telecine|tc|brrip|bdrip|480p|480i|576p|576i|720p|720i|1080p|1080i|2160p|hrhd|hrhdtv|hddvd|bluray|x264|h264|xvid|xvidvd|xxx|www.www|\[.*\])([ _\,\.\(\)\[\]\-]|$)",
+                @"[ _\,\.\(\)\[\]\-](HDR|HDC|UHD|UltraHD|4k|ac3|dts|custom|dc|divx|divx5|dsr|dsrip|dutch|dvd|dvdrip|dvdscr|dvdscreener|screener|dvdivx|cam|fragment|fs|hdtv|hdrip|hdtvrip|internal|limited|multisubs|ntsc|ogg|ogm|pal|pdtv|proper|repack|rerip|retail|cd[1-9]|r3|r5|bd5|se|svcd|swedish|german|read.nfo|nfofix|unrated|ws|telesync|ts|telecine|tc|brrip|bdrip|480p|480i|576p|576i|720p|720i|1080p|1080i|2160p|hrhd|hrhdtv|hddvd|bluray|x264|h264|xvid|xvidvd|xxx|www.www|\[.*\])([ _\,\.\(\)\[\]\-]|$)",
                 @"[ _\,\.\(\)\[\]\-](3d|sbs|tab|hsbs|htab|mvc|\[.*\])([ _\,\.\(\)\[\]\-]|$)",
                 @"[ _\,\.\(\)\[\]\-](3d|sbs|tab|hsbs|htab|mvc|\[.*\])([ _\,\.\(\)\[\]\-]|$)",
                 @"(\[.*\])"
                 @"(\[.*\])"
             };
             };

+ 3 - 3
Emby.Naming/Video/CleanDateTimeParser.cs

@@ -53,7 +53,7 @@ namespace Emby.Naming.Video
             }
             }
 
 
             // Make a second pass, running clean string first
             // Make a second pass, running clean string first
-            var cleanStringResult = new CleanStringParser().Clean(name, _options.CleanStringRegexes);
+            var cleanStringResult = CleanStringParser.Clean(name, _options.CleanStringRegexes);
 
 
             if (!cleanStringResult.HasChanged)
             if (!cleanStringResult.HasChanged)
             {
             {
@@ -72,12 +72,12 @@ namespace Emby.Naming.Video
             var match = expression.Match(name);
             var match = expression.Match(name);
 
 
             if (match.Success
             if (match.Success
-                && match.Groups.Count == 4
+                && match.Groups.Count == 5
                 && match.Groups[1].Success
                 && match.Groups[1].Success
                 && match.Groups[2].Success
                 && match.Groups[2].Success
                 && int.TryParse(match.Groups[2].Value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var year))
                 && int.TryParse(match.Groups[2].Value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var year))
             {
             {
-                name = match.Groups[1].Value;
+                name = match.Groups[1].Value.TrimEnd();
                 result.Year = year;
                 result.Year = year;
                 result.HasChanged = true;
                 result.HasChanged = true;
             }
             }

+ 2 - 2
Emby.Naming/Video/CleanStringParser.cs

@@ -9,9 +9,9 @@ namespace Emby.Naming.Video
     /// <summary>
     /// <summary>
     /// <see href="http://kodi.wiki/view/Advancedsettings.xml#video" />.
     /// <see href="http://kodi.wiki/view/Advancedsettings.xml#video" />.
     /// </summary>
     /// </summary>
-    public class CleanStringParser
+    public static class CleanStringParser
     {
     {
-        public CleanStringResult Clean(string name, IEnumerable<Regex> expressions)
+        public static CleanStringResult Clean(string name, IEnumerable<Regex> expressions)
         {
         {
             var hasChanged = false;
             var hasChanged = false;
 
 

+ 1 - 1
Emby.Naming/Video/VideoResolver.cs

@@ -132,7 +132,7 @@ namespace Emby.Naming.Video
 
 
         public CleanStringResult CleanString(string name)
         public CleanStringResult CleanString(string name)
         {
         {
-            return new CleanStringParser().Clean(name, _options.CleanStringRegexes);
+            return CleanStringParser.Clean(name, _options.CleanStringRegexes);
         }
         }
 
 
         public CleanDateTimeResult CleanDateTime(string name)
         public CleanDateTimeResult CleanDateTime(string name)

+ 3 - 5
tests/Jellyfin.Naming.Tests/Video/BaseVideoTest.cs

@@ -5,11 +5,9 @@ namespace Jellyfin.Naming.Tests.Video
 {
 {
     public abstract class BaseVideoTest
     public abstract class BaseVideoTest
     {
     {
-        protected VideoResolver GetParser()
-        {
-            var options = new NamingOptions();
+        private readonly NamingOptions _namingOptions = new NamingOptions();
 
 
-            return new VideoResolver(options);
-        }
+        protected VideoResolver GetParser()
+            => new VideoResolver(_namingOptions);
     }
     }
 }
 }

+ 44 - 128
tests/Jellyfin.Naming.Tests/Video/CleanDateTimeTests.cs

@@ -1,143 +1,59 @@
 using System.IO;
 using System.IO;
+using Emby.Naming.Common;
+using Emby.Naming.Video;
 using Xunit;
 using Xunit;
 
 
 namespace Jellyfin.Naming.Tests.Video
 namespace Jellyfin.Naming.Tests.Video
 {
 {
-    public class CleanDateTimeTests : BaseVideoTest
+    public sealed class CleanDateTimeTests
     {
     {
-        // FIXME
-        // [Fact]
-        public void TestCleanDateTime()
-        {
-            Test(@"The Wolf of Wall Street (2013).mkv", "The Wolf of Wall Street", 2013);
-            Test(@"The Wolf of Wall Street 2 (2013).mkv", "The Wolf of Wall Street 2", 2013);
-            Test(@"The Wolf of Wall Street - 2 (2013).mkv", "The Wolf of Wall Street - 2", 2013);
-            Test(@"The Wolf of Wall Street 2001 (2013).mkv", "The Wolf of Wall Street 2001", 2013);
-
-            Test(@"300 (2006).mkv", "300", 2006);
-            Test(@"d:/movies/300 (2006).mkv", "300", 2006);
-            Test(@"300 2 (2006).mkv", "300 2", 2006);
-            Test(@"300 - 2 (2006).mkv", "300 - 2", 2006);
-            Test(@"300 2001 (2006).mkv", "300 2001", 2006);
-
-            Test(@"curse.of.chucky.2013.stv.unrated.multi.1080p.bluray.x264-rough", "curse.of.chucky", 2013);
-            Test(@"curse.of.chucky.2013.stv.unrated.multi.2160p.bluray.x264-rough", "curse.of.chucky", 2013);
-
-            Test(@"/server/Movies/300 (2007)/300 (2006).bluray.disc", "300", 2006);
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestCleanDateTime1()
-        {
-            Test(@"Arrival.2016.2160p.Blu-Ray.HEVC.mkv", "Arrival", 2016);
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestCleanDateTimeWithoutFileExtension()
-        {
-            Test(@"The Wolf of Wall Street (2013)", "The Wolf of Wall Street", 2013);
-            Test(@"The Wolf of Wall Street 2 (2013)", "The Wolf of Wall Street 2", 2013);
-            Test(@"The Wolf of Wall Street - 2 (2013)", "The Wolf of Wall Street - 2", 2013);
-            Test(@"The Wolf of Wall Street 2001 (2013)", "The Wolf of Wall Street 2001", 2013);
-
-            Test(@"300 (2006)", "300", 2006);
-            Test(@"d:/movies/300 (2006)", "300", 2006);
-            Test(@"300 2 (2006)", "300 2", 2006);
-            Test(@"300 - 2 (2006)", "300 - 2", 2006);
-            Test(@"300 2001 (2006)", "300 2001", 2006);
-
-            Test(@"/server/Movies/300 (2007)/300 (2006)", "300", 2006);
-            Test(@"/server/Movies/300 (2007)/300 (2006).mkv", "300", 2006);
-        }
-
-        [Fact]
-        public void TestCleanDateTimeWithoutDate()
-        {
-            Test(@"American.Psycho.mkv", "American.Psycho.mkv", null);
-            Test(@"American Psycho.mkv", "American Psycho.mkv", null);
-        }
-
-        [Fact]
-        public void TestCleanDateTimeWithBracketedName()
-        {
-            Test(@"[rec].mkv", "[rec].mkv", null);
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestCleanDateTimeWithoutExtension()
-        {
-            Test(@"St. Vincent (2014)", "St. Vincent", 2014);
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestCleanDateTimeWithoutDate1()
-        {
-            Test("Super movie(2009).mp4", "Super movie", 2009);
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestCleanDateTimeWithoutParenthesis()
-        {
-            Test("Drug War 2013.mp4", "Drug War", 2013);
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestCleanDateTimeWithMultipleYears()
-        {
-            Test("My Movie (1997) - GreatestReleaseGroup 2019.mp4", "My Movie", 1997);
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestCleanDateTimeWithYearAndResolution()
-        {
-            Test("First Man 2018 1080p.mkv", "First Man", 2018);
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestCleanDateTimeWithYearAndResolution1()
-        {
-            Test("First Man (2018) 1080p.mkv", "First Man", 2018);
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestCleanDateTimeWithSceneRelease()
-        {
-            Test("Maximum Ride - 2016 - WEBDL-1080p - x264 AC3.mkv", "Maximum Ride", 2016);
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestYearInBrackets()
-        {
-            Test("Robin Hood [Multi-Subs] [2018].mkv", "Robin Hood", 2018);
-        }
-
-        private void Test(string input, string expectedName, int? expectedYear)
+        private readonly NamingOptions _namingOptions = new NamingOptions();
+
+        [Theory]
+        [InlineData(@"The Wolf of Wall Street (2013).mkv", "The Wolf of Wall Street", 2013)]
+        [InlineData(@"The Wolf of Wall Street 2 (2013).mkv", "The Wolf of Wall Street 2", 2013)]
+        [InlineData(@"The Wolf of Wall Street - 2 (2013).mkv", "The Wolf of Wall Street - 2", 2013)]
+        [InlineData(@"The Wolf of Wall Street 2001 (2013).mkv", "The Wolf of Wall Street 2001", 2013)]
+        [InlineData(@"300 (2006).mkv", "300", 2006)]
+        [InlineData(@"d:/movies/300 (2006).mkv", "300", 2006)]
+        [InlineData(@"300 2 (2006).mkv", "300 2", 2006)]
+        [InlineData(@"300 - 2 (2006).mkv", "300 - 2", 2006)]
+        [InlineData(@"300 2001 (2006).mkv", "300 2001", 2006)]
+        [InlineData(@"curse.of.chucky.2013.stv.unrated.multi.1080p.bluray.x264-rough", "curse.of.chucky", 2013)]
+        [InlineData(@"curse.of.chucky.2013.stv.unrated.multi.2160p.bluray.x264-rough", "curse.of.chucky", 2013)]
+        [InlineData(@"/server/Movies/300 (2007)/300 (2006).bluray.disc", "300", 2006)]
+        [InlineData(@"Arrival.2016.2160p.Blu-Ray.HEVC.mkv", "Arrival", 2016)]
+        [InlineData(@"The Wolf of Wall Street (2013)", "The Wolf of Wall Street", 2013)]
+        [InlineData(@"The Wolf of Wall Street 2 (2013)", "The Wolf of Wall Street 2", 2013)]
+        [InlineData(@"The Wolf of Wall Street - 2 (2013)", "The Wolf of Wall Street - 2", 2013)]
+        [InlineData(@"The Wolf of Wall Street 2001 (2013)", "The Wolf of Wall Street 2001", 2013)]
+        [InlineData(@"300 (2006)", "300", 2006)]
+        [InlineData(@"d:/movies/300 (2006)", "300", 2006)]
+        [InlineData(@"300 2 (2006)", "300 2", 2006)]
+        [InlineData(@"300 - 2 (2006)", "300 - 2", 2006)]
+        [InlineData(@"300 2001 (2006)", "300 2001", 2006)]
+        [InlineData(@"/server/Movies/300 (2007)/300 (2006)", "300", 2006)]
+        [InlineData(@"/server/Movies/300 (2007)/300 (2006).mkv", "300", 2006)]
+        [InlineData(@"American.Psycho.mkv", "American.Psycho.mkv", null)]
+        [InlineData(@"American Psycho.mkv", "American Psycho.mkv", null)]
+        [InlineData(@"[rec].mkv", "[rec].mkv", null)]
+        [InlineData(@"St. Vincent (2014)", "St. Vincent", 2014)]
+        [InlineData("Super movie(2009).mp4", "Super movie", 2009)]
+        // FIXME: [InlineData("Drug War 2013.mp4", "Drug War", 2013)]
+        [InlineData("My Movie (1997) - GreatestReleaseGroup 2019.mp4", "My Movie", 1997)]
+        // FIXME: [InlineData("First Man 2018 1080p.mkv", "First Man", 2018)]
+        [InlineData("First Man (2018) 1080p.mkv", "First Man", 2018)]
+        // FIXME: [InlineData("Maximum Ride - 2016 - WEBDL-1080p - x264 AC3.mkv", "Maximum Ride", 2016)]
+        // FIXME: [InlineData("Robin Hood [Multi-Subs] [2018].mkv", "Robin Hood", 2018)]
+        [InlineData(@"3.Days.to.Kill.2014.720p.BluRay.x264.YIFY.mkv", "3.Days.to.Kill", 2014)] // In this test case, running CleanDateTime first produces no date, so it will attempt to run CleanString first and then CleanDateTime again
+        public void CleanDateTimeTest(string input, string expectedName, int? expectedYear)
         {
         {
             input = Path.GetFileName(input);
             input = Path.GetFileName(input);
 
 
-            var result = GetParser().CleanDateTime(input);
+            var result = new VideoResolver(_namingOptions).CleanDateTime(input);
 
 
             Assert.Equal(expectedName, result.Name, true);
             Assert.Equal(expectedName, result.Name, true);
             Assert.Equal(expectedYear, result.Year);
             Assert.Equal(expectedYear, result.Year);
         }
         }
-
-        // FIXME
-        // [Fact]
-        public void TestCleanDateAndStringsSequence()
-        {
-            // In this test case, running CleanDateTime first produces no date, so it will attempt to run CleanString first and then CleanDateTime again
-
-            Test(@"3.Days.to.Kill.2014.720p.BluRay.x264.YIFY.mkv", "3.Days.to.Kill", 2014);
-        }
     }
     }
 }
 }

+ 29 - 125
tests/Jellyfin.Naming.Tests/Video/CleanStringTests.cs

@@ -1,133 +1,37 @@
-using System;
-using System.Globalization;
+using Emby.Naming.Common;
+using Emby.Naming.Video;
 using Xunit;
 using Xunit;
 
 
 namespace Jellyfin.Naming.Tests.Video
 namespace Jellyfin.Naming.Tests.Video
 {
 {
-    public class CleanStringTests : BaseVideoTest
+    public sealed class CleanStringTests
     {
     {
-        // FIXME
-        // [Fact]
-        public void TestCleanString()
-        {
-            Test("Super movie 480p.mp4", "Super movie");
-            Test("Super movie 480p 2001.mp4", "Super movie");
-            Test("Super movie [480p].mp4", "Super movie");
-            Test("480 Super movie [tmdbid=12345].mp4", "480 Super movie");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestCleanString1()
-        {
-            Test("Super movie(2009).mp4", "Super movie(2009).mp4");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestCleanString2()
-        {
-            Test("Run lola run (lola rennt) (2009).mp4", "Run lola run (lola rennt) (2009).mp4");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestStringWithoutDate()
-        {
-            Test(@"American.Psycho.mkv", "American.Psycho.mkv");
-            Test(@"American Psycho.mkv", "American Psycho.mkv");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestNameWithBrackets()
-        {
-            Test(@"[rec].mkv", "[rec].mkv");
-        }
-
-        // FIXME
-        // [Fact]
-        public void Test4k()
-        {
-            Test("Crouching.Tiger.Hidden.Dragon.4k.mkv", "Crouching.Tiger.Hidden.Dragon");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestUltraHd()
-        {
-            Test("Crouching.Tiger.Hidden.Dragon.UltraHD.mkv", "Crouching.Tiger.Hidden.Dragon");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestUHd()
-        {
-            Test("Crouching.Tiger.Hidden.Dragon.UHD.mkv", "Crouching.Tiger.Hidden.Dragon");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestHDR()
-        {
-            Test("Crouching.Tiger.Hidden.Dragon.HDR.mkv", "Crouching.Tiger.Hidden.Dragon");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestHDC()
-        {
-            Test("Crouching.Tiger.Hidden.Dragon.HDC.mkv", "Crouching.Tiger.Hidden.Dragon");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestHDC1()
-        {
-            Test("Crouching.Tiger.Hidden.Dragon-HDC.mkv", "Crouching.Tiger.Hidden.Dragon");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestBDrip()
-        {
-            Test("Crouching.Tiger.Hidden.Dragon.BDrip.mkv", "Crouching.Tiger.Hidden.Dragon");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestBDripHDC()
-        {
-            Test("Crouching.Tiger.Hidden.Dragon.BDrip-HDC.mkv", "Crouching.Tiger.Hidden.Dragon");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestMulti()
-        {
-            Test("Crouching.Tiger.Hidden.Dragon.4K.UltraHD.HDR.BDrip-HDC.mkv", "Crouching.Tiger.Hidden.Dragon");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestLeadingBraces()
-        {
-            // Not actually supported, just reported by a user
-            Test("[0004] - After The Sunset.el.mkv", "After The Sunset");
-        }
-
-        // FIXME
-        // [Fact]
-        public void TestTrailingBraces()
-        {
-            Test("After The Sunset - [0004].mkv", "After The Sunset");
-        }
-
-        private void Test(string input, string expectedName)
-        {
-            var result = GetParser().CleanString(input).ToString();
-
-            Assert.Equal(expectedName, result, true);
+        private readonly NamingOptions _namingOptions = new NamingOptions();
+
+        [Theory]
+        [InlineData("Super movie 480p.mp4", "Super movie")]
+        [InlineData("Super movie 480p 2001.mp4", "Super movie")]
+        [InlineData("Super movie [480p].mp4", "Super movie")]
+        [InlineData("480 Super movie [tmdbid=12345].mp4", "480 Super movie")]
+        [InlineData("Super movie(2009).mp4", "Super movie(2009).mp4")]
+        [InlineData("Run lola run (lola rennt) (2009).mp4", "Run lola run (lola rennt) (2009).mp4")]
+        [InlineData(@"American.Psycho.mkv", "American.Psycho.mkv")]
+        [InlineData(@"American Psycho.mkv", "American Psycho.mkv")]
+        [InlineData(@"[rec].mkv", "[rec].mkv")]
+        [InlineData("Crouching.Tiger.Hidden.Dragon.4k.mkv", "Crouching.Tiger.Hidden.Dragon")]
+        [InlineData("Crouching.Tiger.Hidden.Dragon.UltraHD.mkv", "Crouching.Tiger.Hidden.Dragon")]
+        [InlineData("Crouching.Tiger.Hidden.Dragon.UHD.mkv", "Crouching.Tiger.Hidden.Dragon")]
+        [InlineData("Crouching.Tiger.Hidden.Dragon.HDR.mkv", "Crouching.Tiger.Hidden.Dragon")]
+        [InlineData("Crouching.Tiger.Hidden.Dragon.HDC.mkv", "Crouching.Tiger.Hidden.Dragon")]
+        [InlineData("Crouching.Tiger.Hidden.Dragon-HDC.mkv", "Crouching.Tiger.Hidden.Dragon")]
+        [InlineData("Crouching.Tiger.Hidden.Dragon.BDrip.mkv", "Crouching.Tiger.Hidden.Dragon")]
+        [InlineData("Crouching.Tiger.Hidden.Dragon.BDrip-HDC.mkv", "Crouching.Tiger.Hidden.Dragon")]
+        [InlineData("Crouching.Tiger.Hidden.Dragon.4K.UltraHD.HDR.BDrip-HDC.mkv", "Crouching.Tiger.Hidden.Dragon")]
+        // FIXME: [InlineData("After The Sunset - [0004].mkv", "After The Sunset")]
+        public void CleanStringTest(string input, string expectedName)
+        {
+            var result = new VideoResolver(_namingOptions).CleanString(input);
+            Assert.Equal(expectedName, result.Name);
         }
         }
     }
     }
 }
 }

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

@@ -62,7 +62,6 @@ namespace Jellyfin.Naming.Tests.Video
         [Fact]
         [Fact]
         public void TestMultiEdition3()
         public void TestMultiEdition3()
         {
         {
-            // This is currently not supported and will fail, but we should try to figure it out
             var files = new[]
             var files = new[]
             {
             {
                 @"/movies/The Phantom of the Opera (1925)/The Phantom of the Opera (1925) - 1925 version.mkv",
                 @"/movies/The Phantom of the Opera (1925)/The Phantom of the Opera (1925) - 1925 version.mkv",