refactor: reduce cognitive complexity in FileNameBuilder.GetLanguagesToken (#108)

Extract helper methods:
- NormalizeLanguageCode: handles ISO639B mapping and culture conversion
- ApplyLanguageFilter: handles include/exclude filter logic

Uses LINQ for cleaner initial token processing.

Closes #75

Co-authored-by: admin <admin@ardentleatherworks.com>
This commit is contained in:
Cody Kickertz 2025-12-21 14:00:42 -06:00 committed by GitHub
parent 663cc841da
commit 1bf1de8618
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -466,71 +466,66 @@ private static string GetCustomFormatsToken(List<CustomFormat> customFormats, st
private static string GetLanguagesToken(List<string> mediaInfoLanguages, string filter, bool skipEnglishOnly, bool quoted)
{
var tokens = new List<string>();
foreach (var item in mediaInfoLanguages)
{
if (!string.IsNullOrWhiteSpace(item) && item != "und")
{
tokens.Add(item.Trim());
}
}
var tokens = mediaInfoLanguages
.Where(item => !string.IsNullOrWhiteSpace(item) && item != "und")
.Select(item => NormalizeLanguageCode(item.Trim()))
.Distinct()
.ToList();
for (var i = 0; i < tokens.Count; i++)
{
try
{
var token = tokens[i].ToLowerInvariant();
if (Iso639BTMap.TryGetValue(token, out var mapped))
{
token = mapped;
}
var filteredTokens = ApplyLanguageFilter(tokens, filter);
var cultureInfo = new CultureInfo(token);
tokens[i] = cultureInfo.TwoLetterISOLanguageName.ToUpper();
}
catch
{
}
}
tokens = tokens.Distinct().ToList();
var filteredTokens = tokens;
// Exclude or filter
if (filter.IsNotNullOrWhiteSpace())
{
if (filter.StartsWith("-"))
{
filteredTokens = tokens.Except(filter.Split('-')).ToList();
}
else
{
filteredTokens = filter.Split('+').Intersect(tokens).ToList();
}
}
// Replace with wildcard (maybe too limited)
if (filter.IsNotNullOrWhiteSpace() && filter.EndsWith("+") && filteredTokens.Count != tokens.Count)
{
filteredTokens.Add("--");
}
if (skipEnglishOnly && filteredTokens.Count == 1 && filteredTokens.First() == "EN")
if (skipEnglishOnly && filteredTokens.Count == 1 && filteredTokens[0] == "EN")
{
return string.Empty;
}
var response = string.Join("+", filteredTokens);
if (quoted && response.IsNotNullOrWhiteSpace())
return quoted && response.IsNotNullOrWhiteSpace() ? $"[{response}]" : response;
}
private static string NormalizeLanguageCode(string token)
{
try
{
return $"[{response}]";
var normalized = token.ToLowerInvariant();
if (Iso639BTMap.TryGetValue(normalized, out var mapped))
{
normalized = mapped;
}
var cultureInfo = new CultureInfo(normalized);
return cultureInfo.TwoLetterISOLanguageName.ToUpper();
}
catch
{
return token;
}
}
private static List<string> ApplyLanguageFilter(List<string> tokens, string filter)
{
if (filter.IsNullOrWhiteSpace())
{
return tokens;
}
List<string> filteredTokens;
if (filter.StartsWith("-"))
{
filteredTokens = tokens.Except(filter.Split('-')).ToList();
}
else
{
return response;
filteredTokens = filter.Split('+').Intersect(tokens).ToList();
}
if (filter.EndsWith("+") && filteredTokens.Count != tokens.Count)
{
filteredTokens.Add("--");
}
return filteredTokens;
}
private static string GetEditionToken(MovieFile movieFile)