Add language-aware article sorting
This commit is contained in:
@@ -17,6 +17,7 @@ using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Net;
|
||||
using MediaBrowser.Controller.Session;
|
||||
using MediaBrowser.Model.Globalization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
@@ -42,6 +43,7 @@ public sealed class MultilangController : ControllerBase
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IHttpClientFactory _httpClientFactory;
|
||||
private readonly IApplicationPaths _appPaths;
|
||||
private readonly ILocalizationManager _localizationManager;
|
||||
private readonly ProviderCatalog _providerCatalog;
|
||||
private readonly SortArticleCatalog _articleCatalog;
|
||||
private readonly RefreshService _refreshService;
|
||||
@@ -59,6 +61,7 @@ public sealed class MultilangController : ControllerBase
|
||||
IUserManager userManager,
|
||||
IHttpClientFactory httpClientFactory,
|
||||
IApplicationPaths appPaths,
|
||||
ILocalizationManager localizationManager,
|
||||
ProviderCatalog providerCatalog,
|
||||
SortArticleCatalog articleCatalog,
|
||||
RefreshService refreshService,
|
||||
@@ -75,6 +78,7 @@ public sealed class MultilangController : ControllerBase
|
||||
_userManager = userManager;
|
||||
_httpClientFactory = httpClientFactory;
|
||||
_appPaths = appPaths;
|
||||
_localizationManager = localizationManager;
|
||||
_providerCatalog = providerCatalog;
|
||||
_articleCatalog = articleCatalog;
|
||||
_refreshService = refreshService;
|
||||
@@ -111,6 +115,13 @@ public sealed class MultilangController : ControllerBase
|
||||
public IActionResult ArticleBuiltins()
|
||||
=> Ok(_articleCatalog.GetBuiltIns().OrderBy(k => k.Key, StringComparer.OrdinalIgnoreCase).ToDictionary(k => k.Key, v => v.Value));
|
||||
|
||||
[HttpGet("MetadataLanguages")]
|
||||
public IActionResult MetadataLanguages()
|
||||
=> Ok(_localizationManager.GetCultures()
|
||||
.Where(c => !string.IsNullOrWhiteSpace(c.Name))
|
||||
.OrderBy(c => c.DisplayName, StringComparer.OrdinalIgnoreCase)
|
||||
.Select(c => new { c.Name, c.DisplayName }));
|
||||
|
||||
[HttpGet("AdminConfig")]
|
||||
public async Task<IActionResult> AdminConfig()
|
||||
{
|
||||
@@ -143,6 +154,8 @@ public sealed class MultilangController : ControllerBase
|
||||
private static bool AdminConfigAffectsCachedItems(PluginConfiguration previous, PluginConfiguration next)
|
||||
=> !StringArrayEquals(previous.Languages, next.Languages, StringComparer.OrdinalIgnoreCase) ||
|
||||
!string.Equals(previous.AssetStorageMode, next.AssetStorageMode, StringComparison.OrdinalIgnoreCase) ||
|
||||
previous.IgnoreArticlesWhenSorting != next.IgnoreArticlesWhenSorting ||
|
||||
!string.Equals(previous.JellyfinTitleLanguageFallback, next.JellyfinTitleLanguageFallback, StringComparison.OrdinalIgnoreCase) ||
|
||||
!ArticleEntriesEqual(previous.ArticleEntries, next.ArticleEntries);
|
||||
|
||||
private static bool StringArrayEquals(string[] previous, string[] next, StringComparer comparer)
|
||||
@@ -1432,6 +1445,10 @@ public sealed class AdminConfigDto
|
||||
|
||||
public string AssetStorageMode { get; set; } = "url";
|
||||
|
||||
public bool IgnoreArticlesWhenSorting { get; set; } = true;
|
||||
|
||||
public string JellyfinTitleLanguageFallback { get; set; } = string.Empty;
|
||||
|
||||
public SortArticleEntry[] ArticleEntries { get; set; } = [];
|
||||
|
||||
public bool EnableLogging { get; set; }
|
||||
@@ -1453,6 +1470,8 @@ public sealed class AdminConfigDto
|
||||
ItemsProxyCacheTtlMinutes = cfg.ItemsProxyCacheTtlMinutes,
|
||||
ItemsProxyCacheMaxMiB = cfg.ItemsProxyCacheMaxMiB,
|
||||
AssetStorageMode = NormalizeAssetStorageMode(cfg.AssetStorageMode),
|
||||
IgnoreArticlesWhenSorting = cfg.IgnoreArticlesWhenSorting,
|
||||
JellyfinTitleLanguageFallback = cfg.JellyfinTitleLanguageFallback,
|
||||
ArticleEntries = cfg.ArticleEntries,
|
||||
EnableLogging = cfg.EnableLogging,
|
||||
VerboseLogging = cfg.VerboseLogging,
|
||||
@@ -1475,6 +1494,8 @@ public sealed class AdminConfigDto
|
||||
ItemsProxyCacheTtlMinutes = Math.Max(1, ItemsProxyCacheTtlMinutes),
|
||||
ItemsProxyCacheMaxMiB = Math.Max(1, ItemsProxyCacheMaxMiB),
|
||||
AssetStorageMode = NormalizeAssetStorageMode(AssetStorageMode),
|
||||
IgnoreArticlesWhenSorting = IgnoreArticlesWhenSorting,
|
||||
JellyfinTitleLanguageFallback = JellyfinTitleLanguageFallback?.Trim() ?? string.Empty,
|
||||
ArticleEntries = ArticleEntries
|
||||
.Where(e => !string.IsNullOrWhiteSpace(e.Language))
|
||||
.Select(e => new SortArticleEntry { Language = e.Language.Trim(), Articles = e.Articles ?? string.Empty, AlwaysApply = e.AlwaysApply })
|
||||
|
||||
Reference in New Issue
Block a user