Manage deleting rows better
Fix incorrect updating of track_sequence row numbers.
This commit is contained in:
parent
a4174e84ce
commit
6e4c386fe2
@ -42,7 +42,6 @@ class MusicMusterSignals(QObject):
|
||||
end_reset_model_signal = pyqtSignal(int)
|
||||
next_track_changed_signal = pyqtSignal()
|
||||
resize_rows_signal = pyqtSignal(int)
|
||||
row_order_changed_signal = pyqtSignal(int)
|
||||
search_songfacts_signal = pyqtSignal(str)
|
||||
search_wikipedia_signal = pyqtSignal(str)
|
||||
show_warning_signal = pyqtSignal(str, str)
|
||||
|
||||
@ -127,7 +127,6 @@ class PlaylistModel(QAbstractTableModel):
|
||||
|
||||
self.signals.begin_reset_model_signal.connect(self.begin_reset_model)
|
||||
self.signals.end_reset_model_signal.connect(self.end_reset_model)
|
||||
self.signals.row_order_changed_signal.connect(self.row_order_changed)
|
||||
|
||||
with db.Session() as session:
|
||||
# Ensure row numbers in playlist are contiguous
|
||||
@ -976,7 +975,6 @@ class PlaylistModel(QAbstractTableModel):
|
||||
|
||||
# Reset of model must come after session has been closed
|
||||
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()
|
||||
|
||||
@ -1130,7 +1128,12 @@ class PlaylistModel(QAbstractTableModel):
|
||||
|
||||
def reset_track_sequence_row_numbers(self) -> None:
|
||||
"""
|
||||
Signal handler for when row ordering has changed
|
||||
Signal handler for when row ordering has changed.
|
||||
|
||||
Example: row 4 is marked as next. Row 2 is deleted. The PlaylistRows table will
|
||||
be correctly updated with change of row number, but track_sequence.next will still
|
||||
contain row_number==4. This function fixes up the track_sequence row numbers by
|
||||
looking up the plr_id and retrieving the row number from the database.
|
||||
"""
|
||||
|
||||
log.debug("reset_track_sequence_row_numbers()")
|
||||
@ -1138,20 +1141,15 @@ class PlaylistModel(QAbstractTableModel):
|
||||
# Check the track_sequence next, current and previous plrs and
|
||||
# update the row number
|
||||
with db.Session() as session:
|
||||
if track_sequence.next and track_sequence.next.row_number:
|
||||
next_plr = session.get(PlaylistRows, track_sequence.next.row_number)
|
||||
if next_plr:
|
||||
track_sequence.next.row_number = next_plr.plr_rownum
|
||||
if track_sequence.current and track_sequence.current.row_number:
|
||||
now_plr = session.get(PlaylistRows, track_sequence.current.row_number)
|
||||
if now_plr:
|
||||
track_sequence.current.row_number = now_plr.plr_rownum
|
||||
if track_sequence.previous and track_sequence.previous.row_number:
|
||||
previous_plr = session.get(
|
||||
PlaylistRows, track_sequence.previous.row_number
|
||||
)
|
||||
if previous_plr:
|
||||
track_sequence.previous.row_number = previous_plr.plr_rownum
|
||||
for ts in [track_sequence.next, track_sequence.current, track_sequence.previous]:
|
||||
if ts and ts.row_number:
|
||||
plr = session.get(PlaylistRows, ts.plr_id)
|
||||
if plr and plr.plr_rownum != ts.row_number:
|
||||
log.error(
|
||||
"reset_track_sequence_row_numbers: "
|
||||
f"from {ts=} to {plr.plr_rownum=}"
|
||||
)
|
||||
ts.row_number = plr.plr_rownum
|
||||
|
||||
self.update_track_times()
|
||||
|
||||
@ -1191,19 +1189,6 @@ class PlaylistModel(QAbstractTableModel):
|
||||
|
||||
return len(self.playlist_rows)
|
||||
|
||||
def row_order_changed(self, playlist_id: int) -> None:
|
||||
"""
|
||||
Signal handler for when row ordering has changed
|
||||
"""
|
||||
|
||||
log.debug(f"row_order_changed({playlist_id=}) {self.playlist_id=}")
|
||||
|
||||
# Only action if this is for us
|
||||
if playlist_id != self.playlist_id:
|
||||
return
|
||||
|
||||
self.reset_track_sequence_row_numbers()
|
||||
|
||||
def selection_is_sortable(self, row_numbers: List[int]) -> bool:
|
||||
"""
|
||||
Return True if the selection is sortable. That means:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user