Document and clean up signals

This commit is contained in:
Keith Edmunds 2025-04-13 18:05:00 +01:00
parent ffb1b238f4
commit f9c33120f5
5 changed files with 51 additions and 9 deletions

View File

@ -218,6 +218,12 @@ class InsertTrack:
note: str
@dataclass
class SelectedRows:
playlist_id: int
rows: list[int]
@dataclass
class TrackAndPlaylist:
playlist_id: int
@ -233,25 +239,58 @@ class MusicMusterSignals(QObject):
- https://stackoverflow.com/questions/62654525/emit-a-signal-from-another-class-to-main-class
"""
# Used to en/disable escape as a shortcut key to "clear selection".
# We disable it when editing a field in the playlist because we use
# 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)
# Signal to open browser at songfacts or wikipedia page matching
# passed string.
search_songfacts_signal = pyqtSignal(str)
search_wikipedia_signal = pyqtSignal(str)
# Displays a warning dialog
show_warning_signal = pyqtSignal(str, str)
signal_add_track_to_header = pyqtSignal(int)
# Signal to add a track to a header row
signal_add_track_to_header = pyqtSignal(TrackAndPlaylist)
# Signal to receving model that rows will be / have been inserter
signal_begin_insert_rows = pyqtSignal(InsertRows)
signal_end_insert_rows = pyqtSignal(int)
# TBD
signal_insert_track = pyqtSignal(InsertTrack)
signal_playlist_selected_rows = pyqtSignal(int, list)
# Keep track of which rows are selected (between playlist and model)
signal_playlist_selected_rows = pyqtSignal(SelectedRows)
# Signal to model that selected row is to be next row
signal_set_next_row = pyqtSignal(int)
# 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
signal_set_next_track = pyqtSignal(object)
# Emited when a track starts playing
signal_track_started = pyqtSignal(TrackAndPlaylist)
# Used by model to signal spanning of cells to playlist for headers
span_cells_signal = pyqtSignal(int, int, int, int, int)
# Dispay status message to user
status_message_signal = pyqtSignal(str, int)
track_ended_signal = pyqtSignal()
def __post_init__(self):

View File

@ -1789,6 +1789,7 @@ class Window(QMainWindow):
self.track_sequence.move_current_to_previous()
# Tell playlist previous track has finished
# TODO: it should just catch track_ended_signal
self.current.base_model.previous_track_ended()
# Reset clocks

View File

@ -36,6 +36,7 @@ from classes import (
InsertRows,
InsertTrack,
MusicMusterSignals,
SelectedRows,
TrackAndPlaylist,
)
from config import Config
@ -1230,16 +1231,16 @@ class PlaylistModel(QAbstractTableModel):
return True
# @log_call
def set_selected_rows(self, playlist_id: int, selected_row_numbers: list[int]) -> None:
def set_selected_rows(self, selected_rows: SelectedRows) -> None:
"""
Handle signal_playlist_selected_rows to keep track of which rows
are selected in the view
"""
if playlist_id != self.playlist_id:
if selected_rows.playlist_id != self.playlist_id:
return
self.selected_rows = [self.playlist_rows[a] for a in selected_row_numbers]
self.selected_rows = [self.playlist_rows[a] for a in selected_rows.rows]
# @log_call
def set_next_row(self, playlist_id: int) -> None:
@ -1247,9 +1248,7 @@ class PlaylistModel(QAbstractTableModel):
Handle signal_set_next_row
"""
log.debug(f"{self}: set_next_row({playlist_id=})")
if playlist_id != self.playlist_id:
# Not for us
return
if len(self.selected_rows) == 0:

View File

@ -40,6 +40,7 @@ from classes import (
Col,
MusicMusterSignals,
PlaylistStyle,
SelectedRows,
TrackAndPlaylist,
TrackInfo
)
@ -471,7 +472,9 @@ class PlaylistTab(QTableView):
selected_row_numbers = self.get_selected_rows()
# Signal selected rows to model
self.signals.signal_playlist_selected_rows.emit(self.playlist_id, selected_row_numbers)
self.signals.signal_playlist_selected_rows.emit(
SelectedRows(self.playlist_id, selected_row_numbers)
)
# Put sum of selected tracks' duration in status bar
# If no rows are selected, we have nothing to do

View File

@ -91,6 +91,6 @@ def update_bitrates() -> None:
for track in ds.tracks_all():
try:
t = get_tags(track.path)
ds.track_update(t)
ds.track_update(track.track_id, t._asdict())
except FileNotFoundError:
continue