Row timings improved but next row not always correct

This commit is contained in:
Keith Edmunds 2025-04-20 21:37:18 +01:00
parent a2a9afb04f
commit c93d24aef5

View File

@ -101,7 +101,9 @@ class PlaylistModel(QAbstractTableModel):
self.signals.signal_set_next_row.connect(self.set_next_row)
self.signals.signal_track_started.connect(self.track_started)
self.signals.signal_track_ended.connect(self.previous_track_ended)
self.signals.signal_next_track_changed.connect(self.signal_next_track_changed_handler)
self.signals.signal_next_track_changed.connect(
self.signal_next_track_changed_handler
)
# Populate self.playlist_rows
for dto in ds.playlistrows_by_playlist(self.playlist_id):
@ -697,9 +699,7 @@ class PlaylistModel(QAbstractTableModel):
move_existing = True
if move_existing and existing_plr:
self.move_track_add_note(
new_row_number, existing_plr, note=""
)
self.move_track_add_note(new_row_number, existing_plr, note="")
else:
super().beginInsertRows(QModelIndex(), new_row_number, new_row_number)
@ -1500,6 +1500,25 @@ class PlaylistModel(QAbstractTableModel):
return end_time
def update_start_end_times(
self, plr: PlaylistRow, start_time: dt.datetime, end_time: dt.datetime
) -> bool:
"""
Set the the start time of the passed PlaylistRow. If we changed
it, return True else return False.
"""
changed = False
if start_time != plr.forecast_start_time:
plr.forecast_start_time = start_time
changed = True
if end_time != plr.forecast_end_time:
plr.forecast_end_time = end_time
changed = True
return changed
# @log_call
def update_track_times(self) -> None:
"""
@ -1525,15 +1544,14 @@ class PlaylistModel(QAbstractTableModel):
new_start_time = self.track_sequence.current.start_time
if not new_start_time:
raise ApplicationError(
f"Can't get start time for current track ({self.track_sequence.current=})")
f"Can't get start time for current track ({self.track_sequence.current=})"
)
if new_start_time != plr.forecast_start_time:
plr.forecast_start_time = new_start_time
update_rows.append(current_track_row_number)
next_start_time = self.get_end_time(
current_track_row_number, new_start_time
)
next_start_time = self.get_end_time(current_track_row_number, new_start_time)
if next_start_time != plr.forecast_end_time:
plr.forecast_end_time = next_start_time
if self.update_start_end_times(plr, new_start_time, next_start_time):
update_rows.append(current_track_row_number)
# If we have a next track, note row number
@ -1565,24 +1583,27 @@ class PlaylistModel(QAbstractTableModel):
continue
# Set start time for next row if we have a current track
if (current_track_row_number and row_number == next_track_row):
if current_track_row_number and row_number == next_track_row:
plr = self.playlist_rows[row_number]
next_start_time = self.playlist_rows[current_track_row_number].forecast_end_time
if next_start_time != plr.forecast_start_time:
plr.forecast_start_time = next_start_time
update_rows.append(row_number)
# Get next start time, which is end time for this track
if next_start_time:
next_start_time = self.get_end_time(current_track_row_number, next_start_time)
if next_start_time != plr.forecast_end_time:
plr.forecast_end_time = next_start_time
update_rows.append(current_track_row_number)
continue
this_start_time = self.playlist_rows[
current_track_row_number
].forecast_end_time
if this_start_time:
next_start_time = self.get_end_time(
current_track_row_number, this_start_time
)
if self.update_start_end_times(
plr, this_start_time, next_start_time
):
update_rows.append(row_number)
# If we're between the current and next row, zero out
# times
if (current_track_row_number or row_count) < row_number < (next_track_row or 0):
if (
(current_track_row_number or row_count)
< row_number
< (next_track_row or 0)
):
plr.forecast_start_time = plr.forecast_end_time = None
update_rows.append(row_number)
continue
@ -1591,14 +1612,9 @@ class PlaylistModel(QAbstractTableModel):
if not next_start_time:
continue
plr = self.playlist_rows[row_number]
if next_start_time != plr.forecast_start_time:
plr.forecast_start_time = next_start_time
update_rows.append(row_number)
# Get next start time, which is end time for this track
start_time = next_start_time
next_start_time = self.get_end_time(row_number, next_start_time)
if next_start_time != plr.forecast_end_time:
plr.forecast_end_time = next_start_time
if self.update_start_end_times(plr, start_time, next_start_time):
update_rows.append(row_number)
continue