From 8fa98a2207083081bb1b98cf138fed14b3e3a7cf Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Tue, 15 Apr 2025 21:22:07 +0100 Subject: [PATCH] Have model check for adding existing track --- app/dialogs.py | 4 ++-- app/musicmuster.py | 41 +++++++++++------------------------------ app/playlistmodel.py | 31 ++++++++++++++++++++++++------- 3 files changed, 37 insertions(+), 39 deletions(-) diff --git a/app/dialogs.py b/app/dialogs.py index 030c5af..53d04bd 100644 --- a/app/dialogs.py +++ b/app/dialogs.py @@ -140,9 +140,9 @@ class TrackInsertDialog(QDialog): insert_track_data = InsertTrack(self.playlist_id, track_id, note_text) - self.title_edit.clear() + self.title_edit.selectAll() + self.title_edit.setFocus() self.note_edit.clear() - self.track_list.clear() self.title_edit.setFocus() if self.add_to_header: diff --git a/app/musicmuster.py b/app/musicmuster.py index a3e578b..4d13c2d 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -766,8 +766,9 @@ class PreviewManager: class QueryDialog(QDialog): """Dialog box to handle selecting track from a query""" - def __init__(self, default: int = 0) -> None: + def __init__(self, playlist_id: int, default: int = 0) -> None: super().__init__() + self.playlist_id = playlist_id self.default = default # Build a list of (query-name, playlist-id) tuples @@ -858,6 +859,13 @@ class QueryDialog(QDialog): def add_tracks_clicked(self): self.selected_tracks = self.table_view.model().get_selected_track_ids() + + # new_row_number = self.current_row_or_end() + # base_model = self.current.base_model + for track_id in self.query_dialog.selected_tracks: + insert_track_data = InsertTrack(self.playlist_id, track_id, note="") + self.signals.signal_insert_track.emit(InsertTrack(insert_track_data)) + self.accept() def cancel_clicked(self): @@ -1553,35 +1561,8 @@ class Window(QMainWindow): """ # Keep a reference else it will be gc'd - self.query_dialog = QueryDialog(query_id) - if self.query_dialog.exec(): - new_row_number = self.current_row_or_end() - base_model = self.current.base_model - for track_id in self.query_dialog.selected_tracks: - # Check whether track is already in playlist - move_existing = False - existing_prd = base_model.is_track_in_playlist(track_id) - if existing_prd is not None: - if ask_yes_no( - "Duplicate row", - "Track already in playlist. " "Move to new location?", - default_yes=True, - ): - move_existing = True - - if move_existing and existing_prd: - base_model.move_track_add_note( - new_row_number, existing_prd, note="" - ) - else: - self.signals.signal_insert_track.emit( - InsertTrack( - playlist_id=base_model.playlist_id, - track_id=track_id, - note="", - ) - ) - new_row_number += 1 + self.query_dialog = QueryDialog(self.current.playlist_id, query_id) + self.query_dialog.exec() # # # # # # # # # # Miscellaneous functions # # # # # # # # # # diff --git a/app/playlistmodel.py b/app/playlistmodel.py index 8116f19..636fbd1 100644 --- a/app/playlistmodel.py +++ b/app/playlistmodel.py @@ -692,14 +692,31 @@ class PlaylistModel(QAbstractTableModel): new_row_number = self._get_new_row_number() - super().beginInsertRows(QModelIndex(), new_row_number, new_row_number) + # Check whether track is already in playlist + move_existing = False + if row_data.track_id: + existing_plr = self.is_track_in_playlist(row_data.track_id) + if existing_plr is not None: + if ask_yes_no( + "Duplicate row", + "Track already in playlist. " "Move to new location?", + default_yes=True, + ): + move_existing = True - _ = ds.playlist_insert_row( - playlist_id=self.playlist_id, - row_number=new_row_number, - track_id=row_data.track_id, - note=row_data.note, - ) + if move_existing and existing_plr: + self.move_track_add_note( + new_row_number, existing_plr, note="" + ) + else: + super().beginInsertRows(QModelIndex(), new_row_number, new_row_number) + + _ = ds.playlist_insert_row( + playlist_id=self.playlist_id, + row_number=new_row_number, + track_id=row_data.track_id, + note=row_data.note, + ) # Need to refresh self.playlist_rows because row numbers will have # changed self.refresh_data()