diff --git a/app/playlistmodel.py b/app/playlistmodel.py index e3b9d38..60416a1 100644 --- a/app/playlistmodel.py +++ b/app/playlistmodel.py @@ -36,6 +36,7 @@ from classes import ( InsertRows, InsertTrack, MusicMusterSignals, + PlayTrack, ) from config import Config from helpers import ( @@ -98,6 +99,7 @@ class PlaylistModel(QAbstractTableModel): self.signals.signal_end_insert_rows.connect(self.end_insert_rows) self.signals.signal_playlist_selected_rows.connect(self.set_selected_rows) self.signals.signal_set_next_row.connect(self.set_next_row) + self.signals.signal_track_started.connect(self.track_started) # Populate self.playlist_rows for dto in repository.get_playlist_rows(self.playlist_id): @@ -255,7 +257,7 @@ class PlaylistModel(QAbstractTableModel): return len(Col) @log_call - def current_track_started(self) -> None: + def track_started(self, play_track: PlayTrack) -> None: """ Notification from musicmuster that the current track has just started playing @@ -270,22 +272,30 @@ class PlaylistModel(QAbstractTableModel): - update track times """ - if not self.track_sequence.current: + if play_track.playlist_id != self.playlist_id: + # Not for us return + track_id = play_track.track_id + # Sanity check - 1 + if not track_id: + raise ApplicationError("current_track_started() called with no track_id") + + # Sanity check - 2 + if self.track_sequence.current is None: + raise ApplicationError("track_started callced with no current track") + row_number = self.track_sequence.current.row_number playlist_dto = self.playlist_rows[row_number] + # Sanity check - 3 + if playlist_dto.track_id != track_id: + raise ApplicationError("track_id mismatch between playlist_rows and signal") + # Check for OBS scene change self.obs_scene_change(row_number) - # Sanity check that we have a track_id - track_id = playlist_dto.track_id - if not track_id: - raise ApplicationError( - f"current_track_started() called with no track_id ({playlist_dto=})" - ) - + # Update Playdates in database repository.update_playdates(track_id) # Mark track as played in playlist @@ -1271,6 +1281,7 @@ class PlaylistModel(QAbstractTableModel): self.selected_rows = [self.playlist_rows[a] for a in selected_row_numbers] + @log_call def set_next_row(self, playlist_id: int) -> None: """ Handle signal_set_next_row diff --git a/app/playlists.py b/app/playlists.py index 325fb42..5ae239a 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -40,6 +40,7 @@ from classes import ( Col, MusicMusterSignals, PlaylistStyle, + PlayTrack, TrackInfo ) from config import Config @@ -310,6 +311,7 @@ class PlaylistTab(QTableView): self.signals = MusicMusterSignals() self.signals.resize_rows_signal.connect(self.resize_rows) self.signals.span_cells_signal.connect(self._span_cells) + self.signals.signal_track_started.connect(self.track_started) # Selection model self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) @@ -722,12 +724,17 @@ class PlaylistTab(QTableView): cb.setText(track_path, mode=cb.Mode.Clipboard) @log_call - def current_track_started(self) -> None: + def track_started(self, play_track: PlayTrack) -> None: """ Called when track starts playing """ - self.get_base_model().current_track_started() + if play_track.playlist_id != self.playlist_id: + # Not for us + return + + # TODO - via signal + # self.get_base_model().current_track_started() # Scroll to current section if hide mode is by section if ( self.musicmuster.hide_played_tracks