support for _placefilter and _datacenterfilter

This commit is contained in:
srthMD 2024-07-13 17:05:12 +03:00
parent ed5457d1aa
commit dcc820343b
2 changed files with 28 additions and 3 deletions

View File

@ -1021,4 +1021,7 @@ Selecting 'No' will ignore this warning and continue installation.</value>
<data name="Common.SystemDefault" xml:space="preserve"> <data name="Common.SystemDefault" xml:space="preserve">
<value>System default</value> <value>System default</value>
</data> </data>
<data name="Menu.FastFlagEditor.InvalidPlaceFilter" xml:space="preserve">
<value>The entry for '{0}' is not valid as the place filter is not formatted correctly.</value>
</data>
</root> </root>

View File

@ -22,9 +22,15 @@ namespace Bloxstrap.UI.Elements.Menu.Pages
private readonly ObservableCollection<FastFlag> _fastFlagList = new(); private readonly ObservableCollection<FastFlag> _fastFlagList = new();
private readonly List<string> _validPrefixes = new() private readonly List<string> _validPrefixes = new()
{ {
"FFlag", "DFFlag", "SFFlag", "FInt", "DFInt", "FString", "DFString", "FLog", "DFlog" "FFlag", "DFFlag", "SFFlag", "FInt", "DFInt", "FString", "DFString", "FLog", "DFLog"
}; };
// values must match the entire string to avoid cases where half the string
// matches but the filter would still be invalid
private readonly Regex _boolFilterPattern = new("(?:true|false)(;[\\d]{1,})+$");
private readonly Regex _intFilterPattern = new("([\\d]{1,})?(;[\\d]{1,})+$");
private readonly Regex _stringFilterPattern = new("^[^;]*(;[\\d]{1,})+$");
private bool _showPresets = false; private bool _showPresets = false;
private string _searchFilter = ""; private string _searchFilter = "";
@ -253,15 +259,19 @@ namespace Bloxstrap.UI.Elements.Menu.Pages
string lowerValue = value.ToLowerInvariant(); string lowerValue = value.ToLowerInvariant();
string errorMessage = ""; string errorMessage = "";
if (!_validPrefixes.Where(x => name.StartsWith(x)).Any()) if (!_validPrefixes.Any(name.StartsWith))
errorMessage = Bloxstrap.Resources.Strings.Menu_FastFlagEditor_InvalidPrefix; errorMessage = Bloxstrap.Resources.Strings.Menu_FastFlagEditor_InvalidPrefix;
else if (!name.All(x => char.IsLetterOrDigit(x) || x == '_')) else if (!name.All(x => char.IsLetterOrDigit(x) || x == '_'))
errorMessage = Bloxstrap.Resources.Strings.Menu_FastFlagEditor_InvalidCharacter; errorMessage = Bloxstrap.Resources.Strings.Menu_FastFlagEditor_InvalidCharacter;
if (name.EndsWith("_PlaceFilter") || name.EndsWith("_DataCenterFilter"))
errorMessage = !Validate_Filter(name, value) ? Bloxstrap.Resources.Strings.Menu_FastFlagEditor_InvalidPlaceFilter : "";
else if ((name.StartsWith("FInt") || name.StartsWith("DFInt")) && !Int32.TryParse(value, out _)) else if ((name.StartsWith("FInt") || name.StartsWith("DFInt")) && !Int32.TryParse(value, out _))
errorMessage = Bloxstrap.Resources.Strings.Menu_FastFlagEditor_InvalidNumberValue; errorMessage = Bloxstrap.Resources.Strings.Menu_FastFlagEditor_InvalidNumberValue;
else if ((name.StartsWith("FFlag") || name.StartsWith("DFFlag")) && lowerValue != "true" && lowerValue != "false") else if ((name.StartsWith("FFlag") || name.StartsWith("DFFlag")) && lowerValue != "true" && lowerValue != "false")
errorMessage = Bloxstrap.Resources.Strings.Menu_FastFlagEditor_InvalidBoolValue; errorMessage = Bloxstrap.Resources.Strings.Menu_FastFlagEditor_InvalidBoolValue;
if (!String.IsNullOrEmpty(errorMessage)) if (!String.IsNullOrEmpty(errorMessage))
{ {
Frontend.ShowMessageBox(String.Format(errorMessage, name), MessageBoxImage.Error); Frontend.ShowMessageBox(String.Format(errorMessage, name), MessageBoxImage.Error);
@ -271,6 +281,18 @@ namespace Bloxstrap.UI.Elements.Menu.Pages
return true; return true;
} }
private bool Validate_Filter(string name, string value)
{
if(name.StartsWith("FFlag") || name.StartsWith("DFFlag"))
return _boolFilterPattern.IsMatch(value);
if (name.StartsWith("FInt") || name.StartsWith("DFInt"))
return _intFilterPattern.IsMatch(value);
if (name.StartsWith("FString") || name.StartsWith("DFString") || name.StartsWith("FLog") || name.StartsWith("DFLog"))
return _stringFilterPattern.IsMatch(value);
return false;
}
// refresh list on page load to synchronize with preset page // refresh list on page load to synchronize with preset page
private void Page_Loaded(object sender, RoutedEventArgs e) => ReloadList(); private void Page_Loaded(object sender, RoutedEventArgs e) => ReloadList();