From 498923c3b35fe7fb80593d82663a23622b8aec4d Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Mon, 14 Apr 2025 09:45:06 +0100 Subject: [PATCH] Connect up signal_insert_track --- app/musicmuster.py | 18 ++++++++++-- app/playlistmodel.py | 68 ++++++++++++++++++++++++++++---------------- 2 files changed, 59 insertions(+), 27 deletions(-) diff --git a/app/musicmuster.py b/app/musicmuster.py index 3e0ecb6..68d2da8 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -65,6 +65,7 @@ import stackprinter # type: ignore from classes import ( ApplicationError, Filter, + InsertTrack, MusicMusterSignals, PlaylistDTO, QueryDTO, @@ -1402,8 +1403,13 @@ class Window(QMainWindow): new_row_number, existing_prd, note="" ) else: - base_model.insert_row(track_id) - + self.signals.signal_insert_track.emit( + InsertTrack( + playlist_id=base_model.playlist_id, + track_id=track_id, + note="", + ) + ) new_row_number += 1 # # # # # # # # # # Playlist management functions # # # # # # # # # # @@ -1903,7 +1909,13 @@ class Window(QMainWindow): dlg.resize(500, 100) ok = dlg.exec() if ok: - self.current.base_model.insert_row(note=dlg.textValue()) + self.signals.signal_insert_track.emit( + InsertTrack( + playlist_id=self.current.base_model.playlist_id, + track_id=None, + note=dlg.textValue() + ) + ) def insert_track(self, checked: bool = False) -> None: """Show dialog box to select and add track from database""" diff --git a/app/playlistmodel.py b/app/playlistmodel.py index 4653bc4..7187773 100644 --- a/app/playlistmodel.py +++ b/app/playlistmodel.py @@ -96,6 +96,7 @@ class PlaylistModel(QAbstractTableModel): self.signals.signal_add_track_to_header.connect(self.add_track_to_header) self.signals.signal_begin_insert_rows.connect(self.begin_insert_rows) self.signals.signal_end_insert_rows.connect(self.end_insert_rows) + self.signals.signal_insert_track.connect(self.insert_row) 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) @@ -295,7 +296,9 @@ class PlaylistModel(QAbstractTableModel): # Update previous row in case we're hiding played rows if self.track_sequence.previous and self.track_sequence.previous.row_number: # only invalidate required roles - self.invalidate_row(self.track_sequence.previous.row_number, roles_to_invalidate) + self.invalidate_row( + self.track_sequence.previous.row_number, roles_to_invalidate + ) # Update all other track times self.update_track_times() @@ -678,7 +681,7 @@ class PlaylistModel(QAbstractTableModel): self.invalidate_row(row_number, roles) # @log_call - def insert_row(self, track_id: Optional[int] = None, note: str = "",) -> None: + def insert_row(self, row_data: InsertTrack) -> None: """ Insert a row. """ @@ -690,8 +693,8 @@ class PlaylistModel(QAbstractTableModel): _ = ds.playlist_insert_row( playlist_id=self.playlist_id, row_number=new_row_number, - track_id=track_id, - note=note, + track_id=row_data.track_id, + note=row_data.note, ) # Need to refresh self.playlist_rows because row numbers will have # changed @@ -797,14 +800,16 @@ class PlaylistModel(QAbstractTableModel): if self.track_sequence.current: current_row = self.track_sequence.current.row_number if current_row in from_rows: - log.debug( - "move_rows: Removing {current_row=} from {from_rows=}" - ) + log.debug("move_rows: Removing {current_row=} from {from_rows=}") from_rows.remove(self.track_sequence.current.row_number) from_rows = sorted(set(from_rows)) - if (min(from_rows) < 0 or max(from_rows) >= self.rowCount() - or to_row_number < 0 or to_row_number > self.rowCount()): + if ( + min(from_rows) < 0 + or max(from_rows) >= self.rowCount() + or to_row_number < 0 + or to_row_number > self.rowCount() + ): log.debug("move_rows: invalid indexes") return False @@ -862,15 +867,16 @@ class PlaylistModel(QAbstractTableModel): # Prepare source model super().beginRemoveRows(QModelIndex(), min(row_group), max(row_group)) # Prepare destination model - insert_rows = InsertRows(to_playlist_id, - to_row_number, - to_row_number + len(row_group) - ) + insert_rows = InsertRows( + to_playlist_id, to_row_number, to_row_number + len(row_group) + ) self.signals.signal_begin_insert_rows.emit(insert_rows) - ds.playlist_move_rows(from_rows=row_group, - from_playlist_id=self.playlist_id, - to_row=to_row_number, - to_playlist_id=to_playlist_id) + ds.playlist_move_rows( + from_rows=row_group, + from_playlist_id=self.playlist_id, + to_row=to_row_number, + to_playlist_id=to_playlist_id, + ) self.signals.signal_end_insert_rows.emit(to_playlist_id) super().endRemoveRows() @@ -1014,7 +1020,9 @@ class PlaylistModel(QAbstractTableModel): plrid = self.playlist_rows[row_number].playlistrow_id refreshed_row = ds.playlistrow_by_id(plrid) if not refreshed_row: - raise ApplicationError(f"Failed to retrieve row {self.playlist_id=}, {row_number=}") + raise ApplicationError( + f"Failed to retrieve row {self.playlist_id=}, {row_number=}" + ) self.playlist_rows[row_number] = PlaylistRow(refreshed_row) @@ -1451,7 +1459,9 @@ class PlaylistModel(QAbstractTableModel): ] self.invalidate_rows(track_rows, roles) else: - self.insert_row(track_id=track_id) + self.insert_row( + InsertTrack(playlist_id=self.playlist_id, track_id=track_id, note="") + ) # @log_call def update_track_times(self) -> None: @@ -1477,7 +1487,10 @@ class PlaylistModel(QAbstractTableModel): update_rows, self.track_sequence.current.start_time ) - if self.track_sequence.next and self.track_sequence.next.playlist_id == self.playlist_id: + if ( + self.track_sequence.next + and self.track_sequence.next.playlist_id == self.playlist_id + ): next_track_row = self.track_sequence.next.row_number for row_number in range(row_count): @@ -1582,14 +1595,21 @@ class PlaylistProxyModel(QSortFilterProxyModel): ): # This row isn't our previous track: hide it return False - if self.track_sequence.current and self.track_sequence.current.start_time: + if ( + self.track_sequence.current + and self.track_sequence.current.start_time + ): # This row is our previous track. Don't hide it # until HIDE_AFTER_PLAYING_OFFSET milliseconds # after current track has started - if self.track_sequence.current.start_time and dt.datetime.now() > ( + if ( self.track_sequence.current.start_time - + dt.timedelta( - milliseconds=Config.HIDE_AFTER_PLAYING_OFFSET + and dt.datetime.now() + > ( + self.track_sequence.current.start_time + + dt.timedelta( + milliseconds=Config.HIDE_AFTER_PLAYING_OFFSET + ) ) ): return False