Skip to content

Commit 4cdb51c

Browse files
committed
refactor: Обновил кодовую базу
1 parent f74f5f0 commit 4cdb51c

File tree

6 files changed

+208
-168
lines changed

6 files changed

+208
-168
lines changed

db.py

Lines changed: 21 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
import sqlite3
2-
from pathlib import Path
32

4-
5-
def get_data_path():
6-
documents_path = Path.home() / "Documents"
7-
data_path = documents_path / "QtLauncher_Data"
8-
data_path.mkdir(exist_ok=True)
9-
return data_path
3+
from utils import get_data_path
104

115

126
class Database:
@@ -39,24 +33,20 @@ def create_tables(self):
3933
)"""
4034
)
4135

42-
cursor.execute("INSERT OR IGNORE INTO Categories (name) VALUES (?)",
43-
("Все",))
36+
cursor.execute(
37+
"INSERT OR IGNORE INTO Categories (name) VALUES (?)", ("Все",)
38+
)
4439

4540
conn.commit()
4641
conn.close()
4742

48-
def check_name_is_unique(self, name):
49-
conn = self.get_connection()
50-
cursor = conn.cursor()
51-
cursor.execute("SELECT COUNT(*) FROM Games WHERE name = ?", (name,))
52-
count = cursor.fetchone()[0]
53-
return count == 0
54-
55-
def check_path_is_unique(self, game_path):
43+
def check_unique(self, select_from, where_value, parameter):
5644
conn = self.get_connection()
5745
cursor = conn.cursor()
58-
cursor.execute("SELECT COUNT(*) FROM Games WHERE path = ?",
59-
(game_path,))
46+
cursor.execute(
47+
f"SELECT COUNT(*) FROM {select_from} WHERE {where_value} = ?",
48+
(parameter,),
49+
)
6050
count = cursor.fetchone()[0]
6151
return count == 0
6252

@@ -69,9 +59,6 @@ def insert_game(self, name, game_path, category_id):
6959
(name, game_path, category_id),
7060
)
7161
conn.commit()
72-
print(f"Игра '{name}' добавлена в базу данных")
73-
except sqlite3.IntegrityError:
74-
print(f"Ошибка: игра с именем '{name}' уже существует")
7562
except Exception as e:
7663
print(f"Ошибка при добавлении игры: {e}")
7764
finally:
@@ -86,31 +73,31 @@ def insert_category(self, name):
8673
(name,),
8774
)
8875
conn.commit()
89-
except sqlite3.IntegrityError:
90-
print(f"Ошибка: категория с именем '{name}' уже существует")
9176
except Exception as e:
9277
print(f"Ошибка при добавлении категории: {e}")
9378
finally:
9479
conn.close()
9580

96-
def delete_category(self, category_id):
81+
def delete(self, select_from, where_value, parameter):
9782
conn = self.get_connection()
9883
cursor = conn.cursor()
9984
try:
10085
cursor.execute(
101-
"DELETE FROM Categories WHERE id = ?", (category_id,)
86+
f"DELETE FROM {select_from} WHERE {where_value} = ?",
87+
(parameter,),
10288
)
10389
conn.commit()
10490
except Exception as e:
105-
print(f"Ошибка при удалении категории: {e}")
91+
print(f"Ошибка при удалении: {e}")
10692
finally:
10793
conn.close()
10894

10995
def get_games_by_category(self, category_id):
11096
conn = self.get_connection()
11197
cursor = conn.cursor()
112-
cursor.execute("SELECT * FROM Games WHERE category_id = ?",
113-
(category_id,))
98+
cursor.execute(
99+
"SELECT * FROM Games WHERE category_id = ?", (category_id,)
100+
)
114101
games = cursor.fetchall()
115102
conn.close()
116103
return games
@@ -138,15 +125,17 @@ def check_category_id_is_valid(self):
138125

139126
cursor.execute(
140127
"SELECT id, name, category_id FROM Games WHERE category_id NOT IN ({})".format(
141-
','.join('?' for _ in valid_category_ids)
142-
), list(valid_category_ids))
128+
",".join("?" for _ in valid_category_ids)
129+
),
130+
list(valid_category_ids),
131+
)
143132

144133
invalid_games = cursor.fetchall()
145134

146135
for game_id, game_name, old_category_id in invalid_games:
147136
cursor.execute(
148137
"UPDATE Games SET category_id = ? WHERE id = ?",
149-
(1, game_id)
138+
(1, game_id),
150139
)
151140

152141
conn.commit()
@@ -179,21 +168,6 @@ def get_category_id_by_name(self, name):
179168
conn.close()
180169
return _id
181170

182-
def category_name_check_unique(self, name):
183-
conn = self.get_connection()
184-
cursor = conn.cursor()
185-
cursor.execute("SELECT COUNT(*) FROM Categories WHERE name = ?",
186-
(name,))
187-
count = cursor.fetchone()[0]
188-
return count == 0
189-
190-
def delete_game(self, name):
191-
conn = self.get_connection()
192-
cursor = conn.cursor()
193-
cursor.execute("DELETE FROM Games WHERE name = ?", (name,))
194-
conn.commit()
195-
conn.close()
196-
197171
def get_games(self):
198172
conn = self.get_connection()
199173
cursor = conn.cursor()

dialogs.py

Lines changed: 71 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,15 @@
77
from ui.edit_game_dialog_ui import Ui_Dialog as EditGameUI
88

99

10-
class AddGameDialog(QDialog, AddGameUI):
10+
class BaseDialog:
11+
def get_categories(self):
12+
combobox = self.comboBox
13+
categories = database.get_categories()
14+
for category in categories:
15+
combobox.addItem(category[0])
16+
17+
18+
class AddGameDialog(QDialog, AddGameUI, BaseDialog):
1119
def __init__(self):
1220
super().__init__()
1321
self.setFixedSize(450, 180)
@@ -23,12 +31,6 @@ def __init__(self):
2331
self.buttonBox.accepted.connect(self.accept_dialog)
2432
self.buttonBox.rejected.connect(self.reject)
2533

26-
def get_categories(self):
27-
combobox = self.comboBox
28-
categories = database.get_categories()
29-
for category in categories:
30-
combobox.addItem(category[0])
31-
3234
def choose_file(self):
3335
file_path = QFileDialog.getOpenFileName(
3436
self, "Выбрать файл", "", "EXE - Файл (*.exe)"
@@ -40,7 +42,8 @@ def accept_dialog(self):
4042
game_name = self.game_name.text().strip()
4143
game_path = self.file_path.text().strip()
4244
category_id = database.get_category_id_by_name(
43-
self.comboBox.currentText())
45+
self.comboBox.currentText()
46+
)
4447

4548
if not game_name:
4649
QMessageBox.warning(self, "Ошибка", "Введите название игры")
@@ -53,14 +56,20 @@ def accept_dialog(self):
5356
if not category_id:
5457
category_id = 1
5558

56-
if not database.check_name_is_unique(game_name):
57-
QMessageBox.warning(self, "Ошибка",
58-
"Игра с таким именем уже существует")
59+
if not database.check_unique(
60+
select_from="Games", where_value="name", parameter=game_name
61+
):
62+
QMessageBox.warning(
63+
self, "Ошибка", "Игра с таким именем уже существует"
64+
)
5965
return
6066

61-
if not database.check_path_is_unique(game_path):
62-
QMessageBox.warning(self, "Ошибка",
63-
"Игра с таким путём уке существует")
67+
if not database.check_unique(
68+
select_from="Games", where_value="path", parameter=game_path
69+
):
70+
QMessageBox.warning(
71+
self, "Ошибка", "Игра с таким путём уке существует"
72+
)
6473
return
6574

6675
try:
@@ -69,11 +78,12 @@ def accept_dialog(self):
6978
QMessageBox.information(self, "Успех", "Игра добавлена!")
7079

7180
except Exception as e:
72-
QMessageBox.critical(self, "Ошибка",
73-
f"Не удалось добавить игру: {str(e)}")
81+
QMessageBox.critical(
82+
self, "Ошибка", f"Не удалось добавить игру: {str(e)}"
83+
)
7484

7585

76-
class EditGameDialog(QDialog, EditGameUI):
86+
class EditGameDialog(QDialog, EditGameUI, BaseDialog):
7787
def __init__(self, game_name):
7888
super().__init__()
7989
self.orig_game_name = game_name
@@ -92,12 +102,6 @@ def __init__(self, game_name):
92102
self.buttonBox.accepted.connect(self.accept_dialog)
93103
self.buttonBox.rejected.connect(self.reject)
94104

95-
def get_categories(self):
96-
combobox = self.comboBox
97-
categories = database.get_categories()
98-
for category in categories:
99-
combobox.addItem(category[0])
100-
101105
def load_game_data(self):
102106
game_data = database.get_game(self.orig_game_name)
103107
if game_data:
@@ -113,7 +117,8 @@ def load_game_data(self):
113117
def accept_dialog(self):
114118
new_game_name = self.game_name.text().strip()
115119
category_id = database.get_category_id_by_name(
116-
self.comboBox.currentText())
120+
self.comboBox.currentText()
121+
)
117122

118123
if not new_game_name:
119124
QMessageBox.warning(self, "Ошибка", "Введите название игры")
@@ -123,21 +128,26 @@ def accept_dialog(self):
123128
category_id = 1
124129

125130
# Проверяем уникальность имени, только если имя изменилось
126-
if new_game_name != self.orig_game_name and not database.check_name_is_unique(
127-
new_game_name):
128-
QMessageBox.warning(self, "Ошибка",
129-
"Игра с таким именем уже существует")
131+
if (
132+
new_game_name != self.orig_game_name
133+
and not database.check_name_is_unique(new_game_name)
134+
):
135+
QMessageBox.warning(
136+
self, "Ошибка", "Игра с таким именем уже существует"
137+
)
130138
return
131139

132140
try:
133-
database.update_game(self.orig_game_name, new_game_name,
134-
category_id)
141+
database.update_game(
142+
self.orig_game_name, new_game_name, category_id
143+
)
135144
self.accept()
136145
QMessageBox.information(self, "Успех", "Игра обновлена!")
137146

138147
except Exception as e:
139-
QMessageBox.critical(self, "Ошибка",
140-
f"Не удалось обновить игру: {str(e)}")
148+
QMessageBox.critical(
149+
self, "Ошибка", f"Не удалось обновить игру: {str(e)}"
150+
)
141151

142152

143153
class AddCategoryDialog(QDialog, AddCategoryUI):
@@ -156,28 +166,35 @@ def __init__(self):
156166
def accept_dialog(self):
157167
category_name = self.lineEdit.text().strip()
158168
if not category_name:
159-
QMessageBox.warning(self, "Ошибка",
160-
"Категория не может быть пустой")
169+
QMessageBox.warning(
170+
self, "Ошибка", "Категория не может быть пустой"
171+
)
161172
return
162173

163-
if not database.category_name_check_unique(category_name):
164-
QMessageBox.warning(self, "Ошибка",
165-
"Категория с таким именем уже есть")
174+
if not database.check_unique(
175+
select_from="Categories",
176+
where_value="name",
177+
parameter=category_name,
178+
):
179+
QMessageBox.warning(
180+
self, "Ошибка", "Категория с таким именем уже есть"
181+
)
166182
return
167183

168184
try:
169185
database.insert_category(category_name)
170186
self.accept()
171-
QMessageBox.information(self, "Успех",
172-
"Категория успешно добавлена")
187+
QMessageBox.information(
188+
self, "Успех", "Категория успешно добавлена"
189+
)
173190

174191
except Exception as e:
175192
QMessageBox.critical(
176193
self, "Ошибка", f"Не удалось добавить категорию: {str(e)}"
177194
)
178195

179196

180-
class DeleteCategoryDialog(QDialog, DeleteCategoryUI):
197+
class DeleteCategoryDialog(QDialog, DeleteCategoryUI, BaseDialog):
181198
def __init__(self):
182199
super().__init__()
183200
self.setFixedSize(300, 110)
@@ -192,32 +209,31 @@ def __init__(self):
192209
self.buttonBox.accepted.connect(self.accept_dialog)
193210
self.buttonBox.rejected.connect(self.reject)
194211

195-
def get_categories(self):
196-
combobox = self.comboBox
197-
categories = database.get_categories()
198-
for category in categories:
199-
combobox.addItem(category[0])
200-
201212
def accept_dialog(self):
202213
category_name = self.comboBox.currentText()
203214
if category_name == "Все":
204-
QMessageBox.warning(self, "Ошибка",
205-
"Данную категорию удалить нельзя!")
215+
QMessageBox.warning(
216+
self, "Ошибка", "Данную категорию удалить нельзя!"
217+
)
206218
return
207219
if not category_name:
208-
QMessageBox.warning(self, "Ошибка",
209-
"Категория не может быть пустой")
220+
QMessageBox.warning(
221+
self, "Ошибка", "Категория не может быть пустой"
222+
)
210223
return
211224

212225
try:
213226
database.edit_games_category(
214-
database.get_category_id_by_name(category_name), 1)
227+
database.get_category_id_by_name(category_name), 1
228+
)
215229

216-
database.delete_category(
217-
database.get_category_id_by_name(category_name))
230+
database.delete(
231+
select_from="Categories",
232+
where_value="id",
233+
parameter=database.get_category_id_by_name(category_name),
234+
)
218235
self.accept()
219-
QMessageBox.information(self, "Успех",
220-
"Категория успешно удалена")
236+
QMessageBox.information(self, "Успех", "Категория успешно удалена")
221237

222238
except Exception as e:
223239
QMessageBox.critical(

0 commit comments

Comments
 (0)