From 1bc136ff06bf74891116ebcd667d807eb2d77eb5 Mon Sep 17 00:00:00 2001 From: ajp_anton Date: Wed, 15 Jul 2026 19:41:16 +0000 Subject: [PATCH] Reuse stored genre name selection --- .../Api/MultilangController.cs | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/Jellyfin.Plugin.Multilang/Api/MultilangController.cs b/src/Jellyfin.Plugin.Multilang/Api/MultilangController.cs index e97838b..567d3c5 100644 --- a/src/Jellyfin.Plugin.Multilang/Api/MultilangController.cs +++ b/src/Jellyfin.Plugin.Multilang/Api/MultilangController.cs @@ -747,8 +747,8 @@ public sealed class MultilangController : ControllerBase private bool TryBuildGenresResponse(string media, string locale, out string body) { - var rows = _store.GetGenres(media); - if (rows.Length == 0) + var names = _store.GetGenreNames(media, locale); + if (names.Count == 0) { body = string.Empty; return false; @@ -756,15 +756,13 @@ public sealed class MultilangController : ControllerBase var culture = GetSortCulture(ResolveSortLocale(locale, locale)); var comparer = StringComparer.Create(culture, true); - var items = rows - .GroupBy(r => r.TmdbId) - .Select(g => new { Id = g.Key, Name = PickGenreName(g, locale) }) - .Where(g => !string.IsNullOrWhiteSpace(g.Name)) - .OrderBy(g => g.Name, comparer) + var items = names + .Where(kv => !string.IsNullOrWhiteSpace(kv.Value)) + .OrderBy(kv => kv.Value, comparer) .Select(g => new JsonObject { - ["Name"] = g.Name, - ["Id"] = "tmdb-" + g.Id.ToString(CultureInfo.InvariantCulture), + ["Name"] = g.Value, + ["Id"] = "tmdb-" + g.Key.ToString(CultureInfo.InvariantCulture), ["Type"] = "Genre", ["ChildCount"] = 0, ["BackdropImageTags"] = new JsonArray(), @@ -827,18 +825,6 @@ public sealed class MultilangController : ControllerBase item["GenreItems"] = genreItems; } - private static string PickGenreName(IEnumerable 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 factsByItem, int[] genreIds) { var wanted = genreIds.ToHashSet();