소스 검색

Merge pull request #5043 from senritsu/improve-episode-number-parsing-with-digits-in-names

adjust episode path expression to allow digits in series names
dkanada 4 년 전
부모
커밋
2e9661c415
2개의 변경된 파일12개의 추가작업 그리고 7개의 파일을 삭제
  1. 7 6
      Emby.Naming/Common/NamingOptions.cs
  2. 5 1
      tests/Jellyfin.Naming.Tests/TV/EpisodeNumberTests.cs

+ 7 - 6
Emby.Naming/Common/NamingOptions.cs

@@ -282,7 +282,13 @@ namespace Emby.Naming.Common
                     SupportsAbsoluteEpisodeNumbers = true
                     SupportsAbsoluteEpisodeNumbers = true
                 },
                 },
 
 
-                // Case Closed (1996-2007)/Case Closed - 317.mkv
+                // Not a Kodi rule as well, but below rule also causes false positives for triple-digit episode names
+                // [bar] Foo - 1 [baz] special case of below expression to prevent false positives with digits in the series name
+                new EpisodeExpression(@".*?(\[.*?\])+.*?(?<seriesname>[\w\s]+?)[\s_]*-[\s_]*(?<epnumber>\d+).*$")
+                {
+                    IsNamed = true
+                },
+
                 // /server/anything_102.mp4
                 // /server/anything_102.mp4
                 // /server/james.corden.2017.04.20.anne.hathaway.720p.hdtv.x264-crooks.mkv
                 // /server/james.corden.2017.04.20.anne.hathaway.720p.hdtv.x264-crooks.mkv
                 // /server/anything_1996.11.14.mp4
                 // /server/anything_1996.11.14.mp4
@@ -299,11 +305,6 @@ namespace Emby.Naming.Common
 
 
                 // *** End Kodi Standard Naming
                 // *** End Kodi Standard Naming
 
 
-                // [bar] Foo - 1 [baz]
-                new EpisodeExpression(@".*?(\[.*?\])+.*?(?<seriesname>[\w\s]+?)[-\s_]+(?<epnumber>[0-9]+).*$")
-                {
-                    IsNamed = true
-                },
                 new EpisodeExpression(@".*(\\|\/)[sS]?(?<seasonnumber>[0-9]+)[xX](?<epnumber>[0-9]+)[^\\\/]*$")
                 new EpisodeExpression(@".*(\\|\/)[sS]?(?<seasonnumber>[0-9]+)[xX](?<epnumber>[0-9]+)[^\\\/]*$")
                 {
                 {
                     IsNamed = true
                     IsNamed = true

+ 5 - 1
tests/Jellyfin.Naming.Tests/TV/EpisodeNumberTests.cs

@@ -66,12 +66,16 @@ namespace Jellyfin.Naming.Tests.TV
         [InlineData("Season 2/2. Infestation.avi", 2)]
         [InlineData("Season 2/2. Infestation.avi", 2)]
         [InlineData("The Wonder Years/The.Wonder.Years.S04.PDTV.x264-JCH/The Wonder Years s04e07 Christmas Party NTSC PDTV.avi", 7)]
         [InlineData("The Wonder Years/The.Wonder.Years.S04.PDTV.x264-JCH/The Wonder Years s04e07 Christmas Party NTSC PDTV.avi", 7)]
         [InlineData("Running Man/Running Man S2017E368.mkv", 368)]
         [InlineData("Running Man/Running Man S2017E368.mkv", 368)]
+        [InlineData("Season 2/[HorribleSubs] Hunter X Hunter - 136 [720p].mkv", 136)] // triple digit episode number
+        [InlineData("Log Horizon 2/[HorribleSubs] Log Horizon 2 - 03 [720p].mkv", 3)] // digit in series name
+        [InlineData("Season 1/seriesname 05.mkv", 5)] // no hyphen between series name and episode number
+        [InlineData("[BBT-RMX] Ranma ½ - 154 [50AC421A].mkv", 154)] // hyphens in the pre-name info, triple digit episode number
+        // TODO: [InlineData("Case Closed (1996-2007)/Case Closed - 317.mkv", 317)] // triple digit episode number
         // TODO: [InlineData("Season 2/16 12 Some Title.avi", 16)]
         // TODO: [InlineData("Season 2/16 12 Some Title.avi", 16)]
         // TODO: [InlineData("/The.Legend.of.Condor.Heroes.2017.V2.web-dl.1080p.h264.aac-hdctv/The.Legend.of.Condor.Heroes.2017.E07.V2.web-dl.1080p.h264.aac-hdctv.mkv", 7)]
         // TODO: [InlineData("/The.Legend.of.Condor.Heroes.2017.V2.web-dl.1080p.h264.aac-hdctv/The.Legend.of.Condor.Heroes.2017.E07.V2.web-dl.1080p.h264.aac-hdctv.mkv", 7)]
         // TODO: [InlineData("Season 4/Uchuu.Senkan.Yamato.2199.E03.avi", 3)]
         // TODO: [InlineData("Season 4/Uchuu.Senkan.Yamato.2199.E03.avi", 3)]
         // TODO: [InlineData("Season 2/7 12 Angry Men.avi", 7)]
         // TODO: [InlineData("Season 2/7 12 Angry Men.avi", 7)]
         // TODO: [InlineData("Season 02/02x03x04x15 - Ep Name.mp4", 2)]
         // TODO: [InlineData("Season 02/02x03x04x15 - Ep Name.mp4", 2)]
-        // TODO: [InlineData("Season 2/[HorribleSubs] Hunter X Hunter - 136 [720p].mkv", 136)]
         public void GetEpisodeNumberFromFileTest(string path, int? expected)
         public void GetEpisodeNumberFromFileTest(string path, int? expected)
         {
         {
             var result = new EpisodePathParser(_namingOptions)
             var result = new EpisodePathParser(_namingOptions)