@ -3,30 +3,24 @@ using System.Globalization;
using System.IO ;
using System.Linq ;
using Emby.Naming.Common ;
using Emby.Naming.Extensions ;
namespace Emby.Naming.TV
{
public class SeasonPathParser
{
private readonly NamingOptions _options ;
public SeasonPathParser ( NamingOptions options )
{
_options = options ;
}
public SeasonPathParserResult Parse ( string path , bool supportSpecialAliases , bool supportNumericSeasonFolders )
{
var result = new SeasonPathParserResult ( ) ;
var seasonNumberInfo = GetSeasonNumberFromPath ( path , supportSpecialAliases , supportNumericSeasonFolders ) ;
result . SeasonNumber = seasonNumberInfo . Item1 ;
result . SeasonNumber = seasonNumberInfo . seasonNumber ;
if ( result . SeasonNumber . HasValue )
{
result . Success = true ;
result . IsSeasonFolder = seasonNumberInfo . Item2 ;
result . IsSeasonFolder = seasonNumberInfo . isSeasonFolder ;
}
return result ;
@ -35,7 +29,7 @@ namespace Emby.Naming.TV
/// <summary>
/// A season folder must contain one of these somewhere in the name
/// </summary>
private static readonly string [ ] S easonFolderNames =
private static readonly string [ ] _s easonFolderNames =
{
"season" ,
"sæson" ,
@ -54,19 +48,23 @@ namespace Emby.Naming.TV
/// <param name="supportSpecialAliases">if set to <c>true</c> [support special aliases].</param>
/// <param name="supportNumericSeasonFolders">if set to <c>true</c> [support numeric season folders].</param>
/// <returns>System.Nullable{System.Int32}.</returns>
private Tuple < int? , bool > GetSeasonNumberFromPath ( string path , bool supportSpecialAliases , bool supportNumericSeasonFolders )
private static ( int? seasonNumber , bool isSeasonFolder ) GetSeasonNumberFromPath (
string path ,
bool supportSpecialAliases ,
bool supportNumericSeasonFolders )
{
var filename = Path . GetFileName ( path ) ;
var filename = Path . GetFileName ( path ) ? ? string . Empty ;
if ( supportSpecialAliases )
{
if ( string . Equals ( filename , "specials" , StringComparison . OrdinalIgnoreCase ) )
{
return new Tuple < int? , bool > ( 0 , true ) ;
return ( 0 , true ) ;
}
if ( string . Equals ( filename , "extras" , StringComparison . OrdinalIgnoreCase ) )
{
return new Tuple < int? , bool > ( 0 , true ) ;
return ( 0 , true ) ;
}
}
@ -74,7 +72,7 @@ namespace Emby.Naming.TV
{
if ( int . TryParse ( filename , NumberStyles . Integer , CultureInfo . InvariantCulture , out var val ) )
{
return new Tuple < int? , bool > ( val , true ) ;
return ( val , true ) ;
}
}
@ -84,12 +82,12 @@ namespace Emby.Naming.TV
if ( int . TryParse ( testFilename , NumberStyles . Integer , CultureInfo . InvariantCulture , out var val ) )
{
return new Tuple < int? , bool > ( val , true ) ;
return ( val , true ) ;
}
}
// Look for one of the season folder names
foreach ( var name in S easonFolderNames)
foreach ( var name in _s easonFolderNames)
{
var index = filename . IndexOf ( name , StringComparison . OrdinalIgnoreCase ) ;
@ -107,10 +105,10 @@ namespace Emby.Naming.TV
var parts = filename . Split ( new [ ] { '.' , '_' , ' ' , '-' } , StringSplitOptions . RemoveEmptyEntries ) ;
var resultNumber = parts . Select ( GetSeasonNumberFromPart ) . FirstOrDefault ( i = > i . HasValue ) ;
return new Tuple < int? , bool > ( resultNumber , true ) ;
return ( resultNumber , true ) ;
}
private int? GetSeasonNumberFromPart ( string part )
private static int? GetSeasonNumberFromPart ( string part )
{
if ( part . Length < 2 | | ! part . StartsWith ( "s" , StringComparison . OrdinalIgnoreCase ) )
{
@ -132,7 +130,7 @@ namespace Emby.Naming.TV
/// </summary>
/// <param name="path">The path.</param>
/// <returns>System.Nullable{System.Int32}.</returns>
private Tuple < int? , bool > GetSeasonNumberFromPathSubstring ( string path )
private static ( int? seasonNumber , bool isSeasonFolder ) GetSeasonNumberFromPathSubstring ( string path )
{
var numericStart = - 1 ;
var length = 0 ;
@ -174,10 +172,10 @@ namespace Emby.Naming.TV
if ( numericStart = = - 1 )
{
return new Tuple < int? , bool > ( null , isSeasonFolder ) ;
return ( null , isSeasonFolder ) ;
}
return new Tuple < int? , bool > ( int . Parse ( path . Substring ( numericStart , length ) , CultureInfo . InvariantCulture ) , isSeasonFolder ) ;
return ( int . Parse ( path . Substring ( numericStart , length ) , CultureInfo . InvariantCulture ) , isSeasonFolder ) ;
}
}
}