8421e3ad5c
Expanded .editorconfig to silence non-critical IDE/StyleCop warnings and updated Emby.Naming.csproj to prevent warnings-as-errors in Debug. Refactored codebase for modern C# style, removed unused code and unnecessary usings, and fixed formatting and StringComparison issues. Added detailed documentation on code style and warning suppression. Project now builds cleanly with only critical issues surfaced.
76 lines
2.7 KiB
C#
76 lines
2.7 KiB
C#
// <copyright file="SeriesResolver.cs" company="PlaceholderCompany">
|
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
|
// </copyright>
|
|
|
|
namespace Emby.Naming.TV
|
|
{
|
|
using System.IO;
|
|
using System.Text.RegularExpressions;
|
|
using Emby.Naming.Common;
|
|
|
|
/// <summary>
|
|
/// Used to resolve information about series from path.
|
|
/// </summary>
|
|
public static partial class SeriesResolver
|
|
{
|
|
/// <summary>
|
|
/// Regex that matches strings of at least 2 characters separated by a dot or underscore.
|
|
/// Used for removing separators between words, i.e turns "The_show" into "The show" while
|
|
/// preserving names like "S.H.O.W".
|
|
/// </summary>
|
|
[GeneratedRegex(@"((?<a>[^\._]{2,})[\._]*)|([\._](?<b>[^\._]{2,}))")]
|
|
private static partial Regex SeriesNameRegex();
|
|
|
|
/// <summary>
|
|
/// Regex that matches titles with year in parentheses. Captures the title (which may be
|
|
/// numeric) before the year, i.e. turns "1923 (2022)" into "1923".
|
|
/// </summary>
|
|
[GeneratedRegex(@"(?<title>.+?)\s*\(\d{4}\)")]
|
|
private static partial Regex TitleWithYearRegex();
|
|
|
|
/// <summary>
|
|
/// Resolve information about series from path.
|
|
/// </summary>
|
|
/// <param name="options"><see cref="NamingOptions"/> object passed to <see cref="SeriesPathParser"/>.</param>
|
|
/// <param name="path">Path to series.</param>
|
|
/// <returns>SeriesInfo.</returns>
|
|
public static SeriesInfo Resolve(NamingOptions options, string path)
|
|
{
|
|
string seriesName = Path.GetFileName(path);
|
|
|
|
// First check if the filename matches a title with year pattern (handles numeric titles)
|
|
if (!string.IsNullOrEmpty(seriesName))
|
|
{
|
|
var titleWithYearMatch = TitleWithYearRegex().Match(seriesName);
|
|
if (titleWithYearMatch.Success)
|
|
{
|
|
seriesName = titleWithYearMatch.Groups["title"].Value.Trim();
|
|
return new SeriesInfo(path)
|
|
{
|
|
Name = seriesName
|
|
};
|
|
}
|
|
}
|
|
|
|
SeriesPathParserResult result = SeriesPathParser.Parse(options, path);
|
|
if (result.Success)
|
|
{
|
|
if (!string.IsNullOrEmpty(result.SeriesName))
|
|
{
|
|
seriesName = result.SeriesName;
|
|
}
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(seriesName))
|
|
{
|
|
seriesName = SeriesNameRegex().Replace(seriesName, "${a} ${b}").Trim();
|
|
}
|
|
|
|
return new SeriesInfo(path)
|
|
{
|
|
Name = seriesName
|
|
};
|
|
}
|
|
}
|
|
}
|