aboutsummaryrefslogtreecommitdiffstats
path: root/src/player/Control.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/player/Control.cxx')
-rw-r--r--src/player/Control.cxx19
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);