Document and clean up signals
This commit is contained in:
parent
ffb1b238f4
commit
f9c33120f5
@ -218,6 +218,12 @@ class InsertTrack:
|
|||||||
note: str
|
note: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class SelectedRows:
|
||||||
|
playlist_id: int
|
||||||
|
rows: list[int]
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class TrackAndPlaylist:
|
class TrackAndPlaylist:
|
||||||
playlist_id: int
|
playlist_id: int
|
||||||
@ -233,25 +239,58 @@ class MusicMusterSignals(QObject):
|
|||||||
- https://stackoverflow.com/questions/62654525/emit-a-signal-from-another-class-to-main-class
|
- 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)
|
enable_escape_signal = pyqtSignal(bool)
|
||||||
|
|
||||||
|
# Signals that the next-cued track has changed. Used to update
|
||||||
|
# playlist headers.
|
||||||
next_track_changed_signal = pyqtSignal()
|
next_track_changed_signal = pyqtSignal()
|
||||||
|
|
||||||
|
# Signals that the playlist_id passed should resize all rows.
|
||||||
resize_rows_signal = pyqtSignal(int)
|
resize_rows_signal = pyqtSignal(int)
|
||||||
|
|
||||||
|
# Signal to open browser at songfacts or wikipedia page matching
|
||||||
|
# passed string.
|
||||||
search_songfacts_signal = pyqtSignal(str)
|
search_songfacts_signal = pyqtSignal(str)
|
||||||
search_wikipedia_signal = pyqtSignal(str)
|
search_wikipedia_signal = pyqtSignal(str)
|
||||||
|
|
||||||
|
# Displays a warning dialog
|
||||||
show_warning_signal = pyqtSignal(str, str)
|
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_begin_insert_rows = pyqtSignal(InsertRows)
|
||||||
signal_end_insert_rows = pyqtSignal(int)
|
signal_end_insert_rows = pyqtSignal(int)
|
||||||
|
|
||||||
|
# TBD
|
||||||
signal_insert_track = pyqtSignal(InsertTrack)
|
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_row = pyqtSignal(int)
|
||||||
|
|
||||||
# signal_set_next_track takes a PlaylistRow as an argument. We can't
|
# signal_set_next_track takes a PlaylistRow as an argument. We can't
|
||||||
# specify that here as it requires us to import PlaylistRow from
|
# specify that here as it requires us to import PlaylistRow from
|
||||||
# playlistrow.py, which itself imports MusicMusterSignals
|
# playlistrow.py, which itself imports MusicMusterSignals
|
||||||
|
|
||||||
|
# TBD
|
||||||
signal_set_next_track = pyqtSignal(object)
|
signal_set_next_track = pyqtSignal(object)
|
||||||
|
|
||||||
|
# Emited when a track starts playing
|
||||||
signal_track_started = pyqtSignal(TrackAndPlaylist)
|
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)
|
span_cells_signal = pyqtSignal(int, int, int, int, int)
|
||||||
|
|
||||||
|
# Dispay status message to user
|
||||||
status_message_signal = pyqtSignal(str, int)
|
status_message_signal = pyqtSignal(str, int)
|
||||||
|
|
||||||
track_ended_signal = pyqtSignal()
|
track_ended_signal = pyqtSignal()
|
||||||
|
|
||||||
def __post_init__(self):
|
def __post_init__(self):
|
||||||
|
|||||||
@ -1789,6 +1789,7 @@ class Window(QMainWindow):
|
|||||||
self.track_sequence.move_current_to_previous()
|
self.track_sequence.move_current_to_previous()
|
||||||
|
|
||||||
# Tell playlist previous track has finished
|
# Tell playlist previous track has finished
|
||||||
|
# TODO: it should just catch track_ended_signal
|
||||||
self.current.base_model.previous_track_ended()
|
self.current.base_model.previous_track_ended()
|
||||||
|
|
||||||
# Reset clocks
|
# Reset clocks
|
||||||
|
|||||||
@ -36,6 +36,7 @@ from classes import (
|
|||||||
InsertRows,
|
InsertRows,
|
||||||
InsertTrack,
|
InsertTrack,
|
||||||
MusicMusterSignals,
|
MusicMusterSignals,
|
||||||
|
SelectedRows,
|
||||||
TrackAndPlaylist,
|
TrackAndPlaylist,
|
||||||
)
|
)
|
||||||
from config import Config
|
from config import Config
|
||||||
@ -1230,16 +1231,16 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
# @log_call
|
# @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
|
Handle signal_playlist_selected_rows to keep track of which rows
|
||||||
are selected in the view
|
are selected in the view
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if playlist_id != self.playlist_id:
|
if selected_rows.playlist_id != self.playlist_id:
|
||||||
return
|
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
|
# @log_call
|
||||||
def set_next_row(self, playlist_id: int) -> None:
|
def set_next_row(self, playlist_id: int) -> None:
|
||||||
@ -1247,9 +1248,7 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
Handle signal_set_next_row
|
Handle signal_set_next_row
|
||||||
"""
|
"""
|
||||||
|
|
||||||
log.debug(f"{self}: set_next_row({playlist_id=})")
|
|
||||||
if playlist_id != self.playlist_id:
|
if playlist_id != self.playlist_id:
|
||||||
# Not for us
|
|
||||||
return
|
return
|
||||||
|
|
||||||
if len(self.selected_rows) == 0:
|
if len(self.selected_rows) == 0:
|
||||||
|
|||||||
@ -40,6 +40,7 @@ from classes import (
|
|||||||
Col,
|
Col,
|
||||||
MusicMusterSignals,
|
MusicMusterSignals,
|
||||||
PlaylistStyle,
|
PlaylistStyle,
|
||||||
|
SelectedRows,
|
||||||
TrackAndPlaylist,
|
TrackAndPlaylist,
|
||||||
TrackInfo
|
TrackInfo
|
||||||
)
|
)
|
||||||
@ -471,7 +472,9 @@ class PlaylistTab(QTableView):
|
|||||||
selected_row_numbers = self.get_selected_rows()
|
selected_row_numbers = self.get_selected_rows()
|
||||||
|
|
||||||
# Signal selected rows to model
|
# 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
|
# Put sum of selected tracks' duration in status bar
|
||||||
# If no rows are selected, we have nothing to do
|
# If no rows are selected, we have nothing to do
|
||||||
|
|||||||
@ -91,6 +91,6 @@ def update_bitrates() -> None:
|
|||||||
for track in ds.tracks_all():
|
for track in ds.tracks_all():
|
||||||
try:
|
try:
|
||||||
t = get_tags(track.path)
|
t = get_tags(track.path)
|
||||||
ds.track_update(t)
|
ds.track_update(track.track_id, t._asdict())
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
continue
|
continue
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user