Fix mana filtering in search.

This commit is contained in:
luxick
2017-07-27 16:55:44 +02:00
parent 35b89e4c35
commit 134aa0d988
3 changed files with 83 additions and 9 deletions

View File

@@ -28,7 +28,7 @@ class CardVaultDB:
"TEXT, `hand` TEXT, `life` TEXT, `releaseDate` TEXT, `starter` TEXT, "
"`printings` TEXT, `originalText` TEXT, `originalType` TEXT, "
"`source` TEXT, `imageUrl` TEXT, `set` TEXT, `setName` TEXT, `id` TEXT, "
"`legalities` TEXT, `rulings` TEXT, `foreignNames` TEXT) ")
"`legalities` TEXT, `rulings` TEXT, `foreignNames` TEXT, `fcolor` TEXT) ")
con.execute("CREATE TABLE IF NOT EXISTS library ( multiverseid INT PRIMARY KEY, copies INT )")
con.execute("CREATE TABLE IF NOT EXISTS tags ( tag TEXT, multiverseid INT )")
con.execute("CREATE TABLE IF NOT EXISTS wants ( listName TEXT, multiverseid INT )")
@@ -41,7 +41,7 @@ class CardVaultDB:
# Map card object to database tables
db_values = self.card_to_table_mapping(card)
sql_string = "INSERT INTO `cards` VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," \
"?,?,?,?,?,?,?,?,?,?)"
"?,?,?,?,?,?,?,?,?,?,?)"
# Insert into database
con.execute(sql_string, db_values)
except sqlite3.OperationalError as err:
@@ -83,7 +83,7 @@ class CardVaultDB:
try:
with con:
sql_string = "INSERT INTO `cards` VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," \
"?,?,?,?,?,?,?,?,?,?)"
"?,?,?,?,?,?,?,?,?,?,?)"
con.executemany(sql_string, rows)
except sqlite3.OperationalError as err:
util.log("Database Error", util.LogLevel.Error)
@@ -235,6 +235,7 @@ class CardVaultDB:
filer_type = filters["type"]
filter_set = filters["set"]
filter_mana = filters["mana"].split(',')
filter_mana.sort(key=lambda val: util.color_sort_order[val[0]])
sql = 'SELECT * FROM cards WHERE `name` LIKE ?'
parameters = ['%' + term + '%']
@@ -248,9 +249,8 @@ class CardVaultDB:
sql += ' AND `set` = ?'
parameters.append(filter_set)
if len(filter_mana) != 0:
for color in filter_mana:
sql += ' AND `manaCost` LIKE ?'
parameters.append('%' + color + '%')
sql += ' AND `fcolor` = ?'
parameters.append(self.filter_colors_list(filter_mana))
sql += ' LIMIT ?'
parameters.append(list_size)
@@ -299,7 +299,25 @@ class CardVaultDB:
util.log(str(err), util.LogLevel.Error)
@staticmethod
def card_to_table_mapping(card: Card):
def filter_colors_list(mana: list) -> str:
symbols = util.unique_list(mana)
output = [s for s in symbols if (s in util.card_colors.values())]
return "-".join(output)
@staticmethod
def filter_colors(card) -> str:
"""Extracts the colors of a card for filtering."""
output = []
if card.colors is not None:
for color in card.colors:
output.append(util.card_colors[color])
else:
output.append("C")
# TODO extrafilter_colorsct symbols from card text
return "-".join(output)
def card_to_table_mapping(self, card: Card):
"""Return the database representation of a card object"""
return (str(card.name), str(card.layout), str(card.mana_cost), card.cmc, str(card.colors), str(card.names),
str(card.type), str(card.supertypes), str(card.subtypes), str(card.types), str(card.rarity),
@@ -312,7 +330,7 @@ class CardVaultDB:
str(card.original_text),
str(card.original_type), str(card.source), str(card.image_url), str(card.set), str(card.set_name),
str(card.id),
str(card.legalities), str(card.rulings), str(card.foreign_names))
str(card.legalities), str(card.rulings), str(card.foreign_names), self.filter_colors(card))
@staticmethod
def table_to_card_mapping(row: sqlite3.Row):

View File

@@ -251,8 +251,42 @@
<property name="margin_end">10</property>
<property name="margin_top">6</property>
<property name="margin_bottom">6</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<object class="GtkSpinner" id="statusbar_spinner">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Online</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">network-idle</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>

View File

@@ -81,6 +81,22 @@ legality_colors = {
"Legal": "#62B62F"
}
card_colors = {
'White': 'W',
'Blue': 'U',
'Black': 'B',
'Red': 'R',
'Green': 'G'
}
color_sort_order = {
'W': 0,
'U': 1,
'B': 2,
'R': 3,
'G': 4
}
rarity_dict = {
"special": 0,
"common": 1,
@@ -367,6 +383,12 @@ def create_mana_icons(icons: dict, mana_string: str) -> GdkPixbuf:
return pixbuf
def unique_list(seq):
seen = set()
seen_add = seen.add
return [x for x in seq if not (x in seen or seen_add(x))]
def sizeof_fmt(num, suffix='B'):
for unit in ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi']:
if abs(num) < 1024.0: