Use signals for setting next track
This commit is contained in:
parent
c6be215bd4
commit
edd8c36c53
@ -244,10 +244,6 @@ class MusicMusterSignals(QObject):
|
||||
# escape there to abandon an edit.
|
||||
enable_escape_signal = pyqtSignal(bool)
|
||||
|
||||
# Signals that the next-cued track has changed. Used to update
|
||||
# playlist headers.
|
||||
next_track_changed_signal = pyqtSignal()
|
||||
|
||||
# Signals that the playlist_id passed should resize all rows.
|
||||
resize_rows_signal = pyqtSignal(int)
|
||||
|
||||
@ -277,11 +273,14 @@ class MusicMusterSignals(QObject):
|
||||
|
||||
# signal_set_next_track takes a PlaylistRow as an argument. We can't
|
||||
# specify that here as it requires us to import PlaylistRow from
|
||||
# playlistrow.py, which itself imports MusicMusterSignals
|
||||
|
||||
# TBD
|
||||
# playlistrow.py, which itself imports MusicMusterSignals. It tells
|
||||
# musicmuster to set the passed track as the next one.
|
||||
signal_set_next_track = pyqtSignal(object)
|
||||
|
||||
# Signals that the next-cued track has changed. Used to update
|
||||
# playlist headers and track timings.
|
||||
signal_next_track_changed = pyqtSignal()
|
||||
|
||||
# Emited when a track starts playing
|
||||
signal_track_started = pyqtSignal(TrackAndPlaylist)
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import datetime as dt
|
||||
import threading
|
||||
from time import sleep
|
||||
|
||||
|
||||
@ -21,6 +22,7 @@ from config import Config
|
||||
import helpers
|
||||
from log import log
|
||||
|
||||
|
||||
class _FadeTrack(QThread):
|
||||
finished = pyqtSignal()
|
||||
|
||||
|
||||
@ -101,9 +101,6 @@ class SignalMonitor:
|
||||
self.signals.enable_escape_signal.connect(
|
||||
partial(self.show_signal, "enable_escape_signal ")
|
||||
)
|
||||
self.signals.next_track_changed_signal.connect(
|
||||
partial(self.show_signal, "next_track_changed_signal ")
|
||||
)
|
||||
self.signals.resize_rows_signal.connect(
|
||||
partial(self.show_signal, "resize_rows_signal ")
|
||||
)
|
||||
@ -140,6 +137,7 @@ class SignalMonitor:
|
||||
self.signals.signal_track_started.connect(
|
||||
partial(self.show_signal, "signal_track_started ")
|
||||
)
|
||||
# span_cells_signal is very noisy
|
||||
# self.signals.span_cells_signal.connect(
|
||||
# partial(self.show_signal, "span_cells_signal ")
|
||||
# )
|
||||
@ -1659,7 +1657,7 @@ class Window(QMainWindow):
|
||||
"""
|
||||
|
||||
self.track_sequence.set_next(None)
|
||||
self.signals.next_track_changed_signal.emit()
|
||||
self.signals.signal_set_next_track.emit(None)
|
||||
|
||||
def clear_selection(self, checked: bool = False) -> None:
|
||||
"""Clear row selection"""
|
||||
@ -1741,9 +1739,12 @@ class Window(QMainWindow):
|
||||
self.txtSearch.textChanged.connect(self.search_playlist_text_changed)
|
||||
|
||||
self.signals.enable_escape_signal.connect(self.enable_escape)
|
||||
self.signals.next_track_changed_signal.connect(self.update_headers)
|
||||
self.signals.status_message_signal.connect(self.show_status_message)
|
||||
self.signals.search_songfacts_signal.connect(self.open_songfacts_browser)
|
||||
self.signals.search_wikipedia_signal.connect(self.open_wikipedia_browser)
|
||||
self.signals.show_warning_signal.connect(self.show_warning)
|
||||
self.signals.signal_next_track_changed.connect(self.signal_next_track_changed_handler)
|
||||
self.signals.signal_set_next_track.connect(self.signal_set_next_track_handler)
|
||||
self.signals.status_message_signal.connect(self.show_status_message)
|
||||
self.signals.track_ended_signal.connect(self.end_of_track_actions)
|
||||
|
||||
self.timer10.timeout.connect(self.tick_10ms)
|
||||
@ -1751,9 +1752,6 @@ class Window(QMainWindow):
|
||||
self.timer100.timeout.connect(self.tick_100ms)
|
||||
self.timer1000.timeout.connect(self.tick_1000ms)
|
||||
|
||||
self.signals.search_songfacts_signal.connect(self.open_songfacts_browser)
|
||||
self.signals.search_wikipedia_signal.connect(self.open_wikipedia_browser)
|
||||
|
||||
# @log_call
|
||||
def current_row_or_end(self) -> int:
|
||||
"""
|
||||
@ -2523,6 +2521,21 @@ class Window(QMainWindow):
|
||||
|
||||
self._active_tab().scroll_to_top(playlist_track.row_number)
|
||||
|
||||
def signal_set_next_track_handler(self, plr: PlaylistRow) -> None:
|
||||
"""
|
||||
Handle signal_set_next_track
|
||||
"""
|
||||
|
||||
self.track_sequence.set_next(plr)
|
||||
self.signals.signal_next_track_changed.emit()
|
||||
|
||||
def signal_next_track_changed_handler(self) -> None:
|
||||
"""
|
||||
Handle next track changed
|
||||
"""
|
||||
|
||||
self.update_headers()
|
||||
|
||||
# @log_call
|
||||
def stop(self, checked: bool = False) -> None:
|
||||
"""Stop playing immediately"""
|
||||
|
||||
@ -101,6 +101,7 @@ class PlaylistModel(QAbstractTableModel):
|
||||
self.signals.signal_set_next_row.connect(self.set_next_row)
|
||||
self.signals.signal_track_started.connect(self.track_started)
|
||||
self.signals.track_ended_signal.connect(self.previous_track_ended)
|
||||
self.signals.signal_next_track_changed.connect(self.signal_next_track_changed_handler)
|
||||
|
||||
# Populate self.playlist_rows
|
||||
for dto in ds.playlistrows_by_playlist(self.playlist_id):
|
||||
@ -1303,8 +1304,6 @@ class PlaylistModel(QAbstractTableModel):
|
||||
if self.track_sequence.next:
|
||||
old_next_row = self.track_sequence.next.row_number
|
||||
|
||||
self.track_sequence.set_next(plr)
|
||||
|
||||
roles = [
|
||||
Qt.ItemDataRole.BackgroundRole,
|
||||
]
|
||||
@ -1314,8 +1313,19 @@ class PlaylistModel(QAbstractTableModel):
|
||||
# only invalidate required roles
|
||||
self.invalidate_row(plr.row_number, roles)
|
||||
|
||||
self.signals.next_track_changed_signal.emit()
|
||||
self.signals.signal_set_next_track.emit(plr)
|
||||
|
||||
def signal_next_track_changed_handler(self) -> None:
|
||||
"""
|
||||
Handle next track changed
|
||||
"""
|
||||
|
||||
self.update_track_times()
|
||||
# Refresh display to show new next track
|
||||
if self.track_sequence.next:
|
||||
next_row_number = self.track_sequence.next.row_number
|
||||
if next_row_number is not None:
|
||||
self.invalidate_row(next_row_number, [Qt.ItemDataRole.BackgroundRole])
|
||||
|
||||
# @log_call
|
||||
def setData(
|
||||
|
||||
@ -172,7 +172,9 @@ class PlaylistRow:
|
||||
"""
|
||||
|
||||
if self.track_id > 0:
|
||||
raise ApplicationError("Attempting to add track to row with existing track ({self=}")
|
||||
raise ApplicationError(
|
||||
"Attempting to add track to row with existing track ({self=}"
|
||||
)
|
||||
|
||||
ds.track_add_to_header(playlistrow_id=self.playlistrow_id, track_id=track_id)
|
||||
|
||||
@ -221,28 +223,6 @@ class PlaylistRow:
|
||||
# the change to the database.
|
||||
self.dto.row_number = value
|
||||
|
||||
def check_for_end_of_track(self) -> None:
|
||||
"""
|
||||
Check whether track has ended. If so, emit track_ended_signal
|
||||
"""
|
||||
|
||||
if self.start_time is None:
|
||||
return
|
||||
|
||||
if self.end_of_track_signalled:
|
||||
return
|
||||
|
||||
if self.music.is_playing():
|
||||
return
|
||||
|
||||
self.start_time = None
|
||||
if self.fade_graph:
|
||||
self.fade_graph.clear()
|
||||
# Ensure that player is released
|
||||
self.music.fade(0)
|
||||
self.signals.track_ended_signal.emit(self.playlist_id)
|
||||
self.end_of_track_signalled = True
|
||||
|
||||
def drop3db(self, enable: bool) -> None:
|
||||
"""
|
||||
If enable is true, drop output by 3db else restore to full volume
|
||||
@ -278,7 +258,12 @@ class PlaylistRow:
|
||||
self.start_time = now
|
||||
|
||||
# Initialise player
|
||||
self.music.play(self.path, start_time=now, position=position)
|
||||
self.music.play(
|
||||
path=self.path,
|
||||
start_time=now,
|
||||
playlist_id=self.playlist_id,
|
||||
position=position,
|
||||
)
|
||||
|
||||
self.end_time = now + dt.timedelta(milliseconds=self.duration)
|
||||
|
||||
|
||||
@ -1142,4 +1142,4 @@ class PlaylistTab(QTableView):
|
||||
|
||||
self.track_sequence.set_next(None)
|
||||
self.clear_selection()
|
||||
self.signals.next_track_changed_signal.emit()
|
||||
self.signals.signal_set_next_track.emit(None)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user