diff options
Diffstat (limited to 'src/player/Control.cxx')
-rw-r--r-- | src/player/Control.cxx | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/player/Control.cxx b/src/player/Control.cxx index 4c30159ba..6c78290cf 100644 --- a/src/player/Control.cxx +++ b/src/player/Control.cxx @@ -204,8 +204,8 @@ PlayerControl::LockEnqueueSong(DetachedSong *song) EnqueueSongLocked(song); } -void -PlayerControl::SeekLocked(DetachedSong *song, SongTime t) +bool +PlayerControl::SeekLocked(DetachedSong *song, SongTime t, Error &error_r) { assert(song != nullptr); @@ -214,21 +214,32 @@ PlayerControl::SeekLocked(DetachedSong *song, SongTime t) assert(next_song == nullptr); + ClearError(); next_song = song; seek_time = t; SynchronousCommand(PlayerCommand::SEEK); assert(next_song == nullptr); + + if (error_type != PlayerError::NONE) { + assert(error.IsDefined()); + error_r.Set(error); + return false; + } + + assert(!error.IsDefined()); + return true; } bool -PlayerControl::LockSeek(DetachedSong *song, SongTime t) +PlayerControl::LockSeek(DetachedSong *song, SongTime t, Error &error_r) { assert(song != nullptr); { const ScopeLock protect(mutex); - SeekLocked(song, t); + if (!SeekLocked(song, t, error_r)) + return false; } idle_add(IDLE_PLAYER); |