From f0bba3a390c226d426a3e5feb2e6fc36980449fc Mon Sep 17 00:00:00 2001 From: cheykrym Date: Wed, 1 Apr 2026 03:41:19 +0300 Subject: [PATCH] pause when swap mode --- controllers/media_controller.py | 5 +++ screens/media.py | 59 ++++++++++++++++++++++----------- 2 files changed, 45 insertions(+), 19 deletions(-) diff --git a/controllers/media_controller.py b/controllers/media_controller.py index b2e0e5d..b968836 100644 --- a/controllers/media_controller.py +++ b/controllers/media_controller.py @@ -200,7 +200,12 @@ class MediaController(QObject): def set_mode(self, mode: str) -> None: """Установить активный режим.""" if mode in self._controllers: + # Если переключаемся с Bluetooth на CarPlay - ставим паузу + if self._current_mode == "bluetooth" and mode == "carplay": + self._controllers["bluetooth"].pause() self._current_mode = mode + # Сигнал о смене режима для обновления UI + self.metadata_changed.emit(self.get_metadata()) def get_mode(self) -> str: """Получить текущий режим.""" diff --git a/screens/media.py b/screens/media.py index 5288998..2373dbe 100644 --- a/screens/media.py +++ b/screens/media.py @@ -19,6 +19,10 @@ class MediaScreen(QWidget): def __init__(self, media_controller: MediaController = None): super().__init__() self._controller = media_controller + + # Подключаемся на сигнал изменения метаданных + if self._controller: + self._controller.metadata_changed.connect(self._on_metadata_changed) root = QVBoxLayout(self) root.setContentsMargins(18, 16, 18, 16) @@ -157,9 +161,44 @@ class MediaScreen(QWidget): def set_controller(self, controller: MediaController) -> None: """Установить контроллер.""" + if self._controller: + self._controller.metadata_changed.disconnect(self._on_metadata_changed) self._controller = controller + if self._controller: + self._controller.metadata_changed.connect(self._on_metadata_changed) self._refresh_metadata() + def _on_metadata_changed(self, metadata: TrackMetadata) -> None: + """Обновить UI при изменении метаданных.""" + self._apply_metadata(metadata) + + def _apply_metadata(self, metadata: TrackMetadata) -> None: + """Применить метаданные к UI.""" + if metadata.title: + self.title.setText(metadata.title) + else: + self.title.setText("Название трека") + if metadata.artist: + self.artist.setText(metadata.artist) + else: + self.artist.setText("Исполнитель") + if metadata.album: + self.album.setText(metadata.album) + else: + self.album.setText("Альбом") + if metadata.source: + text = f"Источник: {metadata.source}" + self.source.setText(text) + self.source_changed.emit(text) + if metadata.duration is not None and metadata.duration > 0: + self.progress.setRange(0, metadata.duration) + self.time_total.setText(self._format_time(metadata.duration)) + if metadata.position is not None: + self.progress.setValue(metadata.position) + self.time_pos.setText(self._format_time(metadata.position)) + if metadata.status: + self.btn_play.setText("⏸" if metadata.status == "playing" else "▶") + def _toggle_play(self): """Переключить воспроизведение/пауза.""" if self._controller: @@ -184,25 +223,7 @@ class MediaScreen(QWidget): return metadata = self._controller.get_metadata() - - if metadata.title: - self.title.setText(metadata.title) - if metadata.artist: - self.artist.setText(metadata.artist) - if metadata.album: - self.album.setText(metadata.album) - if metadata.source: - text = f"Источник: {metadata.source}" - self.source.setText(text) - self.source_changed.emit(text) - if metadata.duration is not None and metadata.duration > 0: - self.progress.setRange(0, metadata.duration) - self.time_total.setText(self._format_time(metadata.duration)) - if metadata.position is not None: - self.progress.setValue(metadata.position) - self.time_pos.setText(self._format_time(metadata.position)) - if metadata.status: - self.btn_play.setText("⏸" if metadata.status == "playing" else "▶") + self._apply_metadata(metadata) def _format_time(self, ms: int) -> str: """Форматировать время из миллисекунд."""