mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
parse episode index number at resolve time
This commit is contained in:
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…
x
Reference in New Issue
Block a user