From decd3d94803b7b347fb6ebaeb32b0a0004fdfe07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Miguel=20Alm=C3=A1nzar?= Date: Fri, 12 Jul 2013 21:53:33 -0400 Subject: [PATCH] fix #390 - --- MediaBrowser.Controller/Library/TVUtils.cs | 28 ++++++++++----------- MediaBrowser.Tests/Resolvers/TvUtilTests.cs | 3 +++ 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/MediaBrowser.Controller/Library/TVUtils.cs b/MediaBrowser.Controller/Library/TVUtils.cs index d8a715b0fe..7a5722746e 100644 --- a/MediaBrowser.Controller/Library/TVUtils.cs +++ b/MediaBrowser.Controller/Library/TVUtils.cs @@ -43,49 +43,49 @@ namespace MediaBrowser.Controller.Library private static readonly Regex[] EpisodeExpressions = new[] { new Regex( - @".*\\[s|S]?(?\d{1,4})[x|X](?\d{1,3})[^\\]*$", + @".*\\[sS]?(?\d{1,4})[xX](?\d{1,3})[^\\]*$", RegexOptions.Compiled), new Regex( - @".*\\[s|S](?\d{1,4})[x,X]?[e|E](?\d{1,3})[^\\]*$", + @".*\\[sS](?\d{1,4})[x,X]?[eE](?\d{1,3})[^\\]*$", RegexOptions.Compiled), new Regex( - @".*\\(?((?![s|S]?\d{1,4}[x|X]\d{1,3})[^\\])*)?([s|S]?(?\d{1,4})[x|X](?\d{1,3}))[^\\]*$", + @".*\\(?((?![sS]?\d{1,4}[xX]\d{1,3})[^\\])*)?([sS]?(?\d{1,4})[xX](?\d{1,3}))[^\\]*$", RegexOptions.Compiled), new Regex( - @".*\\(?[^\\]*)[s|S](?\d{1,4})[x|X|\.]?[e|E](?\d{1,3})[^\\]*$", + @".*\\(?[^\\]*)[sS](?\d{1,4})[xX\.]?[eE](?\d{1,3})[^\\]*$", RegexOptions.Compiled) }; private static readonly Regex[] MultipleEpisodeExpressions = new[] { new Regex( - @".*\\[s|S]?(?\d{1,4})[x|X](?\d{1,3})([ |-]{1,3}\d{1,4}[e|E|x|X](?\d{1,3}))+[^\\]*$", + @".*\\[sS]?(?\d{1,4})[xX](?\d{1,3})((-| - )\d{1,4}[eExX](?\d{1,3}))+[^\\]*$", RegexOptions.Compiled), new Regex( - @".*\\[s|S]?(?\d{1,4})[x|X](?\d{1,3})([ |-]{1,3}\d{1,4}[x|X][e|E](?\d{1,3}))+[^\\]*$", + @".*\\[sS]?(?\d{1,4})[xX](?\d{1,3})((-| - )\d{1,4}[xX][eE](?\d{1,3}))+[^\\]*$", RegexOptions.Compiled), new Regex( - @".*\\[s|S]?(?\d{1,4})[x|X](?\d{1,3})([ |-]{0,3}[x|X|e|E](?\d{1,3}))+[^\\]*$", + @".*\\[sS]?(?\d{1,4})[xX](?\d{1,3})((-| - )?[xXeE](?\d{1,3}))+[^\\]*$", RegexOptions.Compiled), new Regex( - @".*\\[s|S]?(?\d{1,4})[x|X](?\d{1,3})([ |-]{1,3}[x|E]?[e|E]?(?\d{1,3}))+[^\\]*$", + @".*\\[sS]?(?\d{1,4})[xX](?\d{1,3})(-[xE]?[eE]?(?\d{1,3}))+[^\\]*$", RegexOptions.Compiled), new Regex( - @".*\\(?((?![s|S]?\d{1,4}[x|X]\d{1,3})[^\\])*)?([s|S]?(?\d{1,4})[x|X](?\d{1,3}))([ |-]{1,3}\d{1,4}[x|X|e|E](?\d{1,3}))+[^\\]*$", + @".*\\(?((?![sS]?\d{1,4}[xX]\d{1,3})[^\\])*)?([sS]?(?\d{1,4})[xX](?\d{1,3}))((-| - )\d{1,4}[xXeE](?\d{1,3}))+[^\\]*$", RegexOptions.Compiled), new Regex( - @".*\\(?((?![s|S]?\d{1,4}[x|X]\d{1,3})[^\\])*)?([s|S]?(?\d{1,4})[x|X](?\d{1,3}))([ |-]{1,3}\d{1,4}[x|X][e|E](?\d{1,3}))+[^\\]*$", + @".*\\(?((?![sS]?\d{1,4}[xX]\d{1,3})[^\\])*)?([sS]?(?\d{1,4})[xX](?\d{1,3}))((-| - )\d{1,4}[xX][eE](?\d{1,3}))+[^\\]*$", RegexOptions.Compiled), new Regex( - @".*\\(?((?![s|S]?\d{1,4}[x|X]\d{1,3})[^\\])*)?([s|S]?(?\d{1,4})[x|X](?\d{1,3}))([ |-]{0,3}[x|X|e|E](?\d{1,3}))+[^\\]*$", + @".*\\(?((?![sS]?\d{1,4}[xX]\d{1,3})[^\\])*)?([sS]?(?\d{1,4})[xX](?\d{1,3}))((-| - )?[xXeE](?\d{1,3}))+[^\\]*$", RegexOptions.Compiled), new Regex( - @".*\\(?((?![s|S]?\d{1,4}[x|X]\d{1,3})[^\\])*)?([s|S]?(?\d{1,4})[x|X](?\d{1,3}))([ |-]{1,3}[x|X]?[e|E]?(?\d{1,3}))+[^\\]*$", + @".*\\(?((?![sS]?\d{1,4}[xX]\d{1,3})[^\\])*)?([sS]?(?\d{1,4})[xX](?\d{1,3}))(-[xX]?[eE]?(?\d{1,3}))+[^\\]*$", RegexOptions.Compiled), new Regex( - @".*\\(?[^\\]*)[s|S](?\d{1,4})[x|X|\.]?[e|E](?\d{1,3})([ |-]{0,3}[x|X|e|E](?\d{1,3}))+[^\\]*$", + @".*\\(?[^\\]*)[sS](?\d{1,4})[xX\.]?[eE](?\d{1,3})((-| - )?[xXeE](?\d{1,3}))+[^\\]*$", RegexOptions.Compiled), new Regex( - @".*\\(?[^\\]*)[s|S](?\d{1,4})[x|X|\.]?[e|E](?\d{1,3})([ |-]{1,3}[x|X]?[e|E]?(?\d{1,3}))+[^\\]*$", + @".*\\(?[^\\]*)[sS](?\d{1,4})[xX\.]?[eE](?\d{1,3})(-[xX]?[eE]?(?\d{1,3}))+[^\\]*$", RegexOptions.Compiled) }; diff --git a/MediaBrowser.Tests/Resolvers/TvUtilTests.cs b/MediaBrowser.Tests/Resolvers/TvUtilTests.cs index 51229a22c0..fc809306a8 100644 --- a/MediaBrowser.Tests/Resolvers/TvUtilTests.cs +++ b/MediaBrowser.Tests/Resolvers/TvUtilTests.cs @@ -64,6 +64,8 @@ namespace MediaBrowser.Tests.Resolvers Assert.AreEqual(null, TVUtils.GetEndingEpisodeNumberFromFile(@"Season 1\seriesname S01x02 blah.avi")); Assert.AreEqual(null, TVUtils.GetEndingEpisodeNumberFromFile(@"Season 1\seriesname S01E02 blah.avi")); Assert.AreEqual(null, TVUtils.GetEndingEpisodeNumberFromFile(@"Season 1\seriesname S01xE02 blah.avi")); + Assert.AreEqual(null, TVUtils.GetEndingEpisodeNumberFromFile(@"Season 2\02x03 - 04 Ep Name.ext")); + Assert.AreEqual(null, TVUtils.GetEndingEpisodeNumberFromFile(@"Season 2\My show name 02x03 - 04 Ep Name.ext")); Assert.AreEqual(15, TVUtils.GetEndingEpisodeNumberFromFile(@"Season 2\Elementary - 02x03 - 02x04 - 02x15 - Ep Name.ext")); Assert.AreEqual(15, TVUtils.GetEndingEpisodeNumberFromFile(@"Season 2\02x03 - 02x04 - 02x15 - Ep Name.ext")); Assert.AreEqual(15, TVUtils.GetEndingEpisodeNumberFromFile(@"Season 2\02x03-04-15 - Ep Name.ext")); @@ -77,6 +79,7 @@ namespace MediaBrowser.Tests.Resolvers Assert.AreEqual(26, TVUtils.GetEndingEpisodeNumberFromFile(@"Season 1\Elementary - S01E23-E24-E26 - The Woman.mp4")); Assert.AreEqual(26, TVUtils.GetEndingEpisodeNumberFromFile(@"Season 1\S01E23-E24-E26 - The Woman.mp4")); + //Four Digits seasons Assert.AreEqual(null, TVUtils.GetEndingEpisodeNumberFromFile(@"Season 2009\2009x02 blah.avi")); Assert.AreEqual(null, TVUtils.GetEndingEpisodeNumberFromFile(@"Season 2009\S2009x02 blah.avi"));