Playlist: move more functions into the class

This commit is contained in:
Max Kellermann 2014-11-26 08:34:51 +01:00
parent 921d01b59d
commit ac8c1d0a01
2 changed files with 29 additions and 28 deletions

View File

@ -44,21 +44,18 @@ playlist::TagModified(DetachedSong &&song)
idle_add(IDLE_PLAYLIST);
}
/**
* Queue a song, addressed by its order number.
*/
static void
playlist_queue_song_order(playlist &playlist, PlayerControl &pc,
unsigned order)
inline void
playlist::QueueSongOrder(PlayerControl &pc, unsigned order)
{
assert(playlist.queue.IsValidOrder(order));
assert(queue.IsValidOrder(order));
playlist.queued = order;
queued = order;
const DetachedSong &song = playlist.queue.GetOrder(order);
const DetachedSong &song = queue.GetOrder(order);
FormatDebug(playlist_domain, "queue song %i:\"%s\"",
playlist.queued, song.GetURI());
queued, song.GetURI());
pc.EnqueueSong(new DetachedSong(song));
}
@ -137,7 +134,7 @@ playlist::UpdateQueuedSong(PlayerControl &pc, const DetachedSong *prev)
if (next_order >= 0) {
if (next_song != prev)
playlist_queue_song_order(*this, pc, next_order);
QueueSongOrder(pc, next_order);
else
queued = next_order;
}
@ -157,9 +154,6 @@ playlist::PlayOrder(PlayerControl &pc, int order)
current = order;
}
static void
playlist_resume_playback(playlist &playlist, PlayerControl &pc);
void
playlist::SyncWithPlayer(PlayerControl &pc)
{
@ -178,7 +172,7 @@ playlist::SyncWithPlayer(PlayerControl &pc)
should be restarted with the next song. That can
happen if the playlist isn't filling the queue fast
enough */
playlist_resume_playback(*this, pc);
ResumePlayback(pc);
else {
/* check if the player thread has already started
playing the queued song */
@ -196,31 +190,27 @@ playlist::SyncWithPlayer(PlayerControl &pc)
}
}
/**
* The player has stopped for some reason. Check the error, and
* decide whether to re-start playback
*/
static void
playlist_resume_playback(playlist &playlist, PlayerControl &pc)
inline void
playlist::ResumePlayback(PlayerControl &pc)
{
assert(playlist.playing);
assert(playing);
assert(pc.GetState() == PlayerState::STOP);
const auto error = pc.GetErrorType();
if (error == PlayerError::NONE)
playlist.error_count = 0;
error_count = 0;
else
++playlist.error_count;
++error_count;
if ((playlist.stop_on_error && error != PlayerError::NONE) ||
if ((stop_on_error && error != PlayerError::NONE) ||
error == PlayerError::OUTPUT ||
playlist.error_count >= playlist.queue.GetLength())
error_count >= queue.GetLength())
/* too many errors, or critical error: stop
playback */
playlist.Stop(pc);
Stop(pc);
else
/* continue playback at the next song */
playlist.PlayNext(pc);
PlayNext(pc);
}
void

View File

@ -145,12 +145,23 @@ protected:
*/
void UpdateQueuedSong(PlayerControl &pc, const DetachedSong *prev);
/**
* Queue a song, addressed by its order number.
*/
void QueueSongOrder(PlayerControl &pc, unsigned order);
/**
* Called when the player thread has started playing the
* "queued" song.
*/
void QueuedSongStarted(PlayerControl &pc);
/**
* The player has stopped for some reason. Check the error,
* and decide whether to re-start playback.
*/
void ResumePlayback(PlayerControl &pc);
public:
void BeginBulk();
void CommitBulk(PlayerControl &pc);