From ca25b06f992d6ce62c846e1ddd7248f44f0a2bdf Mon Sep 17 00:00:00 2001 From: bartool Date: Wed, 1 Oct 2025 18:26:41 +0200 Subject: [PATCH] refactor: implement CameraManager class with methods for detecting GPhoto and OpenCV cameras --- controllers/main_controller.py | 149 +++++++++++++++++---------------- core/camera/camera_manager.py | 20 +++++ 2 files changed, 98 insertions(+), 71 deletions(-) create mode 100644 core/camera/camera_manager.py diff --git a/controllers/main_controller.py b/controllers/main_controller.py index 5bfd6d5..6453a84 100644 --- a/controllers/main_controller.py +++ b/controllers/main_controller.py @@ -5,89 +5,96 @@ from core.media import MediaRepository from ui.widgets.color_list_widget import ColorListWidget from ui.widgets.thumbnail_list_widget import ThumbnailListWidget from ui.widgets.split_view_widget import SplitView -from .camera_controller import CameraController - -from core.camera.gphoto_camera import GPhotoCamera +# from .camera_controller import CameraController +from core.camera.camera_controller import CameraController from core.camera.camera_manager import CameraManager + +from core.camera.gphoto_camera import GPhotoCamera +from core.camera.camera_controller import CameraController + class MainController: - def __init__(self, view): - self.db = DatabaseManager() - self.db.connect() - self.media_repo = MediaRepository(self.db) - self.media_repo.sync_media() + def __init__(self, view): + self.db = DatabaseManager() + self.db.connect() + self.media_repo = MediaRepository(self.db) + self.media_repo.sync_media() - camera = GPhotoCamera() - self.manager = CameraManager(camera) + # camera = GPhotoCamera() + # self.manager = CameraController(camera) + manager = CameraManager() + manager.detect_gphoto() + manager.detect_opencv() + + # self.camera_controller = CameraController() + + self.view = view + self.color_list: ColorListWidget = view.color_list_widget + self.thumbnail_list: ThumbnailListWidget = view.thumbnail_widget + self.split_view: SplitView = view.preview_widget + + self.photo_button: QPushButton = view.photo_button + self.photo_button.clicked.connect(self.take_photo) + + self.record_button: QPushButton = view.record_button + # self.record_button.clicked.connect(self.fun_test) + + self.color_list.colorSelected.connect(self.on_color_selected) + self.color_list.editColor.connect(self.on_edit_color) + self.thumbnail_list.selectedThumbnail.connect(self.on_thumbnail_selected) + + # self.camera_controller.errorOccurred.connect(self.split_view.widget_start.set_info_text) + # self.manager.error_occurred.connect(self.split_view.widget_start.set_info_text) + # self.camera_controller.frameReady.connect(self.split_view.set_live_image) + # self.manager.frame_ready.connect(self.split_view.set_live_image) + # self.split_view.widget_start.camera_start_btn.clicked.connect(self.camera_controller.start) + self.split_view.widget_start.camera_start_btn.clicked.connect(self.start_liveview) - # self.camera_controller = CameraController() + def start_camera(self): + pass - self.view = view - self.color_list: ColorListWidget = view.color_list_widget - self.thumbnail_list: ThumbnailListWidget = view.thumbnail_widget - self.split_view: SplitView = view.preview_widget - - self.photo_button: QPushButton = view.photo_button - self.photo_button.clicked.connect(self.take_photo) - - self.record_button: QPushButton = view.record_button - # self.record_button.clicked.connect(self.fun_test) - - self.color_list.colorSelected.connect(self.on_color_selected) - self.color_list.editColor.connect(self.on_edit_color) - self.thumbnail_list.selectedThumbnail.connect(self.on_thumbnail_selected) - - # self.camera_controller.errorOccurred.connect(self.split_view.widget_start.set_info_text) - self.manager.error_occurred.connect(self.split_view.widget_start.set_info_text) - # self.camera_controller.frameReady.connect(self.split_view.set_live_image) - self.manager.frame_ready.connect(self.split_view.set_live_image) - # self.split_view.widget_start.camera_start_btn.clicked.connect(self.camera_controller.start) - self.split_view.widget_start.camera_start_btn.clicked.connect(self.start_liveview) + def load_colors(self) -> None: + colors = self.db.get_all_colors() + print("Loaded colors:", colors) + self.color_list.set_colors(colors) - def start_camera(self): - pass + def on_color_selected(self, color_name: str): + print(f"Wybrano kolor: {color_name}") + color_id = self.db.get_color_id(color_name) + if color_id is not None: + media_items = self.db.get_media_for_color(color_id) + print(f"Media dla koloru {color_name} (ID: {color_id}):", media_items) - def load_colors(self) -> None: - colors = self.db.get_all_colors() - print("Loaded colors:", colors) - self.color_list.set_colors(colors) + self.thumbnail_list.list_widget.clear() + for media in media_items: + if media['file_type'] == 'photo': + file_name = Path(media['media_path']).name + self.thumbnail_list.add_thumbnail(media['media_path'], file_name, media['id']) + else: + print(f"Nie znaleziono koloru o nazwie: {color_name}") + def on_edit_color(self, color_name: str): + print(f"Edycja koloru: {color_name}") - def on_color_selected(self, color_name: str): - print(f"Wybrano kolor: {color_name}") - color_id = self.db.get_color_id(color_name) - if color_id is not None: - media_items = self.db.get_media_for_color(color_id) - print(f"Media dla koloru {color_name} (ID: {color_id}):", media_items) + def on_thumbnail_selected(self, media_id: int): + media = self.db.get_media(media_id) + if media: + print(f"Wybrano miniaturę o ID: {media_id}, ścieżka: {media['media_path']}") + self.split_view.set_reference_image(media['media_path']) + else: + print(f"Nie znaleziono mediów o ID: {media_id}") - self.thumbnail_list.list_widget.clear() - for media in media_items: - if media['file_type'] == 'photo': - file_name = Path(media['media_path']).name - self.thumbnail_list.add_thumbnail(media['media_path'], file_name, media['id']) - else: - print(f"Nie znaleziono koloru o nazwie: {color_name}") + def take_photo(self): + print("Robienie zdjęcia...") + self.split_view.toglle_live_view() - def on_edit_color(self, color_name: str): - print(f"Edycja koloru: {color_name}") + def start_liveview(self): + pass + # self.manager.start_camera() + # self.manager.start_stream() - def on_thumbnail_selected(self, media_id: int): - media = self.db.get_media(media_id) - if media: - print(f"Wybrano miniaturę o ID: {media_id}, ścieżka: {media['media_path']}") - self.split_view.set_reference_image(media['media_path']) - else: - print(f"Nie znaleziono mediów o ID: {media_id}") - - def take_photo(self): - print("Robienie zdjęcia...") - self.split_view.toglle_live_view() - - def start_liveview(self): - self.manager.start_camera() - # self.manager.start_stream() - - def shutdown(self): - self.manager.stop() \ No newline at end of file + def shutdown(self): + pass + # self.manager.stop() \ No newline at end of file diff --git a/core/camera/camera_manager.py b/core/camera/camera_manager.py new file mode 100644 index 0000000..5fbea5c --- /dev/null +++ b/core/camera/camera_manager.py @@ -0,0 +1,20 @@ + + +from .gphoto_camera import GPhotoCamera +from .opencv_camera import OpenCvCamera +from .camera_controller import CameraController + + +class CameraManager: + def __init__(self) -> None: + pass + + def detect_gphoto(self): + camera_list = GPhotoCamera.detect() + print(camera_list) + return camera_list + + def detect_opencv(self): + camera_list = OpenCvCamera.detect() + print(camera_list) + return camera_list