Skip to content
This repository was archived by the owner on Oct 20, 2025. It is now read-only.

Commit 02de65f

Browse files
fix:Refactor database module to support multiple characters and track added Nikkes
1 parent e61e891 commit 02de65f

File tree

2 files changed

+44
-15
lines changed

2 files changed

+44
-15
lines changed

src/data/database.py

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,44 @@
11
import datetime
22
import json
33
import os
4-
from typing import Any, Dict, Optional
4+
from typing import Any, Dict, Optional, List, Tuple
55

66
from src.config import Config
77

88

99
class NikkeDatabase:
10+
1011
def __init__(self) -> None:
1112
self.config: Config = Config()
1213
self.data_folder: str = str(self.config.USER_DATA_DIR)
1314
self.current_file: str = self._generate_new_filename()
14-
self.data: Dict[str, Any] = {}
15+
self.data: List[Dict[str, Any]] = []
16+
self.added_nikkes: int = 0
1517

1618
def _generate_new_filename(self) -> str:
1719
timestamp = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
1820
return str(self.config.get_user_data_file(timestamp))
1921

20-
def load_data(self) -> Dict[str, Any]:
22+
def load_data(self) -> List[Dict[str, Any]]:
2123
if os.path.exists(self.current_file):
2224
with open(self.current_file, "r") as f:
2325
return json.load(f)
24-
return {}
26+
return []
2527

2628
def save_data(self) -> None:
2729
os.makedirs(self.data_folder, exist_ok=True)
2830
with open(self.current_file, "w") as f:
2931
json.dump(self.data, f, indent=4)
3032

31-
def add_or_update_character(self, name: str, nikke_info: Dict[str, Any]) -> bool:
33+
def add_or_update_character(
34+
self, name: str, nikke_info: Dict[str, Any]
35+
) -> Tuple[bool, bool]:
36+
# Validate combat_power
37+
try:
38+
combat_power = int(nikke_info.get("combat_power", "0"))
39+
except ValueError:
40+
combat_power = 0
41+
3242
simplified_info = {
3343
"name": name,
3444
"manufacturer": nikke_info.get("manufacturer"),
@@ -38,18 +48,34 @@ def add_or_update_character(self, name: str, nikke_info: Dict[str, Any]) -> bool
3848
"rarity": nikke_info.get("rarity"),
3949
"weapon": nikke_info.get("weapon"),
4050
"element": nikke_info.get("element"),
41-
"combat_power": nikke_info.get("combat_power"),
51+
"combat_power": str(combat_power),
4252
"last_updated": str(datetime.datetime.now()),
4353
}
4454

45-
self.data[name] = simplified_info
55+
# Check if character already exists
56+
for i, character in enumerate(self.data):
57+
if character["name"] == name:
58+
# Update existing character
59+
self.data[i] = simplified_info
60+
self.save_data()
61+
return True, False # Updated, but not added
62+
63+
# If character doesn't exist, add new one
64+
self.data.append(simplified_info)
65+
self.added_nikkes += 1
4666
self.save_data()
47-
return True
67+
return True, True # Added new character
4868

4969
def get_character(self, name: str) -> Optional[Dict[str, Any]]:
50-
return self.data.get(name)
70+
for character in self.data:
71+
if character["name"] == name:
72+
return character
73+
return None
74+
75+
def get_added_nikkes_count(self) -> int:
76+
return self.added_nikkes
5177

52-
def get_all_characters(self) -> Dict[str, Any]:
78+
def get_all_characters(self) -> List[Dict[str, Any]]:
5379
return self.data
5480

5581
def close(self) -> None:

src/gui/ui.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def stop(self):
5656

5757

5858
class NikkeOCRUI(QMainWindow):
59+
5960
def __init__(self) -> None:
6061
super().__init__()
6162
self.config: Config = Config()
@@ -66,7 +67,6 @@ def __init__(self) -> None:
6667

6768
self.automation_active: bool = False
6869
self.first_nikke_name: Optional[str] = None
69-
self.processed_nikkes: int = 0
7070
self.current_step: int = 0
7171
self.selected_rarities: List[str] = ["SSR", "SR", "R"]
7272

@@ -219,7 +219,6 @@ def _start_automation(self) -> None:
219219
self.automation_active = True
220220
self.current_step = 0
221221
self.first_nikke_name = None
222-
self.processed_nikkes = 0
223222
self.status_label.setText(_("Status: Running (Press F1 to stop)"))
224223
self.log(_("Automation started. Performing click sequence..."))
225224
self._perform_automation()
@@ -230,7 +229,7 @@ def _stop_automation(self) -> None:
230229
self.current_step = 0
231230
self.status_label.setText(_("Status: Idle (Press F1 to start)"))
232231
self.log(_("Automation stopped and reset"))
233-
self.log(f"Total Nikkes processed: {self.processed_nikkes}")
232+
self.log(f"Total new Nikkes added: {self.database.get_added_nikkes_count()}")
234233

235234
def _move_to_next_character(self) -> None:
236235
self.log(_("Clicking to move to next character."))
@@ -462,8 +461,12 @@ def _handle_character(self, nikke_info: Dict[str, Any]) -> None:
462461
name: str = nikke_info["name"]
463462
self.log(f"Identified Nikke: {name}")
464463

465-
if self.database.add_or_update_character(name, nikke_info):
466-
self.log(f"Updated database for {name}")
464+
success, added = self.database.add_or_update_character(name, nikke_info)
465+
if success:
466+
if added:
467+
self.log(f"Added new Nikke to database: {name}")
468+
else:
469+
self.log(f"Updated existing Nikke in database: {name}")
467470
else:
468471
self.log(f"Failed to update database for {name}")
469472

0 commit comments

Comments
 (0)