def highlight_event_cards(self, checked): highlight_set = Live.static_get_chara_bonus_set(get_name=True) for r_idx in range(self.view.widget.rowCount()): if self.view.widget.item(r_idx, 5).text() not in highlight_set: continue for c_idx in range(4, 5): item = self.view.widget.item(r_idx, c_idx) if checked: item.setBackground(QColor(50, 100, 100, 80)) else: item.setBackground(QColor(0, 0, 0, 0))
def initialize_index_db(self, card_list=None): logger.info("Building quicksearch index, please wait...") carnival_idols = ",".join( map(str, Live.static_get_chara_bonus_set(get_name=False))) db.cachedb.execute("""ATTACH DATABASE "{}" AS masterdb""".format( get_masterdb_path())) query = """ SELECT cdc.id, LOWER(cnc.card_short_name) as short, oc.number as owned, LOWER(cc.full_name) as chara, LOWER(rt.text) as rarity, LOWER(ct.text) as color, CASE WHEN cdc.rarity % 2 == 0 THEN 1 ELSE 0 END idolized, CASE WHEN pk.id IS NOT NULL THEN sd.condition || pk.short ELSE '' END time_prob_key, IFNULL(LOWER(sk.keywords), "") as skill, IFNULL(LOWER(lk.keywords), "") as leader, CASE WHEN cdc.leader_skill_id IN (70,71,72,73,81,82,83,84,104,105,106,113,117,118) AND cdc.rarity > 6 THEN "fes" ELSE "" END fes, CASE WHEN cdc.leader_skill_id IN (70,71,72,73,81,82,83,84,104,105,106,113,117) AND cdc.rarity > 6 THEN "blanc" ELSE "" END blanc, CASE WHEN cdc.leader_skill_id IN (118) AND cdc.rarity > 6 THEN "noir" ELSE "" END noir, CASE WHEN cdc.chara_id IN ({}) THEN "carnival" ELSE "" END carnival, CASE WHEN 1.0 * cdc.vocal_min / (cdc.vocal_min + cdc.visual_min + cdc.dance_min) > 0.39 THEN "vocal" WHEN 1.0 * cdc.visual_min / (cdc.vocal_min + cdc.visual_min + cdc.dance_min) > 0.39 THEN "visual" WHEN 1.0 * cdc.dance_min / (cdc.vocal_min + cdc.visual_min + cdc.dance_min) > 0.39 THEN "dance" ELSE "balance" END main_attribute FROM card_data_cache as cdc INNER JOIN card_name_cache cnc on cdc.id = cnc.card_id INNER JOIN owned_card oc on oc.card_id = cnc.card_id INNER JOIN chara_cache cc on cdc.chara_id = cc.chara_id INNER JOIN rarity_text rt on cdc.rarity = rt.id INNER JOIN color_text ct on cdc.attribute = ct.id LEFT JOIN masterdb.skill_data sd on cdc.skill_id = sd.id LEFT JOIN probability_keywords pk on pk.id = sd.probability_type LEFT JOIN skill_keywords sk on sd.skill_type = sk.id LEFT JOIN leader_keywords lk on cdc.leader_skill_id = lk.id """.format(carnival_idols) if card_list is not None: query += "WHERE cdc.id IN ({})".format(','.join(['?'] * len(card_list))) data = db.cachedb.execute_and_fetchall(query, card_list, out_dict=True) else: data = db.cachedb.execute_and_fetchall(query, out_dict=True) db.cachedb.execute("DROP TABLE IF EXISTS card_index_keywords") db.cachedb.execute(""" CREATE TABLE IF NOT EXISTS card_index_keywords ( "card_id" INTEGER UNIQUE PRIMARY KEY, "fields" BLOB ) """) logger.debug("Initializing quicksearch db for {} cards".format( len(data))) for card in data: card_id = card['id'] fields = {_: card[_] for _ in KEYWORD_KEYS} db.cachedb.execute( """ INSERT OR REPLACE INTO card_index_keywords ("card_id", "fields") VALUES (?,?) """, [card_id, str(fields)]) db.cachedb.commit() logger.debug( "Quicksearch db transaction for {} cards completed".format( len(data))) db.cachedb.execute("DETACH DATABASE masterdb")