using System.Collections.Generic; using System.Globalization; using System.Text.RegularExpressions; namespace Emby.Naming.Video { /// <summary> /// <see href="http://kodi.wiki/view/Advancedsettings.xml#video" />. /// </summary> public static class CleanDateTimeParser { /// <summary> /// Attempts to clean the name. /// </summary> /// <param name="name">Name of video.</param> /// <param name="cleanDateTimeRegexes">Optional list of regexes to clean the name.</param> /// <returns>Returns <see cref="CleanDateTimeResult"/> object.</returns> public static CleanDateTimeResult Clean(string name, IReadOnlyList<Regex> cleanDateTimeRegexes) { CleanDateTimeResult result = new CleanDateTimeResult(name); if (string.IsNullOrEmpty(name)) { return result; } var len = cleanDateTimeRegexes.Count; for (int i = 0; i < len; i++) { if (TryClean(name, cleanDateTimeRegexes[i], ref result)) { return result; } } return result; } private static bool TryClean(string name, Regex expression, ref CleanDateTimeResult result) { var match = expression.Match(name); if (match.Success && match.Groups.Count == 5 && match.Groups[1].Success && match.Groups[2].Success && int.TryParse(match.Groups[2].Value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var year)) { result = new CleanDateTimeResult(match.Groups[1].Value.TrimEnd(), year); return true; } return false; } } }