From c8d9029df740b402142533239b86f3090d098505 Mon Sep 17 00:00:00 2001 From: bartool Date: Tue, 14 Oct 2025 08:55:45 +0200 Subject: [PATCH] refactor: Implement Singleton pattern for DatabaseManager Refactor the database handling to use a Singleton pattern for `DatabaseManager`. - A single, module-level instance `db_manager` is created in `core/database.py` to ensure one database connection is used throughout the application. - `MediaRepository` and `MainController` are updated to use this shared instance instead of creating their own. - This simplifies dependency injection and prevents potential issues with multiple database connections. - Also, update `review.md` to reflect the progress. --- controllers/main_controller.py | 6 +++--- core/database.py | 3 +++ core/media.py | 6 +++--- review.md | 19 +++++++++++++++++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/controllers/main_controller.py b/controllers/main_controller.py index 5afb9a5..d37befa 100644 --- a/controllers/main_controller.py +++ b/controllers/main_controller.py @@ -3,7 +3,7 @@ from PySide6.QtCore import Slot from PySide6.QtGui import QPixmap from PySide6.QtWidgets import QPushButton -from core.database import DatabaseManager +from core.database import db_manager from core.media import MediaRepository from core.camera.camera_manager import CameraManager from ui.widgets.color_list_widget import ColorListWidget @@ -14,8 +14,8 @@ from ui.widgets.split_view_widget import SplitView, CameraPlaceholder, ViewWithO class MainController: def __init__(self, view): self.view = view - self.db = DatabaseManager() - self.media_repo = MediaRepository(self.db) + self.db = db_manager + self.media_repo = MediaRepository() self.camera_manager = CameraManager() # --- UI Widgets --- diff --git a/core/database.py b/core/database.py index fec47bd..a10cb14 100644 --- a/core/database.py +++ b/core/database.py @@ -154,3 +154,6 @@ class DatabaseManager: cur = self.conn.cursor() cur.execute("DELETE FROM media WHERE color_id = ?", (color_id,)) self.conn.commit() + + +db_manager = DatabaseManager() diff --git a/core/media.py b/core/media.py index 2a17ca1..c02bfc1 100644 --- a/core/media.py +++ b/core/media.py @@ -1,13 +1,13 @@ from pathlib import Path import shutil -from core.database import DatabaseManager +from core.database import db_manager MEDIA_DIR = Path("media") DEFAULT_ICON = Path("media/default_icon.jpg") class MediaRepository: - def __init__(self, db: DatabaseManager): - self.db = db + def __init__(self): + self.db = db_manager def sync_media(self): disk_colors = {d.name for d in MEDIA_DIR.iterdir() if d.is_dir()} diff --git a/review.md b/review.md index f80d228..8acaaf2 100644 --- a/review.md +++ b/review.md @@ -51,3 +51,22 @@ To bardzo obiecujący projekt z solidnymi fundamentami. Moje sugestie mają na c 4. **Uprość logikę UI:** Zastanów się nad refaktoryzacją obsługi stanu przycisków w `MainController`, aby kod był bardziej czytelny i mniej podatny na błędy. Świetna robota! Jeśli masz więcej pytań lub chciałbyś, żebym przyjrzał się jakiemuś konkretnemu fragmentowi, daj znać. + +--- + +### Postęp Prac (14.10.2025) + +Na podstawie powyższej recenzji, wspólnie wprowadziliśmy następujące zmiany: + +* **Zrefaktoryzowano ścieżki do zasobów (Zrealizowano):** + * Utworzono plik `settings.py` do centralnego zarządzania ścieżkami. + * Zaktualizowano komponenty UI (`split_view_widget.py`, `view_settings_dialog.py`), aby korzystały ze scentralizowanych ścieżek, co uniezależniło aplikację od katalogu roboczego. + +* **Poprawiono logikę rotacji obrazu (Zrealizowano):** + * Zmieniono mechanizm obracania obrazu referencyjnego w `SplitView`, aby operacje były wykonywane na oryginalnym obrazie. Zapobiega to stopniowej utracie jakości przy wielokrotnych rotacjach. + +* **Uproszczono logikę sygnałów w `MainController` (Zrealizowano):** + * Zastąpiono dynamiczne łączenie i rozłączanie sygnałów przycisku kamery jednym, stałym połączeniem i centralną metodą obsługi. Zwiększyło to czytelność i niezawodność kodu. + +* **Wyczyszczono projekt (Zrealizowano):** + * Użytkownik potwierdził usunięcie zduplikowanych plików (`camera_controller.py` i `mock_gphoto.py`) z katalogu `controllers`. \ No newline at end of file