Skip to content

Commit 02ea638

Browse files
brinekellyelton
authored andcommitted
AskCard and QueryCard now use the same filter logic as the limited pack generator.
This improves the performance of these search filters, allowing them to properly match to null property values.
1 parent 6c7e6f9 commit 02ea638

File tree

4 files changed

+27
-73
lines changed

4 files changed

+27
-73
lines changed

octgnFX/Octgn.Core/DataExtensionMethods/CardExtensionMethods.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ public static bool MatchesPropertyValue(this ICard card, PropertyDef prop, objec
274274
{
275275
if (string.IsNullOrWhiteSpace(cardProperties[prop]?.ToString()) && string.IsNullOrWhiteSpace(value?.ToString()))
276276
return true;
277-
return cardProperties[prop].ToString().Equals(value.ToString(), StringComparison.InvariantCultureIgnoreCase);
277+
return cardProperties[prop].ToString().Equals(value?.ToString(), StringComparison.InvariantCultureIgnoreCase);
278278
}
279279
else
280280
{
@@ -296,16 +296,23 @@ public static bool MatchesPropertyValue(this ICard card, string prop, object val
296296
{
297297
return card.GetName().Equals(value.ToString(), StringComparison.InvariantCultureIgnoreCase);
298298
}
299+
else if (prop.Equals("model", StringComparison.InvariantCultureIgnoreCase))
300+
{
301+
if (Guid.TryParse(value?.ToString(), out Guid guid))
302+
return card.Id.Equals(guid);
303+
else
304+
return false;
305+
}
299306
var matchedProperty = cardProperties.Keys.FirstOrDefault(x => x.Name.Equals(prop, StringComparison.InvariantCultureIgnoreCase));
300307
if (matchedProperty == null)
301308
{
302309
// if the property is missing then its treated as null for match requests
303-
return string.IsNullOrWhiteSpace(value.ToString());
310+
return string.IsNullOrWhiteSpace(value?.ToString());
304311
}
305312

306313
if (string.IsNullOrWhiteSpace(cardProperties[matchedProperty]?.ToString()) && string.IsNullOrWhiteSpace(value?.ToString()))
307314
return true;
308-
return cardProperties[matchedProperty].ToString().Equals(value.ToString(), StringComparison.InvariantCultureIgnoreCase);
315+
return cardProperties[matchedProperty].ToString().Equals(value?.ToString(), StringComparison.InvariantCultureIgnoreCase);
309316
}
310317

311318
/// <summary>

octgnFX/Octgn.JodsEngine/Scripting/Controls/CardDlg.xaml.cs

Lines changed: 7 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -46,50 +46,17 @@ public CardDlg(Dictionary<string, List<string>> properties, string op, string ti
4646
_allCards = new List<Card>();
4747
foreach (var p in properties)
4848
{
49-
if (p.Key.Equals("model", StringComparison.InvariantCultureIgnoreCase))
50-
foreach (var v in p.Value)
51-
{
52-
var tlist = game.AllCards()
53-
.Where(y => y.Id.ToString().ToLower() == v.ToLower()).ToList();
54-
_allCards.AddRange(tlist);
55-
}
56-
else if (p.Key.Equals("name", StringComparison.InvariantCultureIgnoreCase))
57-
foreach (var v in p.Value)
58-
{
59-
var tlist = game.AllCards().Where(x => x.GetName().Equals(v, StringComparison.InvariantCultureIgnoreCase));
60-
_allCards.AddRange(tlist);
61-
}
62-
else
63-
foreach (var v in p.Value)
64-
{
65-
var tlist = game.AllCards()
66-
.Where(x => x.GetCardProperties()
67-
.Any(y => y.Key.Name.ToLower() == p.Key.ToLower()
68-
&& y.Value.ToString().ToLower() == v.ToLower())).ToList();
69-
_allCards.AddRange(tlist);
70-
}
49+
foreach (var v in p.Value)
50+
_allCards.AddRange(game.AllCards().Where(x => x.MatchesPropertyValue(p.Key, v)));
7151
}
7252
break;
7353
default:
7454
var query = game.AllCards();
7555
foreach (var p in properties)
7656
{
7757
var tlist = new List<Card>();
78-
if (p.Key.Equals("model", StringComparison.InvariantCultureIgnoreCase))
79-
foreach (var v in p.Value)
80-
tlist.AddRange(query
81-
.Where(y => y.Id.ToString().ToLower() == v.ToLower()).ToList());
82-
else if (p.Key.Equals("name", StringComparison.InvariantCultureIgnoreCase))
83-
foreach (var v in p.Value)
84-
tlist.AddRange(query = query.Where(x => x.GetName().Equals(v, StringComparison.InvariantCultureIgnoreCase)));
85-
else
86-
foreach (var v in p.Value)
87-
{
88-
tlist.AddRange(query
89-
.Where(x => x.GetCardProperties()
90-
.Any(y => y.Key.Name.ToLower() == p.Key.ToLower()
91-
&& y.Value.ToString().ToLower() == v.ToLower())).ToList());
92-
}
58+
foreach (var v in p.Value)
59+
tlist.AddRange(query.Where(x => x.MatchesPropertyValue(p.Key, v)));
9360
query = tlist;
9461
}
9562
_allCards = query.ToList();
@@ -118,33 +85,15 @@ public CardDlg(Dictionary<string, string> properties, string op)
11885
_allCards = new List<Card>();
11986
foreach (var p in properties)
12087
{
121-
if (p.Key.Equals("name", StringComparison.InvariantCultureIgnoreCase))
122-
{
123-
var tlist = game.AllCards().Where(x => x.GetName().Equals(p.Value, StringComparison.InvariantCultureIgnoreCase));
124-
_allCards.AddRange(tlist);
125-
}
126-
else
127-
{
128-
var tlist = game.AllCards()
129-
.Where(x => x.GetCardProperties()
130-
.Any(y => y.Key.Name.ToLower() == p.Key.ToLower()
131-
&& y.Value.ToString().ToLower() == p.Value.ToLower())).ToList();
132-
_allCards.AddRange(tlist);
133-
}
88+
_allCards.AddRange(game.AllCards().Where(x => x.MatchesPropertyValue(p.Key, p.Value)));
13489
}
13590
break;
13691
default:
13792
var query = game.AllCards();
13893
foreach (var p in properties)
13994
{
140-
if (p.Key.Equals("name", StringComparison.InvariantCultureIgnoreCase))
141-
query = query.Where(x => x.GetName().Equals(p.Value, StringComparison.InvariantCultureIgnoreCase));
142-
else
143-
query = query
144-
.Where(
145-
x => x.GetCardProperties()
146-
.Any(y => y.Key.Name.ToLower() == p.Key.ToLower()
147-
&& y.Value.ToString().ToLower() == p.Value.ToLower()));
95+
query = query
96+
.Where(x => x.MatchesPropertyValue(p.Key, p.Value));
14897
}
14998
_allCards = query.ToList();
15099
break;

octgnFX/Octgn.JodsEngine/Scripting/Versions/Script_3_1_0_2.cs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1140,26 +1140,23 @@ public List<string> QueryCard(Dictionary<string, List<string>> properties, bool
11401140
var tempCardList = new List<DataNew.Entities.Card>();
11411141
foreach (var propertyValue in property.Value)
11421142
{
1143-
if (property.Key.Equals("name", StringComparison.InvariantCultureIgnoreCase))
1143+
if (match)
11441144
{
1145-
if (match)
1146-
tempCardList.AddRange(query
1147-
.Where(x => x.GetName().Equals(propertyValue, StringComparison.InvariantCultureIgnoreCase)));
1148-
else
1149-
tempCardList.AddRange(query
1150-
.Where(x => x.GetName().ToLower().Contains(propertyValue.ToLower())));
1145+
tempCardList.AddRange(query.Where(x => x.MatchesPropertyValue(property.Key, propertyValue)));
11511146
}
11521147
else
11531148
{
1154-
if (match)
1149+
if (property.Key.Equals("name", StringComparison.InvariantCultureIgnoreCase))
1150+
{
11551151
tempCardList.AddRange(query
1156-
.Where(x => x.GetCardProperties()
1157-
.Any(y => y.Key.Name.ToLower() == property.Key.ToLower() && y.Value.ToString().ToLower() == propertyValue.ToLower())).ToList());
1152+
.Where(x => x.GetName().ToLower().Contains(propertyValue.ToLower())));
1153+
}
11581154
else
1155+
{
11591156
tempCardList.AddRange(query
11601157
.Where(x => x.GetCardProperties()
11611158
.Any(y => y.Key.Name.ToLower() == property.Key.ToLower() && y.Value.ToString().ToLower().Contains(propertyValue.ToLower()))).ToList());
1162-
1159+
}
11631160
}
11641161
}
11651162
query = tempCardList;

recentchanges.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
1+
AskCard and QueryCard python API can now filter for null property values (in line with the limited pack generator logic)
2+
Card.MatchesPropertyValue extension method can now match card GUID values

0 commit comments

Comments
 (0)