예제 #1
0
 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))
예제 #2
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")