WIP V3: track stop implemented
This commit is contained in:
parent
ad3ec45a76
commit
813588e8e9
@ -684,51 +684,6 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
self.actionPlay_next.setEnabled(True)
|
self.actionPlay_next.setEnabled(True)
|
||||||
self.statusbar.showMessage("Play controls: Enabled", 0)
|
self.statusbar.showMessage("Play controls: Enabled", 0)
|
||||||
|
|
||||||
def end_of_track_actions(self) -> None:
|
|
||||||
"""
|
|
||||||
Clean up after track played
|
|
||||||
|
|
||||||
Actions required:
|
|
||||||
- Set flag to say we're not playing a track
|
|
||||||
- Tell playlist_tab track has finished
|
|
||||||
- Reset PlaylistTrack objects
|
|
||||||
- Reset clocks
|
|
||||||
- Reset fade graph
|
|
||||||
- Update headers
|
|
||||||
- Enable controls
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Set flag to say we're not playing a track so that timer ticks
|
|
||||||
# don't see player=None and kick off end-of-track actions
|
|
||||||
self.playing = False
|
|
||||||
|
|
||||||
# Tell playlist_tab track has finished
|
|
||||||
# TODO Reimplement as a signal
|
|
||||||
# if self.current_track.playlist_tab:
|
|
||||||
# self.current_track.playlist_tab.play_ended()
|
|
||||||
|
|
||||||
# Reset fade graph
|
|
||||||
if track_sequence.now.fade_graph:
|
|
||||||
track_sequence.now.fade_graph.clear()
|
|
||||||
|
|
||||||
# Reset PlaylistTrack objects
|
|
||||||
if track_sequence.now.track_id:
|
|
||||||
track_sequence.previous = track_sequence.now
|
|
||||||
track_sequence.now = PlaylistTrack()
|
|
||||||
|
|
||||||
# Reset clocks
|
|
||||||
self.frame_fade.setStyleSheet("")
|
|
||||||
self.frame_silent.setStyleSheet("")
|
|
||||||
self.label_elapsed_timer.setText("00:00 / 00:00")
|
|
||||||
self.label_fade_timer.setText("00:00")
|
|
||||||
self.label_silent_timer.setText("00:00")
|
|
||||||
|
|
||||||
# Update headers
|
|
||||||
self.update_headers()
|
|
||||||
|
|
||||||
# Enable controls
|
|
||||||
self.enable_play_next_controls()
|
|
||||||
|
|
||||||
def export_playlist_tab(self) -> None:
|
def export_playlist_tab(self) -> None:
|
||||||
"""Export the current playlist to an m3u file"""
|
"""Export the current playlist to an m3u file"""
|
||||||
|
|
||||||
@ -1474,19 +1429,29 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
self.stop_playing(fade=False)
|
self.stop_playing(fade=False)
|
||||||
|
|
||||||
def stop_playing(self, fade=True) -> None:
|
def stop_playing(self, fade: bool = True) -> None:
|
||||||
"""
|
"""
|
||||||
Stop playing current track
|
Stop playing current track
|
||||||
|
|
||||||
Actions required:
|
Actions required:
|
||||||
|
- Set flag to say we're not playing a track
|
||||||
- Return if not playing
|
- Return if not playing
|
||||||
- Stop/fade track
|
- Stop/fade track
|
||||||
- Reset playlist_tab colour
|
- Reset playlist_tab colour
|
||||||
- Run end-of-track actions
|
- Tell playlist_tab track has finished
|
||||||
|
- Reset PlaylistTrack objects
|
||||||
|
- Reset clocks
|
||||||
|
- Reset fade graph
|
||||||
|
- Update headers
|
||||||
|
- Enable controls
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Return if not playing
|
# Set flag to say we're not playing a track so that timer ticks
|
||||||
if not self.playing:
|
# don't see player=None and kick off end-of-track actions
|
||||||
|
if self.playing:
|
||||||
|
self.playing = False
|
||||||
|
else:
|
||||||
|
# Return if not playing
|
||||||
return
|
return
|
||||||
|
|
||||||
# Stop/fade track
|
# Stop/fade track
|
||||||
@ -1496,20 +1461,30 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
else:
|
else:
|
||||||
self.music.stop()
|
self.music.stop()
|
||||||
|
|
||||||
# Reset playlist_tab colour
|
# Reset fade graph
|
||||||
# TODO Reimplement
|
if track_sequence.now.fade_graph:
|
||||||
# if self.current_track.playlist_tab:
|
track_sequence.now.fade_graph.clear()
|
||||||
# if self.current_track.playlist_tab == self.next_track.playlist_tab:
|
|
||||||
# self.set_tab_colour(
|
|
||||||
# self.current_track.playlist_tab, QColor(Config.COLOUR_NEXT_TAB)
|
|
||||||
# )
|
|
||||||
# else:
|
|
||||||
# self.set_tab_colour(
|
|
||||||
# self.current_track.playlist_tab, QColor(Config.COLOUR_NORMAL_TAB)
|
|
||||||
# )
|
|
||||||
|
|
||||||
# Run end-of-track actions
|
# Reset track_sequence objects
|
||||||
self.end_of_track_actions()
|
if track_sequence.now.track_id:
|
||||||
|
track_sequence.previous = track_sequence.now
|
||||||
|
track_sequence.now = PlaylistTrack()
|
||||||
|
|
||||||
|
# Tell model previous track has finished
|
||||||
|
self.active_model().previous_track_ended()
|
||||||
|
|
||||||
|
# Reset clocks
|
||||||
|
self.frame_fade.setStyleSheet("")
|
||||||
|
self.frame_silent.setStyleSheet("")
|
||||||
|
self.label_elapsed_timer.setText("00:00 / 00:00")
|
||||||
|
self.label_fade_timer.setText("00:00")
|
||||||
|
self.label_silent_timer.setText("00:00")
|
||||||
|
|
||||||
|
# Update headers
|
||||||
|
self.update_headers()
|
||||||
|
|
||||||
|
# Enable controls
|
||||||
|
self.enable_play_next_controls()
|
||||||
|
|
||||||
def tab_change(self):
|
def tab_change(self):
|
||||||
"""Called when active tab changed"""
|
"""Called when active tab changed"""
|
||||||
|
|||||||
@ -257,6 +257,7 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
plr = session.get(PlaylistRows, track_sequence.now.plr_id)
|
plr = session.get(PlaylistRows, track_sequence.now.plr_id)
|
||||||
if plr:
|
if plr:
|
||||||
plr.played = True
|
plr.played = True
|
||||||
|
self.refresh_row(session, plr.plr_rownum)
|
||||||
|
|
||||||
# Find next track
|
# Find next track
|
||||||
# Get all unplayed track rows
|
# Get all unplayed track rows
|
||||||
@ -581,6 +582,35 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
# Update display
|
# Update display
|
||||||
self.invalidate_rows(list(row_map.keys()))
|
self.invalidate_rows(list(row_map.keys()))
|
||||||
|
|
||||||
|
def previous_track_ended(self) -> None:
|
||||||
|
"""
|
||||||
|
Notification from musicmuster that the previous track has ended.
|
||||||
|
|
||||||
|
Actions required:
|
||||||
|
- sanity check
|
||||||
|
- update display
|
||||||
|
- update track times
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Sanity check
|
||||||
|
if not track_sequence.previous.track_id:
|
||||||
|
log.error(
|
||||||
|
"playlistmodel:previous_track_ended called with no current track"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
if track_sequence.previous.plr_rownum is None:
|
||||||
|
log.error(
|
||||||
|
"playlistmodel:previous_track_ended called with no row number "
|
||||||
|
f"({track_sequence.previous=})"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
# Update display
|
||||||
|
self.invalidate_row(track_sequence.previous.plr_rownum)
|
||||||
|
|
||||||
|
# Update track times
|
||||||
|
# TODO
|
||||||
|
|
||||||
def refresh_data(self, session: scoped_session):
|
def refresh_data(self, session: scoped_session):
|
||||||
"""Populate dicts for data calls"""
|
"""Populate dicts for data calls"""
|
||||||
|
|
||||||
@ -593,7 +623,7 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
"""Populate dict for one row for data calls"""
|
"""Populate dict for one row for data calls"""
|
||||||
|
|
||||||
p = PlaylistRows.deep_row(session, self.playlist_id, row_number)
|
p = PlaylistRows.deep_row(session, self.playlist_id, row_number)
|
||||||
self.playlist_rows[p.plr_rownum] = PlaylistRowData(p)
|
self.playlist_rows[row_number] = PlaylistRowData(p)
|
||||||
|
|
||||||
def rowCount(self, index: QModelIndex = QModelIndex()) -> int:
|
def rowCount(self, index: QModelIndex = QModelIndex()) -> int:
|
||||||
"""Standard function for view"""
|
"""Standard function for view"""
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user