Centralize Multilang field constants

This commit is contained in:
ajp_anton
2026-07-15 19:37:50 +00:00
parent 2968412374
commit 09a1b6f589
4 changed files with 161 additions and 188 deletions
@@ -4,6 +4,7 @@ using Jellyfin.Plugin.Multilang.Configuration;
using Jellyfin.Plugin.Multilang.Data;
using Jellyfin.Plugin.Multilang.Services.Assets;
using Jellyfin.Plugin.Multilang.Services.Providers;
using static Jellyfin.Plugin.Multilang.MultilangConstants;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Querying;
@@ -13,8 +14,6 @@ namespace Jellyfin.Plugin.Multilang.Services.Refresh;
public sealed class RefreshService
{
private const string OriginalLanguageTag = "Original";
private readonly ILibraryManager _libraryManager;
private readonly TranslationStore _store;
private readonly TmdbClient _tmdbClient;
@@ -418,9 +417,9 @@ public sealed class RefreshService
}
Log(cfg.VerboseLogging && cfg.EnableLogging, LogLevel.Information, "[{Index}/{Total}] TMDb metadata ok item={ItemId} lang={Lang}", scanIndex, totalItems, item.ItemId, lang);
_store.UpsertTranslation(item.ItemId, lang, "title", meta.Title);
_store.UpsertTranslation(item.ItemId, lang, "overview", meta.Overview);
_store.UpsertTranslation(item.ItemId, lang, "tagline", meta.Tagline);
_store.UpsertTranslation(item.ItemId, lang, TitleField, meta.Title);
_store.UpsertTranslation(item.ItemId, lang, OverviewField, meta.Overview);
_store.UpsertTranslation(item.ItemId, lang, TaglineField, meta.Tagline);
StoreGenres(item, lang, meta);
fetchedMetadata[lang] = meta;
firstMeta ??= meta;
@@ -451,10 +450,10 @@ public sealed class RefreshService
if (originalMeta is not null)
{
_store.UpsertTranslation(item.ItemId, OriginalLanguageTag, "title", originalMeta.Title);
_store.UpsertTranslation(item.ItemId, OriginalLanguageTag, "overview", originalMeta.Overview);
_store.UpsertTranslation(item.ItemId, OriginalLanguageTag, "tagline", originalMeta.Tagline);
StoreGenres(item, OriginalLanguageTag, originalMeta);
_store.UpsertTranslation(item.ItemId, OriginalAction, TitleField, originalMeta.Title);
_store.UpsertTranslation(item.ItemId, OriginalAction, OverviewField, originalMeta.Overview);
_store.UpsertTranslation(item.ItemId, OriginalAction, TaglineField, originalMeta.Tagline);
StoreGenres(item, OriginalAction, originalMeta);
Log(
cfg.VerboseLogging && cfg.EnableLogging,
LogLevel.Information,
@@ -549,9 +548,9 @@ public sealed class RefreshService
if (tmdbImages is null)
continue;
await StoreImageMapAsync(item.ItemId, languages, "poster", tmdbImages.Posters, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
await StoreImageMapAsync(item.ItemId, languages, "logo", tmdbImages.Logos, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
await StoreImageMapAsync(item.ItemId, languages, "backdrop", tmdbImages.Backdrops, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
await StoreImageMapAsync(item.ItemId, languages, PosterKind, tmdbImages.Posters, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
await StoreImageMapAsync(item.ItemId, languages, LogoKind, tmdbImages.Logos, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
await StoreImageMapAsync(item.ItemId, languages, BackdropKind, tmdbImages.Backdrops, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
Log(cfg.VerboseLogging && cfg.EnableLogging, LogLevel.Information, "TMDb artwork stored item={ItemId} langs={Languages}", item.ItemId, string.Join(",", languages));
continue;
}
@@ -562,10 +561,10 @@ public sealed class RefreshService
if (fanartImages is null)
continue;
await StoreImageMapAsync(item.ItemId, languages, "poster", fanartImages.Posters, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
await StoreImageMapAsync(item.ItemId, languages, "logo", fanartImages.Logos, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
await StoreImageMapAsync(item.ItemId, languages, "banner", fanartImages.Banners, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
await StoreImageMapAsync(item.ItemId, languages, "thumb", fanartImages.Thumbs, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
await StoreImageMapAsync(item.ItemId, languages, PosterKind, fanartImages.Posters, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
await StoreImageMapAsync(item.ItemId, languages, LogoKind, fanartImages.Logos, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
await StoreImageMapAsync(item.ItemId, languages, BannerKind, fanartImages.Banners, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
await StoreImageMapAsync(item.ItemId, languages, ThumbKind, fanartImages.Thumbs, cfg, updatedAt, written, cancellationToken).ConfigureAwait(false);
Log(cfg.VerboseLogging && cfg.EnableLogging, LogLevel.Information, "Fanart artwork stored item={ItemId} langs={Languages}", item.ItemId, string.Join(",", languages));
}
}
@@ -583,8 +582,8 @@ public sealed class RefreshService
{
foreach (var lang in languages)
{
var storeLang = lang.StartsWith(OriginalLanguageTag + ":", StringComparison.OrdinalIgnoreCase)
? OriginalLanguageTag
var storeLang = lang.StartsWith(OriginalAction + ":", StringComparison.OrdinalIgnoreCase)
? OriginalAction
: lang;
var key = kind + ":" + storeLang;
if (written.Contains(key))
@@ -609,13 +608,13 @@ public sealed class RefreshService
if (_store.HasMissingConfiguredTranslations(item.ItemId, langs))
return true;
var assetPresence = _store.GetAssetPresence(item.ItemId, langs.Append(OriginalLanguageTag));
var assetPresence = _store.GetAssetPresence(item.ItemId, langs.Append(OriginalAction));
return IsLocalAssetStorage(cfg) && assetPresence.AnyRemote;
}
private static string[] AppendOriginalLanguage(string[] languages, string originalLanguage)
=> languages
.Concat([OriginalLanguageTag + ":" + originalLanguage])
.Concat([OriginalAction + ":" + originalLanguage])
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToArray();
@@ -624,8 +623,8 @@ public sealed class RefreshService
private static string ToIso639(string language)
{
if (language.StartsWith(OriginalLanguageTag + ":", StringComparison.OrdinalIgnoreCase))
language = language[(OriginalLanguageTag.Length + 1)..];
if (language.StartsWith(OriginalAction + ":", StringComparison.OrdinalIgnoreCase))
language = language[(OriginalAction.Length + 1)..];
var index = language.IndexOf('-', StringComparison.Ordinal);
return (index > 0 ? language[..index] : language).Trim().ToLowerInvariant();
}