Fix deleting multiple rows

Also allow mass delete to be cancelled.

Fixes #115
This commit is contained in:
Keith Edmunds 2022-06-04 22:56:38 +01:00
parent a8395d8c97
commit fbe9c2ba94
2 changed files with 13 additions and 5 deletions

View File

@ -341,6 +341,9 @@ class Playlists(Base):
def remove_track(self, session: Session, row: int) -> None:
DEBUG(f"Playlist.remove_track({self.id=}, {row=})")
# Refresh self first (this is necessary when calling remove_track
# multiple times before session.commit())
session.refresh(self)
# Get tracks collection for this playlist
# Tracks are a dictionary of tracks keyed on row
# number. Remove the relevant row.

View File

@ -1033,7 +1033,7 @@ class PlaylistTab(QTableWidget):
DEBUG("playlist._delete_rows()")
rows: List[int] = sorted(
selected_rows: List[int] = sorted(
set(item.row() for item in self.selectedItems())
)
rows_to_delete: List[int] = []
@ -1042,17 +1042,22 @@ class PlaylistTab(QTableWidget):
row_object: Union[Tracks, Notes]
with Session() as session:
for row in rows:
for row in selected_rows:
title = self.item(row, self.COL_TITLE).text()
msg = QMessageBox(self)
msg.setIcon(QMessageBox.Warning)
msg.setText(f"Delete '{title}'?")
msg.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel)
msg.setDefaultButton(QMessageBox.Cancel)
msg.setStandardButtons(
QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel
)
msg.setDefaultButton(QMessageBox.No)
msg.setWindowTitle("Delete row")
# Store list of rows to delete
if msg.exec() == QMessageBox.Yes:
response = msg.exec()
if response == QMessageBox.Yes:
rows_to_delete.append(row)
elif response == QMessageBox.Cancel:
return
# delete in reverse row order so row numbers don't
# change