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:
|
def set_mode(self, mode: str) -> None:
|
||||||
"""Установить активный режим."""
|
"""Установить активный режим."""
|
||||||
if mode in self._controllers:
|
if mode in self._controllers:
|
||||||
|
# Если переключаемся с Bluetooth на CarPlay - ставим паузу
|
||||||
|
if self._current_mode == "bluetooth" and mode == "carplay":
|
||||||
|
self._controllers["bluetooth"].pause()
|
||||||
self._current_mode = mode
|
self._current_mode = mode
|
||||||
|
# Сигнал о смене режима для обновления UI
|
||||||
|
self.metadata_changed.emit(self.get_metadata())
|
||||||
|
|
||||||
def get_mode(self) -> str:
|
def get_mode(self) -> str:
|
||||||
"""Получить текущий режим."""
|
"""Получить текущий режим."""
|
||||||
|
|||||||
@ -19,6 +19,10 @@ class MediaScreen(QWidget):
|
|||||||
def __init__(self, media_controller: MediaController = None):
|
def __init__(self, media_controller: MediaController = None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._controller = media_controller
|
self._controller = media_controller
|
||||||
|
|
||||||
|
# Подключаемся на сигнал изменения метаданных
|
||||||
|
if self._controller:
|
||||||
|
self._controller.metadata_changed.connect(self._on_metadata_changed)
|
||||||
|
|
||||||
root = QVBoxLayout(self)
|
root = QVBoxLayout(self)
|
||||||
root.setContentsMargins(18, 16, 18, 16)
|
root.setContentsMargins(18, 16, 18, 16)
|
||||||
@ -157,9 +161,44 @@ class MediaScreen(QWidget):
|
|||||||
|
|
||||||
def set_controller(self, controller: MediaController) -> None:
|
def set_controller(self, controller: MediaController) -> None:
|
||||||
"""Установить контроллер."""
|
"""Установить контроллер."""
|
||||||
|
if self._controller:
|
||||||
|
self._controller.metadata_changed.disconnect(self._on_metadata_changed)
|
||||||
self._controller = controller
|
self._controller = controller
|
||||||
|
if self._controller:
|
||||||
|
self._controller.metadata_changed.connect(self._on_metadata_changed)
|
||||||
self._refresh_metadata()
|
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):
|
def _toggle_play(self):
|
||||||
"""Переключить воспроизведение/пауза."""
|
"""Переключить воспроизведение/пауза."""
|
||||||
if self._controller:
|
if self._controller:
|
||||||
@ -184,25 +223,7 @@ class MediaScreen(QWidget):
|
|||||||
return
|
return
|
||||||
|
|
||||||
metadata = self._controller.get_metadata()
|
metadata = self._controller.get_metadata()
|
||||||
|
self._apply_metadata(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 "▶")
|
|
||||||
|
|
||||||
def _format_time(self, ms: int) -> str:
|
def _format_time(self, ms: int) -> str:
|
||||||
"""Форматировать время из миллисекунд."""
|
"""Форматировать время из миллисекунд."""
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user