diff options
author | Max Kellermann <max@musicpd.org> | 2017-12-28 08:30:01 +0100 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2017-12-28 08:30:01 +0100 |
commit | e1349ccadcb11c997f9a45c7986822b78d056446 (patch) | |
tree | 82d4246a1cf3551fff93ae7fb8acdc8d0e1cd689 | |
parent | 8838bdc1e30bc76a446cefda47559c482cd1e2e6 (diff) |
player/Thread: ProcessCommand() returns bool
Allows signalling a failed seek, and replaces several redundant
command checks after the ProcessCommand() call.
-rw-r--r-- | src/player/Thread.cxx | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/player/Thread.cxx b/src/player/Thread.cxx index d93a146a7..5ba6b3308 100644 --- a/src/player/Thread.cxx +++ b/src/player/Thread.cxx @@ -339,8 +339,10 @@ private: /** * Player lock must be held before calling. + * + * @return false to stop playback */ - void ProcessCommand() noexcept; + bool ProcessCommand() noexcept; /** * This is called at the border between two songs: the audio output @@ -673,15 +675,17 @@ Player::SeekDecoder() noexcept return true; } -inline void +inline bool Player::ProcessCommand() noexcept { switch (pc.command) { case PlayerCommand::NONE: + break; + case PlayerCommand::STOP: case PlayerCommand::EXIT: case PlayerCommand::CLOSE_AUDIO: - break; + return false; case PlayerCommand::UPDATE_AUDIO: { @@ -724,17 +728,14 @@ Player::ProcessCommand() noexcept break; case PlayerCommand::SEEK: - SeekDecoder(); - break; + return SeekDecoder(); case PlayerCommand::CANCEL: - if (pc.next_song == nullptr) { + if (pc.next_song == nullptr) /* the cancel request arrived too late, we're already playing the queued song... stop everything now */ - pc.command = PlayerCommand::STOP; - return; - } + return false; if (IsDecoderAtNextSong()) /* the decoder is already decoding the song - @@ -759,6 +760,8 @@ Player::ProcessCommand() noexcept pc.CommandFinished(); break; } + + return true; } static void @@ -986,10 +989,7 @@ Player::Run() noexcept pc.CommandFinished(); while (true) { - ProcessCommand(); - if (pc.command == PlayerCommand::STOP || - pc.command == PlayerCommand::EXIT || - pc.command == PlayerCommand::CLOSE_AUDIO) { + if (!ProcessCommand()) { const ScopeUnlock unlock(pc.mutex); pc.outputs.Cancel(); break; |