using System ;
using System.Xml ;
using MediaBrowser.Common.Configuration ;
using MediaBrowser.Controller.Entities.TV ;
using MediaBrowser.Controller.Library ;
using MediaBrowser.Controller.Providers ;
using MediaBrowser.Model.Entities ;
using Microsoft.Extensions.Logging ;
namespace MediaBrowser.XbmcMetadata.Parsers
{
/// <summary>
/// Nfo parser for series.
/// </summary>
public class SeriesNfoParser : BaseNfoParser < Series >
{
/// <summary>
/// Initializes a new instance of the <see cref="SeriesNfoParser"/> class.
/// </summary>
/// <param name="logger">The logger.</param>
/// <param name="config">the configuration manager.</param>
/// <param name="providerManager">The provider manager.</param>
public SeriesNfoParser ( ILogger logger , IConfigurationManager config , IProviderManager providerManager )
: base ( logger , config , providerManager )
{
}
/// <inheritdoc />
protected override bool SupportsUrlAfterClosingXmlTag = > true ;
/// <inheritdoc />
protected override string MovieDbParserSearchString = > "themoviedb.org/tv/" ;
/// <inheritdoc />
protected override void FetchDataFromXmlNode ( XmlReader reader , MetadataResult < Series > itemResult )
{
var item = itemResult . Item ;
switch ( reader . Name )
{
case "id" :
{
string imdbId = reader . GetAttribute ( "IMDB" ) ;
string tmdbId = reader . GetAttribute ( "TMDB" ) ;
string tvdbId = reader . GetAttribute ( "TVDB" ) ;
if ( string . IsNullOrWhiteSpace ( tvdbId ) )
{
tvdbId = reader . ReadElementContentAsString ( ) ;
}
if ( ! string . IsNullOrWhiteSpace ( imdbId ) )
{
item . SetProviderId ( MetadataProvider . Imdb , imdbId ) ;
}
if ( ! string . IsNullOrWhiteSpace ( tmdbId ) )
{
item . SetProviderId ( MetadataProvider . Tmdb , tmdbId ) ;
}
if ( ! string . IsNullOrWhiteSpace ( tvdbId ) )
{
item . SetProviderId ( MetadataProvider . Tvdb , tvdbId ) ;
}
break ;
}
case "airs_dayofweek" :
{
item . AirDays = TVUtils . GetAirDays ( reader . ReadElementContentAsString ( ) ) ;
break ;
}
case "airs_time" :
{
var val = reader . ReadElementContentAsString ( ) ;
if ( ! string . IsNullOrWhiteSpace ( val ) )
{
item . AirTime = val ;
}
break ;
}
case "status" :
{
var status = reader . ReadElementContentAsString ( ) ;
if ( ! string . IsNullOrWhiteSpace ( status ) )
{
if ( Enum . TryParse ( status , true , out SeriesStatus seriesStatus ) )
{
item . Status = seriesStatus ;
}
else
{
Logger . LogInformation ( "Unrecognized series status: " + status ) ;
}
}
break ;
}
default :
base . FetchDataFromXmlNode ( reader , itemResult ) ;
break ;
}
}
}
}