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);
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 = []
};
}
@@ -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 {
@@ -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<string, string[]> 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