Have model check for adding existing track

This commit is contained in:
Keith Edmunds 2025-04-15 21:22:07 +01:00
parent e7af25ad6e
commit 8fa98a2207
3 changed files with 37 additions and 39 deletions

View File

@ -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:

View File

@ -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 # # # # # # # # # #

View File

@ -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()