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.
This commit is contained in:
@@ -3,7 +3,7 @@ from PySide6.QtCore import Slot
|
|||||||
from PySide6.QtGui import QPixmap
|
from PySide6.QtGui import QPixmap
|
||||||
from PySide6.QtWidgets import QPushButton
|
from PySide6.QtWidgets import QPushButton
|
||||||
|
|
||||||
from core.database import DatabaseManager
|
from core.database import db_manager
|
||||||
from core.media import MediaRepository
|
from core.media import MediaRepository
|
||||||
from core.camera.camera_manager import CameraManager
|
from core.camera.camera_manager import CameraManager
|
||||||
from ui.widgets.color_list_widget import ColorListWidget
|
from ui.widgets.color_list_widget import ColorListWidget
|
||||||
@@ -14,8 +14,8 @@ from ui.widgets.split_view_widget import SplitView, CameraPlaceholder, ViewWithO
|
|||||||
class MainController:
|
class MainController:
|
||||||
def __init__(self, view):
|
def __init__(self, view):
|
||||||
self.view = view
|
self.view = view
|
||||||
self.db = DatabaseManager()
|
self.db = db_manager
|
||||||
self.media_repo = MediaRepository(self.db)
|
self.media_repo = MediaRepository()
|
||||||
self.camera_manager = CameraManager()
|
self.camera_manager = CameraManager()
|
||||||
|
|
||||||
# --- UI Widgets ---
|
# --- UI Widgets ---
|
||||||
|
|||||||
@@ -154,3 +154,6 @@ class DatabaseManager:
|
|||||||
cur = self.conn.cursor()
|
cur = self.conn.cursor()
|
||||||
cur.execute("DELETE FROM media WHERE color_id = ?", (color_id,))
|
cur.execute("DELETE FROM media WHERE color_id = ?", (color_id,))
|
||||||
self.conn.commit()
|
self.conn.commit()
|
||||||
|
|
||||||
|
|
||||||
|
db_manager = DatabaseManager()
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import shutil
|
import shutil
|
||||||
from core.database import DatabaseManager
|
from core.database import db_manager
|
||||||
|
|
||||||
MEDIA_DIR = Path("media")
|
MEDIA_DIR = Path("media")
|
||||||
DEFAULT_ICON = Path("media/default_icon.jpg")
|
DEFAULT_ICON = Path("media/default_icon.jpg")
|
||||||
|
|
||||||
class MediaRepository:
|
class MediaRepository:
|
||||||
def __init__(self, db: DatabaseManager):
|
def __init__(self):
|
||||||
self.db = db
|
self.db = db_manager
|
||||||
|
|
||||||
def sync_media(self):
|
def sync_media(self):
|
||||||
disk_colors = {d.name for d in MEDIA_DIR.iterdir() if d.is_dir()}
|
disk_colors = {d.name for d in MEDIA_DIR.iterdir() if d.is_dir()}
|
||||||
|
|||||||
19
review.md
19
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.
|
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ć.
|
Ś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`.
|
||||||
Reference in New Issue
Block a user