private static string FixFilterOperators(string filter)
{
PropertyInfo[] properties = typeof(GameServer).GetProperties();
List<string> filterableProperties = new List<string>();
// get all the properties that aren't "[NonFilter]"
foreach (var property in properties)
{
if (property.GetCustomAttributes(false).Any(x => x.GetType().Name == "NonFilterAttribute"))
continue;
filterableProperties.Add(property.Name);
}
// go through each property, see if they exist in the filter,
// and check to see if what's before the property is a logical operator
// if it is not, then we slap a && before it
foreach (var property in filterableProperties)
{
IEnumerable<int> indexes = filter.IndexesOf(property);
foreach (var index in indexes)
{
if (index > 0)
{
int length = 0;
bool hasLogical = IsLogical(filter, index, out length, true) || IsOperator(filter, index, out length, true) || IsGroup(filter, index, out length, true);
if (!hasLogical)
{
filter = filter.Insert(index, " && ");
}
}
}
}
return filter;
}