diff --git a/src/base/commands.c b/src/base/commands.c index de4469e22bb99410fe3a98ff1c56fef1fbdb8067..98c2ca2374204fe5512fee4603d0ccc1b17a6fd8 100644 --- a/src/base/commands.c +++ b/src/base/commands.c @@ -245,6 +245,7 @@ command_play(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSA { char *endptr, err; long pos = 1; + struct lkt_queue_state queue_state; /* Argument handle. */ if (args[0]) { @@ -252,6 +253,13 @@ command_play(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSA RETURN_IF(err, "STRTOL failed", false); } + /* If position is after the queue, don't do anything */ + RETURN_UNLESS(database_queue_state(srv->db, &queue_state), "Can't get playback status", false); + if (queue_state.length <= pos) { + LOG_INFO("COMMAND", "Don't perform play command, queue is empty or position is after queue length"); + return false; + } + /* Do the actual job here. */ database_queue_stop(srv->db); RETURN_IF(MOD_CALL(srv->window_mod, "new", &srv->queue, srv->db), "Can't create window", false);