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)
|
end_reset_model_signal = pyqtSignal(int)
|
||||||
next_track_changed_signal = pyqtSignal()
|
next_track_changed_signal = pyqtSignal()
|
||||||
resize_rows_signal = pyqtSignal(int)
|
resize_rows_signal = pyqtSignal(int)
|
||||||
row_order_changed_signal = pyqtSignal(int)
|
|
||||||
search_songfacts_signal = pyqtSignal(str)
|
search_songfacts_signal = pyqtSignal(str)
|
||||||
search_wikipedia_signal = pyqtSignal(str)
|
search_wikipedia_signal = pyqtSignal(str)
|
||||||
show_warning_signal = pyqtSignal(str, 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.begin_reset_model_signal.connect(self.begin_reset_model)
|
||||||
self.signals.end_reset_model_signal.connect(self.end_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:
|
with db.Session() as session:
|
||||||
# Ensure row numbers in playlist are contiguous
|
# Ensure row numbers in playlist are contiguous
|
||||||
@ -976,7 +975,6 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
|
|
||||||
# Reset of model must come after session has been closed
|
# Reset of model must come after session has been closed
|
||||||
self.reset_track_sequence_row_numbers()
|
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.signals.end_reset_model_signal.emit(to_playlist_id)
|
||||||
self.update_track_times()
|
self.update_track_times()
|
||||||
|
|
||||||
@ -1130,7 +1128,12 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
|
|
||||||
def reset_track_sequence_row_numbers(self) -> None:
|
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()")
|
log.debug("reset_track_sequence_row_numbers()")
|
||||||
@ -1138,20 +1141,15 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
# Check the track_sequence next, current and previous plrs and
|
# Check the track_sequence next, current and previous plrs and
|
||||||
# update the row number
|
# update the row number
|
||||||
with db.Session() as session:
|
with db.Session() as session:
|
||||||
if track_sequence.next and track_sequence.next.row_number:
|
for ts in [track_sequence.next, track_sequence.current, track_sequence.previous]:
|
||||||
next_plr = session.get(PlaylistRows, track_sequence.next.row_number)
|
if ts and ts.row_number:
|
||||||
if next_plr:
|
plr = session.get(PlaylistRows, ts.plr_id)
|
||||||
track_sequence.next.row_number = next_plr.plr_rownum
|
if plr and plr.plr_rownum != ts.row_number:
|
||||||
if track_sequence.current and track_sequence.current.row_number:
|
log.error(
|
||||||
now_plr = session.get(PlaylistRows, track_sequence.current.row_number)
|
"reset_track_sequence_row_numbers: "
|
||||||
if now_plr:
|
f"from {ts=} to {plr.plr_rownum=}"
|
||||||
track_sequence.current.row_number = now_plr.plr_rownum
|
)
|
||||||
if track_sequence.previous and track_sequence.previous.row_number:
|
ts.row_number = plr.plr_rownum
|
||||||
previous_plr = session.get(
|
|
||||||
PlaylistRows, track_sequence.previous.row_number
|
|
||||||
)
|
|
||||||
if previous_plr:
|
|
||||||
track_sequence.previous.row_number = previous_plr.plr_rownum
|
|
||||||
|
|
||||||
self.update_track_times()
|
self.update_track_times()
|
||||||
|
|
||||||
@ -1191,19 +1189,6 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
|
|
||||||
return len(self.playlist_rows)
|
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:
|
def selection_is_sortable(self, row_numbers: List[int]) -> bool:
|
||||||
"""
|
"""
|
||||||
Return True if the selection is sortable. That means:
|
Return True if the selection is sortable. That means:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user