diff --git a/src/Jellyfin.Plugin.Multilang/Api/MultilangController.cs b/src/Jellyfin.Plugin.Multilang/Api/MultilangController.cs index 567d3c5..5e6cfdc 100644 --- a/src/Jellyfin.Plugin.Multilang/Api/MultilangController.cs +++ b/src/Jellyfin.Plugin.Multilang/Api/MultilangController.cs @@ -198,7 +198,6 @@ public sealed class MultilangController : ControllerBase var allowed = (Plugin.Instance?.Configuration?.Languages ?? []).ToHashSet(StringComparer.OrdinalIgnoreCase); request.Categories = NormalizeCategories(request.Categories, allowed); request.FallbackFieldActions = NormalizeActionLists(request.FallbackFieldActions, allowed); - request.FallbackLanguages = GetNeededLanguages(request); _store.SaveUserRules(userId, request); _itemsProxyCache.ClearAll(); return Ok(request); @@ -1512,10 +1511,8 @@ public sealed class MultilangController : ControllerBase if (existing is not null) { existing.Categories ??= []; - existing.FallbackLanguages ??= []; existing.FallbackFieldActions = NormalizeActionLists(existing.FallbackFieldActions, (Plugin.Instance?.Configuration?.Languages ?? []).ToHashSet(StringComparer.OrdinalIgnoreCase)); existing.Categories = NormalizeCategories(existing.Categories, (Plugin.Instance?.Configuration?.Languages ?? []).ToHashSet(StringComparer.OrdinalIgnoreCase)); - existing.FallbackLanguages = GetNeededLanguages(existing); return existing; } @@ -1524,10 +1521,8 @@ public sealed class MultilangController : ControllerBase Enabled = false, SortLocale = "Auto", TrustTmdbCollections = true, - FallbackLanguages = [], FallbackFieldActions = DefaultActionLists(), - Categories = [], - Rules = [] + Categories = [] }; } diff --git a/src/Jellyfin.Plugin.Multilang/Configuration/userRulesPage.html b/src/Jellyfin.Plugin.Multilang/Configuration/userRulesPage.html index aba9def..f0f6cfd 100644 --- a/src/Jellyfin.Plugin.Multilang/Configuration/userRulesPage.html +++ b/src/Jellyfin.Plugin.Multilang/Configuration/userRulesPage.html @@ -177,7 +177,7 @@ return canonical ? "Language:" + canonical : ""; } - function legacyActionToList(fieldId, legacy, fallbackLangs) { + function legacyActionToList(fieldId, legacy) { if (!legacy || legacy.toLowerCase() === "fallback") { return ["Jellyfin"]; } @@ -206,7 +206,7 @@ var result = {}; fields.forEach(function (field) { var values = source && (source[field.id] || source[field.label]); - if (!values && legacy) values = legacyActionToList(field.id, legacy[field.id] || legacy[field.label], state.rules.FallbackLanguages || []); + if (!values && legacy) values = legacyActionToList(field.id, legacy[field.id] || legacy[field.label]); result[field.id] = normalizeActionList(field.id, Array.isArray(values) ? values : values ? [values] : ["Jellyfin"]); }); return result; @@ -1123,7 +1123,6 @@ SortLocale: $("ml-sort-locale").value || "Auto", TrustTmdbCollections: $("ml-trust-collections").checked, FallbackFieldActions: state.rules.FallbackFieldActions, - FallbackLanguages: [], Categories: categories().map(function (category, index) { var complete = (category.Requirements || []).filter(completeRequirement); return { diff --git a/src/Jellyfin.Plugin.Multilang/Data/TranslationStore.cs b/src/Jellyfin.Plugin.Multilang/Data/TranslationStore.cs index 77dd984..bcfbcd9 100644 --- a/src/Jellyfin.Plugin.Multilang/Data/TranslationStore.cs +++ b/src/Jellyfin.Plugin.Multilang/Data/TranslationStore.cs @@ -810,34 +810,15 @@ WHERE item_id IN ({idParams}) AND lang IN ({langParams});"; { using var con = Open(); con.Open(); - using var tx = con.BeginTransaction(); - using (var cmd = con.CreateCommand()) - { - cmd.Transaction = tx; - cmd.CommandText = @" + using var cmd = con.CreateCommand(); + cmd.CommandText = @" INSERT INTO user_rules(user_id, rules_json, updated_at) VALUES($user_id, $rules_json, $updated_at) ON CONFLICT(user_id) DO UPDATE SET rules_json = excluded.rules_json, updated_at = excluded.updated_at;"; - cmd.Parameters.AddWithValue("$user_id", userId); - cmd.Parameters.AddWithValue("$rules_json", JsonSerializer.Serialize(rules)); - cmd.Parameters.AddWithValue("$updated_at", NowUnixUtc()); - cmd.ExecuteNonQuery(); - } - - using (var cmd = con.CreateCommand()) - { - cmd.Transaction = tx; - cmd.CommandText = @" -INSERT INTO user_display_langs(user_id, langs_json, updated_at) -VALUES($user_id, $langs_json, $updated_at) -ON CONFLICT(user_id) DO UPDATE SET langs_json = excluded.langs_json, updated_at = excluded.updated_at;"; - cmd.Parameters.AddWithValue("$user_id", userId); - cmd.Parameters.AddWithValue("$langs_json", JsonSerializer.Serialize(rules.FallbackLanguages)); - cmd.Parameters.AddWithValue("$updated_at", NowUnixUtc()); - cmd.ExecuteNonQuery(); - } - - tx.Commit(); + cmd.Parameters.AddWithValue("$user_id", userId); + cmd.Parameters.AddWithValue("$rules_json", JsonSerializer.Serialize(rules)); + cmd.Parameters.AddWithValue("$updated_at", NowUnixUtc()); + cmd.ExecuteNonQuery(); } public UserRulesDocument? GetUserRules(string userId) @@ -1133,24 +1114,12 @@ public sealed class UserRulesDocument public string SortLocale { get; set; } = "Auto"; - public string[] FallbackLanguages { get; set; } = []; - public Dictionary FallbackFieldActions { get; set; } = MultilangConstants.DefaultActionLists(); public bool TrustTmdbCollections { get; set; } = true; public UserCategoryRule[] Categories { get; set; } = []; - public UserRuleEntry[] Rules { get; set; } = []; -} - -public sealed class UserRuleEntry -{ - public string Text { get; set; } = string.Empty; - - public string[] Languages { get; set; } = []; - - public string[] Scopes { get; set; } = []; } public sealed class UserCategoryRule