parent
fcbdfc65ac
commit
4fce750223
@ -1124,20 +1124,20 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
if not track_sequence.now.path:
|
||||
log.error("No path for next track")
|
||||
return
|
||||
self.music.play(track_sequence.now.path, position)
|
||||
|
||||
# Notify model
|
||||
self.active_proxy_model().current_track_started()
|
||||
|
||||
# Note that track is now playing
|
||||
# Note that track is playing
|
||||
track_sequence.now.start()
|
||||
self.playing = True
|
||||
|
||||
# Disable play next controls
|
||||
self.disable_play_next_controls()
|
||||
|
||||
# Notify model
|
||||
self.active_proxy_model().current_track_started()
|
||||
|
||||
# Update headers
|
||||
self.update_headers()
|
||||
track_sequence.now.start()
|
||||
self.music.play(track_sequence.now.path, position)
|
||||
|
||||
# Ensure 100% volume
|
||||
# For as-yet unknown reasons. sometimes the volume gets
|
||||
|
||||
@ -68,6 +68,8 @@ class PlaylistRowData:
|
||||
self.played = False
|
||||
self.start_gap: Optional[int] = None
|
||||
self.title: str = ""
|
||||
self.start_time: Optional[datetime] = None
|
||||
self.end_time: Optional[datetime] = None
|
||||
|
||||
self.plrid: int = plr.id
|
||||
self.plr_rownum: int = plr.plr_rownum
|
||||
@ -93,12 +95,6 @@ class PlaylistRowData:
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class StartEndTimes:
|
||||
start_time: Optional[datetime] = None
|
||||
end_time: Optional[datetime] = None
|
||||
|
||||
|
||||
class PlaylistModel(QAbstractTableModel):
|
||||
"""
|
||||
The Playlist Model
|
||||
@ -127,7 +123,6 @@ class PlaylistModel(QAbstractTableModel):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.playlist_rows: dict[int, PlaylistRowData] = {}
|
||||
self.start_end_times: dict[int, StartEndTimes] = {}
|
||||
self.signals = MusicMusterSignals()
|
||||
self.played_tracks_hidden = False
|
||||
|
||||
@ -259,6 +254,7 @@ class PlaylistModel(QAbstractTableModel):
|
||||
"""
|
||||
|
||||
row_number = track_sequence.now.plr_rownum
|
||||
prd = self.playlist_rows[row_number]
|
||||
|
||||
# Sanity check
|
||||
if not track_sequence.now.track_id:
|
||||
@ -289,8 +285,8 @@ class PlaylistModel(QAbstractTableModel):
|
||||
log.error(f"Can't retrieve plr, {track_sequence.now.plr_id=}")
|
||||
|
||||
# Update track times
|
||||
self.start_end_times[row_number].start_time = track_sequence.now.start_time
|
||||
self.start_end_times[row_number].end_time = track_sequence.now.end_time
|
||||
prd.start_time = track_sequence.now.start_time
|
||||
prd.end_time = track_sequence.now.end_time
|
||||
|
||||
# Update colour and times for current row
|
||||
self.invalidate_row(row_number)
|
||||
@ -408,17 +404,15 @@ class PlaylistModel(QAbstractTableModel):
|
||||
return QVariant()
|
||||
|
||||
if column == Col.START_TIME.value:
|
||||
if row in self.start_end_times:
|
||||
start_time = self.start_end_times[row].start_time
|
||||
if start_time:
|
||||
return QVariant(start_time.strftime(Config.TRACK_TIME_FORMAT))
|
||||
start_time = prd.start_time
|
||||
if start_time:
|
||||
return QVariant(start_time.strftime(Config.TRACK_TIME_FORMAT))
|
||||
return QVariant()
|
||||
|
||||
if column == Col.END_TIME.value:
|
||||
if row in self.start_end_times:
|
||||
end_time = self.start_end_times[row].end_time
|
||||
if end_time:
|
||||
return QVariant(end_time.strftime(Config.TRACK_TIME_FORMAT))
|
||||
end_time = prd.end_time
|
||||
if end_time:
|
||||
return QVariant(end_time.strftime(Config.TRACK_TIME_FORMAT))
|
||||
return QVariant()
|
||||
|
||||
dispatch_table = {
|
||||
@ -1327,15 +1321,15 @@ class PlaylistModel(QAbstractTableModel):
|
||||
update_rows: List[int] = []
|
||||
|
||||
for row_number in range(len(self.playlist_rows)):
|
||||
stend = self.start_end_times[row_number] = StartEndTimes()
|
||||
prd = self.playlist_rows[row_number]
|
||||
|
||||
# Reset start_time if this is the current row
|
||||
if row_number == track_sequence.now.plr_rownum:
|
||||
stend.start_time = track_sequence.now.start_time
|
||||
stend.end_time = track_sequence.now.end_time
|
||||
prd.start_time = track_sequence.now.start_time
|
||||
prd.end_time = track_sequence.now.end_time
|
||||
update_rows.append(row_number)
|
||||
if not next_start_time:
|
||||
next_start_time = stend.end_time
|
||||
next_start_time = prd.end_time
|
||||
continue
|
||||
|
||||
# Set start time for next row if we have a current track
|
||||
@ -1343,9 +1337,9 @@ class PlaylistModel(QAbstractTableModel):
|
||||
row_number == track_sequence.next.plr_rownum
|
||||
and track_sequence.now.end_time
|
||||
):
|
||||
stend.start_time = track_sequence.now.end_time
|
||||
stend.end_time = stend.start_time + timedelta(milliseconds=prd.duration)
|
||||
next_start_time = stend.end_time
|
||||
prd.start_time = track_sequence.now.end_time
|
||||
prd.end_time = prd.start_time + timedelta(milliseconds=prd.duration)
|
||||
next_start_time = prd.end_time
|
||||
update_rows.append(row_number)
|
||||
continue
|
||||
|
||||
@ -1362,31 +1356,39 @@ class PlaylistModel(QAbstractTableModel):
|
||||
< row_number
|
||||
< track_sequence.next.plr_rownum
|
||||
):
|
||||
prd.start_time = None
|
||||
prd.end_time = None
|
||||
update_rows.append(row_number)
|
||||
continue
|
||||
|
||||
# Reset start time if timing in header or at current track
|
||||
# Reset start time if timing in header
|
||||
if self.is_header_row(row_number):
|
||||
header_time = get_embedded_time(prd.note)
|
||||
if header_time:
|
||||
next_start_time = header_time
|
||||
else:
|
||||
# This is an unplayed track
|
||||
# Don't schedule unplayable tracks
|
||||
if file_is_unreadable(prd.path):
|
||||
continue
|
||||
continue
|
||||
|
||||
# Set start/end if we have a start time
|
||||
if next_start_time is None:
|
||||
continue
|
||||
if stend.start_time != next_start_time:
|
||||
stend.start_time = next_start_time
|
||||
update_rows.append(row_number)
|
||||
next_start_time += timedelta(
|
||||
milliseconds=self.playlist_rows[row_number].duration
|
||||
)
|
||||
if stend.end_time != next_start_time:
|
||||
stend.end_time = next_start_time
|
||||
# This is an unplayed track
|
||||
# Don't schedule unplayable tracks
|
||||
if file_is_unreadable(prd.path):
|
||||
continue
|
||||
|
||||
# Set start/end if we have a start time
|
||||
if next_start_time is None:
|
||||
continue
|
||||
|
||||
# Update start time of this row if it's incorrect
|
||||
if prd.start_time != next_start_time:
|
||||
prd.start_time = next_start_time
|
||||
update_rows.append(row_number)
|
||||
|
||||
# Calculate next start time
|
||||
next_start_time += timedelta(milliseconds=prd.duration)
|
||||
|
||||
# Update end time of this row if it's incorrect
|
||||
if prd.end_time != next_start_time:
|
||||
prd.end_time = next_start_time
|
||||
if row_number not in update_rows:
|
||||
update_rows.append(row_number)
|
||||
|
||||
# Update start/stop times of rows that have changed
|
||||
|
||||
Loading…
Reference in New Issue
Block a user