parse episode index number at resolve time

pull/702/head
Luke Pulverenti 12 years ago
parent b2163c77dc
commit f9c00a6145

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

@ -144,18 +144,16 @@ namespace MediaBrowser.Controller.Providers.TV
{ {
string location = episode.Path; 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; var status = ProviderRefreshStatus.Success;
if (epNum == null) if (episodeNumber == null)
{ {
Logger.Warn("TvDbProvider: Could not determine episode number for: " + episode.Path); Logger.Warn("TvDbProvider: Could not determine episode number for: " + episode.Path);
return status; return status;
} }
var episodeNumber = Int32.Parse(epNum);
episode.IndexNumber = episodeNumber; episode.IndexNumber = episodeNumber;
var usingAbsoluteData = false; var usingAbsoluteData = false;

@ -18,30 +18,41 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV
/// <returns>Episode.</returns> /// <returns>Episode.</returns>
protected override Episode Resolve(ItemResolveArgs args) protected override Episode Resolve(ItemResolveArgs args)
{ {
var isInSeason = args.Parent is Season;
// If the parent is a Season or Series, then this is an Episode if the VideoResolver returns something // If the parent is a Season or Series, then this is an Episode if the VideoResolver returns something
if (args.Parent is Season || args.Parent is Series) if (isInSeason || args.Parent is Series)
{ {
if (args.IsDirectory) if (args.IsDirectory)
{ {
if (args.ContainsFileSystemEntryByName("video_ts")) if (args.ContainsFileSystemEntryByName("video_ts"))
{ {
return new Episode return new Episode
{ {
Path = args.Path, IndexNumber = TVUtils.GetEpisodeNumberFromFile(args.Path, isInSeason),
VideoType = VideoType.Dvd Path = args.Path,
}; VideoType = VideoType.Dvd
};
} }
if (args.ContainsFileSystemEntryByName("bdmv")) if (args.ContainsFileSystemEntryByName("bdmv"))
{ {
return new Episode return new Episode
{ {
Path = args.Path, IndexNumber = TVUtils.GetEpisodeNumberFromFile(args.Path, isInSeason),
VideoType = VideoType.BluRay Path = args.Path,
}; VideoType = VideoType.BluRay
};
} }
} }
return base.Resolve(args); var episide = base.Resolve(args);
if (episide != null)
{
episide.IndexNumber = TVUtils.GetEpisodeNumberFromFile(args.Path, isInSeason);
}
return episide;
} }
return null; return null;

Loading…
Cancel
Save