diff options
-rw-r--r-- | src/queue/Playlist.cxx | 10 | ||||
-rw-r--r-- | src/queue/Playlist.hxx | 14 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/queue/Playlist.cxx b/src/queue/Playlist.cxx index 0dc36f5e7..4419d6e6e 100644 --- a/src/queue/Playlist.cxx +++ b/src/queue/Playlist.cxx @@ -60,6 +60,12 @@ playlist::QueueSongOrder(PlayerControl &pc, unsigned order) pc.EnqueueSong(new DetachedSong(song)); } +void +playlist::SongStarted() +{ + assert(current >= 0); +} + inline void playlist::QueuedSongStarted(PlayerControl &pc) { @@ -78,6 +84,8 @@ playlist::QueuedSongStarted(PlayerControl &pc) DeleteOrder(pc, old_current); idle_add(IDLE_PLAYER); + + SongStarted(); } const DetachedSong * @@ -152,6 +160,8 @@ playlist::PlayOrder(PlayerControl &pc, int order) pc.Play(new DetachedSong(song)); current = order; + + SongStarted(); } void diff --git a/src/queue/Playlist.hxx b/src/queue/Playlist.hxx index fb75377f0..ab8fbe2d4 100644 --- a/src/queue/Playlist.hxx +++ b/src/queue/Playlist.hxx @@ -135,6 +135,17 @@ protected: void OnModified(); /** + * Called when playback of a new song starts. Unlike + * QueuedSongStarted(), this also gets called when the user + * manually switches to another song. It may be used for + * playlist fixups. + * + * The song being started is specified by the #current + * attribute. + */ + void SongStarted(); + + /** * Updates the "queued song". Calculates the next song * according to the current one (if MPD isn't playing, it * takes the first song), and queues this song. Clears the @@ -152,7 +163,8 @@ protected: /** * Called when the player thread has started playing the - * "queued" song. + * "queued" song, i.e. it has switched from one song to the + * next automatically. */ void QueuedSongStarted(PlayerControl &pc); |