From f9b8f1d8d3667b7a2e1feca99aa8ea32890268cb Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Tue, 28 Nov 2023 19:59:45 +0000 Subject: [PATCH] V3 tweaks and polishes --- app/musicmuster.py | 6 ++--- app/playlistmodel.py | 54 ++++++++++++++++++++++++++------------------ 2 files changed, 35 insertions(+), 25 deletions(-) diff --git a/app/musicmuster.py b/app/musicmuster.py index 179e4f0..256e6f7 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -65,7 +65,7 @@ from dbconfig import ( from dialogs import TrackSelectDialog from log import log from models import Base, Carts, Playdates, PlaylistRows, Playlists, Settings, Tracks -from playlistmodel import PlaylistModel +from playlistmodel import PlaylistModel, PlaylistProxyModel from playlists import PlaylistTab from ui.dlg_cart_ui import Ui_DialogCartEdit # type: ignore from ui.dlg_SelectPlaylist_ui import Ui_dlgSelectPlaylist # type: ignore @@ -218,7 +218,7 @@ class Window(QMainWindow, Ui_MainWindow): self.active_tab = lambda: self.tabPlaylist.currentWidget() self.active_model = lambda: self.tabPlaylist.currentWidget().model() self.move_source_rows: Optional[List[int]] = None - self.move_source_model: Optional[PlaylistModel] = None + self.move_source_model: Optional[PlaylistProxyModel] = None self.load_last_playlists() if Config.CARTS_HIDE: @@ -1021,7 +1021,7 @@ class Window(QMainWindow, Ui_MainWindow): else: destination_row = self.active_model().rowCount() - if to_playlist_id == self.move_source_model.playlist_id: + if to_playlist_id == self.move_source_model.data_model.playlist_id: self.move_source_model.move_rows(self.move_source_rows, destination_row) else: self.move_source_model.move_rows_between_playlists( diff --git a/app/playlistmodel.py b/app/playlistmodel.py index 640d4bd..cb556f6 100644 --- a/app/playlistmodel.py +++ b/app/playlistmodel.py @@ -356,7 +356,7 @@ class PlaylistModel(QAbstractTableModel): PlaylistRows.fixup_rownumbers(session, self.playlist_id) self.refresh_data(session) - self.row_order_changed(self.playlist_id) + self.reset_track_sequence_row_numbers() def display_role(self, row: int, column: int, prd: PlaylistRowData) -> QVariant: """ @@ -414,7 +414,7 @@ class PlaylistModel(QAbstractTableModel): with Session() as session: self.refresh_data(session) super().endResetModel() - self.row_order_changed(self.playlist_id) + self.reset_track_sequence_row_numbers() def edit_role(self, row: int, column: int, prd: PlaylistRowData) -> QVariant: """ @@ -708,7 +708,7 @@ class PlaylistModel(QAbstractTableModel): self.refresh_data(session) super().endInsertRows() - self.row_order_changed(self.playlist_id) + self.reset_track_sequence_row_numbers() self.invalidate_rows(list(range(new_row_number, len(self.playlist_rows)))) def invalidate_row(self, modified_row: int) -> None: @@ -819,7 +819,7 @@ class PlaylistModel(QAbstractTableModel): self.refresh_data(session) # Update display - self.signals.row_order_changed_signal.emit(self.playlist_id) + self.reset_track_sequence_row_numbers() self.invalidate_rows(list(row_map.keys())) def mark_unplayed(self, row_numbers: List[int]) -> None: @@ -887,7 +887,7 @@ class PlaylistModel(QAbstractTableModel): self.refresh_data(session) # Reset of model must come after session has been closed - self.signals.row_order_changed_signal.emit(self.playlist_id) + self.reset_track_sequence_row_numbers() self.signals.row_order_changed_signal.emit(to_playlist_id) self.signals.end_reset_model_signal.emit(to_playlist_id) self.update_track_times() @@ -1033,6 +1033,31 @@ class PlaylistModel(QAbstractTableModel): self.invalidate_row(row_number) self.signals.resize_rows_signal.emit(self.playlist_id) + def reset_track_sequence_row_numbers(self) -> None: + """ + Signal handler for when row ordering has changed + """ + + # Check the track_sequence next, now and previous plrs and + # update the row number + with Session() as session: + if track_sequence.next.plr_rownum: + next_plr = session.get(PlaylistRows, track_sequence.next.plr_id) + if next_plr: + track_sequence.next.plr_rownum = next_plr.plr_rownum + if track_sequence.now.plr_rownum: + now_plr = session.get(PlaylistRows, track_sequence.now.plr_id) + if now_plr: + track_sequence.now.plr_rownum = now_plr.plr_rownum + if track_sequence.previous.plr_rownum: + previous_plr = session.get( + PlaylistRows, track_sequence.previous.plr_id + ) + if previous_plr: + track_sequence.previous.plr_rownum = previous_plr.plr_rownum + + self.update_track_times() + def _reversed_contiguous_row_groups( self, row_numbers: List[int] ) -> List[List[int]]: @@ -1071,26 +1096,11 @@ class PlaylistModel(QAbstractTableModel): Signal handler for when row ordering has changed """ + # Only action if this is for us if playlist_id != self.playlist_id: return - with Session() as session: - if track_sequence.next.plr_rownum: - next_plr = session.get(PlaylistRows, track_sequence.next.plr_rownum) - if next_plr: - track_sequence.next.plr_rownum = next_plr.plr_rownum - if track_sequence.now.plr_rownum: - now_plr = session.get(PlaylistRows, track_sequence.now.plr_rownum) - if now_plr: - track_sequence.now.plr_rownum = now_plr.plr_rownum - if track_sequence.previous.plr_rownum: - previous_plr = session.get( - PlaylistRows, track_sequence.previous.plr_rownum - ) - if previous_plr: - track_sequence.previous.plr_rownum = previous_plr.plr_rownum - - self.update_track_times() + self.reset_track_sequence_row_numbers() def selection_is_sortable(self, row_numbers: List[int]) -> bool: """