Playlist: move more functions into the class
This commit is contained in:
parent
921d01b59d
commit
ac8c1d0a01
@ -44,21 +44,18 @@ playlist::TagModified(DetachedSong &&song)
|
|||||||
idle_add(IDLE_PLAYLIST);
|
idle_add(IDLE_PLAYLIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
inline void
|
||||||
* Queue a song, addressed by its order number.
|
playlist::QueueSongOrder(PlayerControl &pc, unsigned order)
|
||||||
*/
|
|
||||||
static void
|
|
||||||
playlist_queue_song_order(playlist &playlist, 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\"",
|
FormatDebug(playlist_domain, "queue song %i:\"%s\"",
|
||||||
playlist.queued, song.GetURI());
|
queued, song.GetURI());
|
||||||
|
|
||||||
pc.EnqueueSong(new DetachedSong(song));
|
pc.EnqueueSong(new DetachedSong(song));
|
||||||
}
|
}
|
||||||
@ -137,7 +134,7 @@ playlist::UpdateQueuedSong(PlayerControl &pc, const DetachedSong *prev)
|
|||||||
|
|
||||||
if (next_order >= 0) {
|
if (next_order >= 0) {
|
||||||
if (next_song != prev)
|
if (next_song != prev)
|
||||||
playlist_queue_song_order(*this, pc, next_order);
|
QueueSongOrder(pc, next_order);
|
||||||
else
|
else
|
||||||
queued = next_order;
|
queued = next_order;
|
||||||
}
|
}
|
||||||
@ -157,9 +154,6 @@ playlist::PlayOrder(PlayerControl &pc, int order)
|
|||||||
current = order;
|
current = order;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
playlist_resume_playback(playlist &playlist, PlayerControl &pc);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
playlist::SyncWithPlayer(PlayerControl &pc)
|
playlist::SyncWithPlayer(PlayerControl &pc)
|
||||||
{
|
{
|
||||||
@ -178,7 +172,7 @@ playlist::SyncWithPlayer(PlayerControl &pc)
|
|||||||
should be restarted with the next song. That can
|
should be restarted with the next song. That can
|
||||||
happen if the playlist isn't filling the queue fast
|
happen if the playlist isn't filling the queue fast
|
||||||
enough */
|
enough */
|
||||||
playlist_resume_playback(*this, pc);
|
ResumePlayback(pc);
|
||||||
else {
|
else {
|
||||||
/* check if the player thread has already started
|
/* check if the player thread has already started
|
||||||
playing the queued song */
|
playing the queued song */
|
||||||
@ -196,31 +190,27 @@ playlist::SyncWithPlayer(PlayerControl &pc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
inline void
|
||||||
* The player has stopped for some reason. Check the error, and
|
playlist::ResumePlayback(PlayerControl &pc)
|
||||||
* decide whether to re-start playback
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
playlist_resume_playback(playlist &playlist, PlayerControl &pc)
|
|
||||||
{
|
{
|
||||||
assert(playlist.playing);
|
assert(playing);
|
||||||
assert(pc.GetState() == PlayerState::STOP);
|
assert(pc.GetState() == PlayerState::STOP);
|
||||||
|
|
||||||
const auto error = pc.GetErrorType();
|
const auto error = pc.GetErrorType();
|
||||||
if (error == PlayerError::NONE)
|
if (error == PlayerError::NONE)
|
||||||
playlist.error_count = 0;
|
error_count = 0;
|
||||||
else
|
else
|
||||||
++playlist.error_count;
|
++error_count;
|
||||||
|
|
||||||
if ((playlist.stop_on_error && error != PlayerError::NONE) ||
|
if ((stop_on_error && error != PlayerError::NONE) ||
|
||||||
error == PlayerError::OUTPUT ||
|
error == PlayerError::OUTPUT ||
|
||||||
playlist.error_count >= playlist.queue.GetLength())
|
error_count >= queue.GetLength())
|
||||||
/* too many errors, or critical error: stop
|
/* too many errors, or critical error: stop
|
||||||
playback */
|
playback */
|
||||||
playlist.Stop(pc);
|
Stop(pc);
|
||||||
else
|
else
|
||||||
/* continue playback at the next song */
|
/* continue playback at the next song */
|
||||||
playlist.PlayNext(pc);
|
PlayNext(pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -145,12 +145,23 @@ protected:
|
|||||||
*/
|
*/
|
||||||
void UpdateQueuedSong(PlayerControl &pc, const DetachedSong *prev);
|
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
|
* Called when the player thread has started playing the
|
||||||
* "queued" song.
|
* "queued" song.
|
||||||
*/
|
*/
|
||||||
void QueuedSongStarted(PlayerControl &pc);
|
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:
|
public:
|
||||||
void BeginBulk();
|
void BeginBulk();
|
||||||
void CommitBulk(PlayerControl &pc);
|
void CommitBulk(PlayerControl &pc);
|
||||||
|
Loading…
Reference in New Issue
Block a user