Have model check for adding existing track
This commit is contained in:
parent
e7af25ad6e
commit
8fa98a2207
@ -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:
|
||||
|
||||
@ -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 # # # # # # # # # #
|
||||
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user