parse episode index number at resolve time

This commit is contained in:
Luke Pulverenti
2013-05-19 13:05:33 -04:00
parent b2163c77dc
commit f9c00a6145
3 changed files with 43 additions and 20 deletions

View File

@@ -1,4 +1,5 @@
using MediaBrowser.Controller.Resolvers;
using System.Globalization;
using MediaBrowser.Controller.Resolvers;
using System;
using System.Collections.Generic;
using System.IO;
@@ -184,8 +185,7 @@ namespace MediaBrowser.Controller.Library
}
else
{
if (EntityResolutionHelper.IsVideoFile(child.FullName) &&
!string.IsNullOrEmpty(EpisodeNumberFromFile(child.FullName, false)))
if (EntityResolutionHelper.IsVideoFile(child.FullName) && GetEpisodeNumberFromFile(child.FullName, false).HasValue)
{
return true;
}
@@ -201,14 +201,14 @@ namespace MediaBrowser.Controller.Library
/// <param name="fullPath">The full path.</param>
/// <param name="isInSeason">if set to <c>true</c> [is in season].</param>
/// <returns>System.String.</returns>
public static string EpisodeNumberFromFile(string fullPath, bool isInSeason)
public static int? GetEpisodeNumberFromFile(string fullPath, bool isInSeason)
{
string fl = fullPath.ToLower();
foreach (var r in EpisodeExpressions)
{
Match m = r.Match(fl);
if (m.Success)
return m.Groups["epnumber"].Value;
return ParseEpisodeNumber(m.Groups["epnumber"].Value);
}
if (isInSeason)
{
@@ -217,13 +217,27 @@ namespace MediaBrowser.Controller.Library
if (match != null)
{
return match.Value;
return ParseEpisodeNumber(match.Value);
}
}
return null;
}
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
private static int? ParseEpisodeNumber(string val)
{
int num;
if (!string.IsNullOrEmpty(val) && int.TryParse(val, NumberStyles.Integer, UsCulture, out num))
{
return num;
}
return null;
}
/// <summary>
/// Seasons the number from episode file.
/// </summary>

View File

@@ -144,18 +144,16 @@ namespace MediaBrowser.Controller.Providers.TV
{
string location = episode.Path;
string epNum = TVUtils.EpisodeNumberFromFile(location, episode.Season != null);
var episodeNumber = episode.IndexNumber ?? TVUtils.GetEpisodeNumberFromFile(location, episode.Season != null);
var status = ProviderRefreshStatus.Success;
if (epNum == null)
if (episodeNumber == null)
{
Logger.Warn("TvDbProvider: Could not determine episode number for: " + episode.Path);
return status;
}
var episodeNumber = Int32.Parse(epNum);
episode.IndexNumber = episodeNumber;
var usingAbsoluteData = false;