Reuse stored genre name selection

This commit is contained in:
ajp_anton
2026-07-15 19:41:16 +00:00
parent e0c07c10e7
commit 1bc136ff06
@@ -747,8 +747,8 @@ public sealed class MultilangController : ControllerBase
private bool TryBuildGenresResponse(string media, string locale, out string body) private bool TryBuildGenresResponse(string media, string locale, out string body)
{ {
var rows = _store.GetGenres(media); var names = _store.GetGenreNames(media, locale);
if (rows.Length == 0) if (names.Count == 0)
{ {
body = string.Empty; body = string.Empty;
return false; return false;
@@ -756,15 +756,13 @@ public sealed class MultilangController : ControllerBase
var culture = GetSortCulture(ResolveSortLocale(locale, locale)); var culture = GetSortCulture(ResolveSortLocale(locale, locale));
var comparer = StringComparer.Create(culture, true); var comparer = StringComparer.Create(culture, true);
var items = rows var items = names
.GroupBy(r => r.TmdbId) .Where(kv => !string.IsNullOrWhiteSpace(kv.Value))
.Select(g => new { Id = g.Key, Name = PickGenreName(g, locale) }) .OrderBy(kv => kv.Value, comparer)
.Where(g => !string.IsNullOrWhiteSpace(g.Name))
.OrderBy(g => g.Name, comparer)
.Select(g => new JsonObject .Select(g => new JsonObject
{ {
["Name"] = g.Name, ["Name"] = g.Value,
["Id"] = "tmdb-" + g.Id.ToString(CultureInfo.InvariantCulture), ["Id"] = "tmdb-" + g.Key.ToString(CultureInfo.InvariantCulture),
["Type"] = "Genre", ["Type"] = "Genre",
["ChildCount"] = 0, ["ChildCount"] = 0,
["BackdropImageTags"] = new JsonArray(), ["BackdropImageTags"] = new JsonArray(),
@@ -827,18 +825,6 @@ public sealed class MultilangController : ControllerBase
item["GenreItems"] = genreItems; item["GenreItems"] = genreItems;
} }
private static string PickGenreName(IEnumerable<GenreRow> rows, string locale)
{
var candidates = rows.ToArray();
var requested = (locale ?? string.Empty).Trim();
var requestedBase = requested.Split('-', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault() ?? string.Empty;
return candidates.FirstOrDefault(r => r.Lang.Equals(requested, StringComparison.OrdinalIgnoreCase)).Name ??
candidates.FirstOrDefault(r => !string.IsNullOrWhiteSpace(requestedBase) && r.Lang.Equals(requestedBase, StringComparison.OrdinalIgnoreCase)).Name ??
candidates.FirstOrDefault(r => r.Lang.Equals("en-US", StringComparison.OrdinalIgnoreCase)).Name ??
candidates.FirstOrDefault(r => r.Lang.Equals("en", StringComparison.OrdinalIgnoreCase)).Name ??
candidates.FirstOrDefault().Name;
}
private static void FilterRootByGenres(JsonNode root, IReadOnlyDictionary<string, FactsData> factsByItem, int[] genreIds) private static void FilterRootByGenres(JsonNode root, IReadOnlyDictionary<string, FactsData> factsByItem, int[] genreIds)
{ {
var wanted = genreIds.ToHashSet(); var wanted = genreIds.ToHashSet();