diff options
| author | Luke <luke.pulverenti@gmail.com> | 2013-05-23 20:41:50 -0700 |
|---|---|---|
| committer | Luke <luke.pulverenti@gmail.com> | 2013-05-23 20:41:50 -0700 |
| commit | 3e656f5a372d81b82521ff488fbe7d4fc678be2d (patch) | |
| tree | baea74f2b041ce41ccf1cd2f2ef30b1b2815ca4f /MediaBrowser.Controller | |
| parent | 7a5565a37b2493a575502192087bc37022214dde (diff) | |
| parent | 96a4f93e7cb733feb7f563878f30cb9749612a57 (diff) | |
Merge pull request #303 from lalmanzar/issue_286_phase1
Issue 286 phase1
Diffstat (limited to 'MediaBrowser.Controller')
| -rw-r--r-- | MediaBrowser.Controller/Entities/TV/Episode.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Library/TVUtils.cs | 53 |
2 files changed, 53 insertions, 6 deletions
diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs index dd1434cea..2f1e036e0 100644 --- a/MediaBrowser.Controller/Entities/TV/Episode.cs +++ b/MediaBrowser.Controller/Entities/TV/Episode.cs @@ -176,6 +176,12 @@ namespace MediaBrowser.Controller.Entities.TV } /// <summary> + /// This is the ending episode number for double episodes. + /// </summary> + /// <value>The index number.</value> + public int? IndexNumberEnd { get; set; } + + /// <summary> /// Creates the name of the sort. /// </summary> /// <returns>System.String.</returns> diff --git a/MediaBrowser.Controller/Library/TVUtils.cs b/MediaBrowser.Controller/Library/TVUtils.cs index 6a220c6d7..9538e927a 100644 --- a/MediaBrowser.Controller/Library/TVUtils.cs +++ b/MediaBrowser.Controller/Library/TVUtils.cs @@ -44,19 +44,48 @@ namespace MediaBrowser.Controller.Library new Regex( @".*\\[s|S]?(?<seasonnumber>\d{1,2})[x|X](?<epnumber>\d{1,3})[^\\]*$", RegexOptions.Compiled), - // 01x02 blah.avi S01x01 balh.avi new Regex( - @".*\\[s|S](?<seasonnumber>\d{1,2})x?[e|E](?<epnumber>\d{1,3})[^\\]*$", + @".*\\[s|S](?<seasonnumber>\d{1,2})[x,X]?[e|E](?<epnumber>\d{1,3})[^\\]*$", RegexOptions.Compiled), - // S01E02 blah.avi, S01xE01 blah.avi new Regex( - @".*\\(?<seriesname>[^\\]*)[s|S]?(?<seasonnumber>\d{1,2})[x|X](?<epnumber>\d{1,3})[^\\]*$", + @".*\\(?<seriesname>((?![s|S]?\d{1,2}[x|X]\d{1,3})[^\\])*)?([s|S]?(?<seasonnumber>\d{1,2})[x|X](?<epnumber>\d{1,3}))[^\\]*$", RegexOptions.Compiled), - // 01x02 blah.avi S01x01 balh.avi new Regex( @".*\\(?<seriesname>[^\\]*)[s|S](?<seasonnumber>\d{1,2})[x|X|\.]?[e|E](?<epnumber>\d{1,3})[^\\]*$", RegexOptions.Compiled) - // S01E02 blah.avi, S01xE01 blah.avi + }; + private static readonly Regex[] MultipleEpisodeExpressions = new[] + { + new Regex( + @".*\\[s|S]?(?<seasonnumber>\d{1,2})[x|X](?<epnumber>\d{1,3})([ |-]{1,3}\d{1,2}[e|E|x|X](?<endingepnumber>\d{1,3}))+[^\\]*$", + RegexOptions.Compiled), + new Regex( + @".*\\[s|S]?(?<seasonnumber>\d{1,2})[x|X](?<epnumber>\d{1,3})([ |-]{1,3}\d{1,2}[x|X][e|E](?<endingepnumber>\d{1,3}))+[^\\]*$", + RegexOptions.Compiled), + new Regex( + @".*\\[s|S]?(?<seasonnumber>\d{1,2})[x|X](?<epnumber>\d{1,3})([ |-]{0,3}[x|X|e|E](?<endingepnumber>\d{1,3}))+[^\\]*$", + RegexOptions.Compiled), + new Regex( + @".*\\[s|S]?(?<seasonnumber>\d{1,2})[x|X](?<epnumber>\d{1,3})([ |-]{1,3}[x|E]?[e|E]?(?<endingepnumber>\d{1,3}))+[^\\]*$", + RegexOptions.Compiled), + new Regex( + @".*\\(?<seriesname>((?![s|S]?\d{1,2}[x|X]\d{1,3})[^\\])*)?([s|S]?(?<seasonnumber>\d{1,2})[x|X](?<epnumber>\d{1,3}))([ |-]{1,3}\d{1,2}[x|X|e|E](?<endingepnumber>\d{1,3}))+[^\\]*$", + RegexOptions.Compiled), + new Regex( + @".*\\(?<seriesname>((?![s|S]?\d{1,2}[x|X]\d{1,3})[^\\])*)?([s|S]?(?<seasonnumber>\d{1,2})[x|X](?<epnumber>\d{1,3}))([ |-]{1,3}\d{1,2}[x|X][e|E](?<endingepnumber>\d{1,3}))+[^\\]*$", + RegexOptions.Compiled), + new Regex( + @".*\\(?<seriesname>((?![s|S]?\d{1,2}[x|X]\d{1,3})[^\\])*)?([s|S]?(?<seasonnumber>\d{1,2})[x|X](?<epnumber>\d{1,3}))([ |-]{0,3}[x|X|e|E](?<endingepnumber>\d{1,3}))+[^\\]*$", + RegexOptions.Compiled), + new Regex( + @".*\\(?<seriesname>((?![s|S]?\d{1,2}[x|X]\d{1,3})[^\\])*)?([s|S]?(?<seasonnumber>\d{1,2})[x|X](?<epnumber>\d{1,3}))([ |-]{1,3}[x|X]?[e|E]?(?<endingepnumber>\d{1,3}))+[^\\]*$", + RegexOptions.Compiled), + new Regex( + @".*\\(?<seriesname>[^\\]*)[s|S](?<seasonnumber>\d{1,2})[x|X|\.]?[e|E](?<epnumber>\d{1,3})([ |-]{0,3}[x|X|e|E](?<endingepnumber>\d{1,3}))+[^\\]*$", + RegexOptions.Compiled), + new Regex( + @".*\\(?<seriesname>[^\\]*)[s|S](?<seasonnumber>\d{1,2})[x|X|\.]?[e|E](?<epnumber>\d{1,3})([ |-]{1,3}[x|X]?[e|E]?(?<endingepnumber>\d{1,3}))+[^\\]*$", + RegexOptions.Compiled) }; /// <summary> @@ -224,6 +253,18 @@ namespace MediaBrowser.Controller.Library return null; } + public static int? GetEndingEpisodeNumberFromFile(string fullPath) + { + var fl = fullPath.ToLower(); + foreach (var r in MultipleEpisodeExpressions) + { + var m = r.Match(fl); + if (m.Success && !string.IsNullOrEmpty(m.Groups["endingepnumber"].Value)) + return ParseEpisodeNumber(m.Groups["endingepnumber"].Value); + } + return null; + } + private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); private static int? ParseEpisodeNumber(string val) |
