diff --git a/database/db_controller.py b/database/db_controller.py index 62c4d32..e176510 100644 --- a/database/db_controller.py +++ b/database/db_controller.py @@ -316,4 +316,52 @@ class DBController: traverse_predecessors(start_node, [], True) traverse_successors(start_node, [], True) - return full_paths \ No newline at end of file + return full_paths + + def propagate_gender_relevance(self, gender_relevant_nodes): + """ + Propagate gender relevance through the evolution graph and update the SQLite database. + :param db_path: Path to the SQLite database file. + :param gender_relevant_nodes: A set of nodes that are initially marked as gender-relevant. + """ + + # Traverse from each gender-relevant end node backward to propagate relevance + for node in gender_relevant_nodes: + # Use breadth-first search or depth-first search to traverse backward + visited = set() + stack = [node] + + while stack: + current_node = stack.pop() + if current_node not in visited: + visited.add(current_node) + + # Update the gender_relevant flag in the database + self.update_pokemon_field(current_node, "gender_relevant", True) + + # Add predecessors to the stack to keep traversing backward + if self.graph.has_node(current_node): + predecessors = list(self.graph.predecessors(current_node)) + stack.extend(predecessors) + + self.save_changes() + + def get_gender_specific_evolutions(self): + """ + Get a list of nodes that have evolution methods indicating gender relevance (i.e., '(male)' or '(female)'). + :return: A list of nodes involved in gender-specific evolutions. + """ + gender_specific_nodes = [] + + for from_node, to_node, edge_data in self.graph.edges(data=True): + method = edge_data.get("method", "") + if method and ("(male)" in method.lower() or "(female)" in method.lower()): + # Add both nodes involved in this gender-specific evolution + gender_specific_nodes.extend([from_node, to_node]) + + return list(set(gender_specific_nodes)) # Return unique nodes + + def get_gender_relevant_pokemon(self): + self.cursor.execute(f"SELECT PFIC FROM pokemon_forms WHERE JSON_EXTRACT(data, '$.gender_relevant') = true") + results = self.cursor.fetchall() + return [row['PFIC'] for row in results] \ No newline at end of file diff --git a/ui/main_window_controller.py b/ui/main_window_controller.py index 33099fb..12cd29a 100644 --- a/ui/main_window_controller.py +++ b/ui/main_window_controller.py @@ -127,6 +127,15 @@ class MainWindowController: print("Works Done!") db.update_evolution_graph(data) + def adjust_gender_relevancy(self): + list = db.get_gender_specific_evolutions() + second_list = db.get_gender_relevant_pokemon() + print(list) + print(second_list) + db.propagate_gender_relevance(list) + db.propagate_gender_relevance(second_list) + pass + def reinitialize_database(self): pass diff --git a/ui/main_window_view.py b/ui/main_window_view.py index 760f1ad..c2968a2 100644 --- a/ui/main_window_view.py +++ b/ui/main_window_view.py @@ -152,6 +152,10 @@ class PokemonUI(QWidget): gather_evolutions_btn.clicked.connect(self.controller.gather_evolution_info) db_tab_layout.addWidget(gather_evolutions_btn) + gather_evolutions_btn = QPushButton("Adjust Gender Relevant Information") + gather_evolutions_btn.clicked.connect(self.controller.adjust_gender_relevancy) + db_tab_layout.addWidget(gather_evolutions_btn) + gather_encounters_btn = QPushButton("Gather Encounter Information") gather_encounters_btn.clicked.connect(self.controller.gather_encounter_info) db_tab_layout.addWidget(gather_encounters_btn)