using System; using System.Text.RegularExpressions; namespace Emby.Naming.Common { /// <summary> /// Regular expressions for parsing TV Episodes. /// </summary> public class EpisodeExpression { private string _expression; private Regex? _regex; /// <summary> /// Initializes a new instance of the <see cref="EpisodeExpression"/> class. /// </summary> /// <param name="expression">Regular expressions.</param> /// <param name="byDate">True if date is expected.</param> public EpisodeExpression(string expression, bool byDate = false) { _expression = expression; IsByDate = byDate; DateTimeFormats = Array.Empty<string>(); SupportsAbsoluteEpisodeNumbers = true; } /// <summary> /// Gets or sets raw expressions string. /// </summary> public string Expression { get => _expression; set { _expression = value; _regex = null; } } /// <summary> /// Gets or sets a value indicating whether gets or sets property indicating if date can be find in expression. /// </summary> public bool IsByDate { get; set; } /// <summary> /// Gets or sets a value indicating whether gets or sets property indicating if expression is optimistic. /// </summary> public bool IsOptimistic { get; set; } /// <summary> /// Gets or sets a value indicating whether gets or sets property indicating if expression is named. /// </summary> public bool IsNamed { get; set; } /// <summary> /// Gets or sets a value indicating whether gets or sets property indicating if expression supports episodes with absolute numbers. /// </summary> public bool SupportsAbsoluteEpisodeNumbers { get; set; } /// <summary> /// Gets or sets optional list of date formats used for date parsing. /// </summary> public string[] DateTimeFormats { get; set; } /// <summary> /// Gets a <see cref="Regex"/> expressions objects (creates it if null). /// </summary> public Regex Regex => _regex ??= new Regex(Expression, RegexOptions.IgnoreCase | RegexOptions.Compiled); } }