pause when swap mode
This commit is contained in:
parent
04f5562e57
commit
f0bba3a390
@ -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:
|
||||
"""Получить текущий режим."""
|
||||
|
||||
@ -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:
|
||||
"""Форматировать время из миллисекунд."""
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user