Remove unused user rule legacy fields

This commit is contained in:
ajp_anton
2026-07-15 22:15:55 +00:00
parent 1bc136ff06
commit bfcd36ae94
3 changed files with 9 additions and 46 deletions
@@ -198,7 +198,6 @@ public sealed class MultilangController : ControllerBase
var allowed = (Plugin.Instance?.Configuration?.Languages ?? []).ToHashSet(StringComparer.OrdinalIgnoreCase); var allowed = (Plugin.Instance?.Configuration?.Languages ?? []).ToHashSet(StringComparer.OrdinalIgnoreCase);
request.Categories = NormalizeCategories(request.Categories, allowed); request.Categories = NormalizeCategories(request.Categories, allowed);
request.FallbackFieldActions = NormalizeActionLists(request.FallbackFieldActions, allowed); request.FallbackFieldActions = NormalizeActionLists(request.FallbackFieldActions, allowed);
request.FallbackLanguages = GetNeededLanguages(request);
_store.SaveUserRules(userId, request); _store.SaveUserRules(userId, request);
_itemsProxyCache.ClearAll(); _itemsProxyCache.ClearAll();
return Ok(request); return Ok(request);
@@ -1512,10 +1511,8 @@ public sealed class MultilangController : ControllerBase
if (existing is not null) if (existing is not null)
{ {
existing.Categories ??= []; existing.Categories ??= [];
existing.FallbackLanguages ??= [];
existing.FallbackFieldActions = NormalizeActionLists(existing.FallbackFieldActions, (Plugin.Instance?.Configuration?.Languages ?? []).ToHashSet(StringComparer.OrdinalIgnoreCase)); 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.Categories = NormalizeCategories(existing.Categories, (Plugin.Instance?.Configuration?.Languages ?? []).ToHashSet(StringComparer.OrdinalIgnoreCase));
existing.FallbackLanguages = GetNeededLanguages(existing);
return existing; return existing;
} }
@@ -1524,10 +1521,8 @@ public sealed class MultilangController : ControllerBase
Enabled = false, Enabled = false,
SortLocale = "Auto", SortLocale = "Auto",
TrustTmdbCollections = true, TrustTmdbCollections = true,
FallbackLanguages = [],
FallbackFieldActions = DefaultActionLists(), FallbackFieldActions = DefaultActionLists(),
Categories = [], Categories = []
Rules = []
}; };
} }
@@ -177,7 +177,7 @@
return canonical ? "Language:" + canonical : ""; return canonical ? "Language:" + canonical : "";
} }
function legacyActionToList(fieldId, legacy, fallbackLangs) { function legacyActionToList(fieldId, legacy) {
if (!legacy || legacy.toLowerCase() === "fallback") { if (!legacy || legacy.toLowerCase() === "fallback") {
return ["Jellyfin"]; return ["Jellyfin"];
} }
@@ -206,7 +206,7 @@
var result = {}; var result = {};
fields.forEach(function (field) { fields.forEach(function (field) {
var values = source && (source[field.id] || source[field.label]); 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"]); result[field.id] = normalizeActionList(field.id, Array.isArray(values) ? values : values ? [values] : ["Jellyfin"]);
}); });
return result; return result;
@@ -1123,7 +1123,6 @@
SortLocale: $("ml-sort-locale").value || "Auto", SortLocale: $("ml-sort-locale").value || "Auto",
TrustTmdbCollections: $("ml-trust-collections").checked, TrustTmdbCollections: $("ml-trust-collections").checked,
FallbackFieldActions: state.rules.FallbackFieldActions, FallbackFieldActions: state.rules.FallbackFieldActions,
FallbackLanguages: [],
Categories: categories().map(function (category, index) { Categories: categories().map(function (category, index) {
var complete = (category.Requirements || []).filter(completeRequirement); var complete = (category.Requirements || []).filter(completeRequirement);
return { return {
@@ -810,34 +810,15 @@ WHERE item_id IN ({idParams}) AND lang IN ({langParams});";
{ {
using var con = Open(); using var con = Open();
con.Open(); con.Open();
using var tx = con.BeginTransaction(); using var cmd = con.CreateCommand();
using (var cmd = con.CreateCommand()) cmd.CommandText = @"
{
cmd.Transaction = tx;
cmd.CommandText = @"
INSERT INTO user_rules(user_id, rules_json, updated_at) INSERT INTO user_rules(user_id, rules_json, updated_at)
VALUES($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;"; 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("$user_id", userId);
cmd.Parameters.AddWithValue("$rules_json", JsonSerializer.Serialize(rules)); cmd.Parameters.AddWithValue("$rules_json", JsonSerializer.Serialize(rules));
cmd.Parameters.AddWithValue("$updated_at", NowUnixUtc()); cmd.Parameters.AddWithValue("$updated_at", NowUnixUtc());
cmd.ExecuteNonQuery(); 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();
} }
public UserRulesDocument? GetUserRules(string userId) public UserRulesDocument? GetUserRules(string userId)
@@ -1133,24 +1114,12 @@ public sealed class UserRulesDocument
public string SortLocale { get; set; } = "Auto"; public string SortLocale { get; set; } = "Auto";
public string[] FallbackLanguages { get; set; } = [];
public Dictionary<string, string[]> FallbackFieldActions { get; set; } = MultilangConstants.DefaultActionLists(); public Dictionary<string, string[]> FallbackFieldActions { get; set; } = MultilangConstants.DefaultActionLists();
public bool TrustTmdbCollections { get; set; } = true; public bool TrustTmdbCollections { get; set; } = true;
public UserCategoryRule[] Categories { get; set; } = []; 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 public sealed class UserCategoryRule