idle: client command "noidle" aborts idle
This commit is contained in:
parent
6eb62e4761
commit
cf7ed8c5df
@ -282,8 +282,10 @@ idle
|
|||||||
|
|
||||||
While a client waits for "idle" results, the server disables
|
While a client waits for "idle" results, the server disables
|
||||||
timeouts, allowing a client to wait for events as long as mpd
|
timeouts, allowing a client to wait for events as long as mpd
|
||||||
runs. The "idle" command can be canceled by sending a new
|
runs. The "idle" command can be canceled by sending the
|
||||||
command.
|
command "noidle" (no other commands are allowed). MPD will
|
||||||
|
then leave "idle" mode and print results immediately; might be
|
||||||
|
empty at this time.
|
||||||
|
|
||||||
|
|
||||||
COMMAND LIST
|
COMMAND LIST
|
||||||
|
24
src/client.c
24
src/client.c
@ -345,6 +345,27 @@ static int client_process_line(struct client *client, char *line)
|
|||||||
{
|
{
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
|
|
||||||
|
if (strcmp(line, "noidle") == 0) {
|
||||||
|
if (client->idle_waiting) {
|
||||||
|
/* send empty idle response and leave idle mode */
|
||||||
|
client->idle_waiting = false;
|
||||||
|
command_success(client);
|
||||||
|
client_write_output(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* do nothing if the client wasn't idling: the client
|
||||||
|
has already received the full idle response from
|
||||||
|
client_idle_notify(), which he can now evaluate */
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
} else if (client->idle_waiting) {
|
||||||
|
/* during idle mode, clients must not send anything
|
||||||
|
except "noidle" */
|
||||||
|
ERROR("client %i: command \"%s\" during idle\n",
|
||||||
|
client->num, line);
|
||||||
|
return COMMAND_RETURN_CLOSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (client->cmd_list_OK >= 0) {
|
if (client->cmd_list_OK >= 0) {
|
||||||
if (strcmp(line, CLIENT_LIST_MODE_END) == 0) {
|
if (strcmp(line, CLIENT_LIST_MODE_END) == 0) {
|
||||||
DEBUG("client %i: process command "
|
DEBUG("client %i: process command "
|
||||||
@ -418,9 +439,6 @@ static int client_input_received(struct client *client, int bytesRead)
|
|||||||
char *newline, *next;
|
char *newline, *next;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* any input from the client makes it leave "idle" mode */
|
|
||||||
client->idle_waiting = false;
|
|
||||||
|
|
||||||
client->bufferLength += bytesRead;
|
client->bufferLength += bytesRead;
|
||||||
|
|
||||||
/* process all lines */
|
/* process all lines */
|
||||||
|
Loading…
Reference in New Issue
Block a user