pause when swap mode

This commit is contained in:
cheykrym 2026-04-01 03:41:19 +03:00
parent 04f5562e57
commit f0bba3a390
2 changed files with 45 additions and 19 deletions

View File

@ -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:
"""Получить текущий режим."""

View File

@ -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:
"""Форматировать время из миллисекунд."""