X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/e5cce183ca0d2299e8089d15e823179990cfb993..9439cdabec3e4c1d29e4366f9b654ef27eb2c586:/server/server.c diff --git a/server/server.c b/server/server.c index d8a84ea..239c54e 100644 --- a/server/server.c +++ b/server/server.c @@ -201,9 +201,9 @@ static int reader_error(ev_source attribute((unused)) *ev, static int c_disable(struct conn *c, char **vec, int nvec) { if(nvec == 0) - disable_playing(c->who); + disable_playing(c->who, c->ev); else if(nvec == 1 && !strcmp(vec[0], "now")) - disable_playing(c->who); + disable_playing(c->who, c->ev); else { sink_writes(ev_writer_sink(c->w), "550 invalid argument\n"); return 1; /* completed */ @@ -866,7 +866,7 @@ static int c_random_enable(struct conn *c, static int c_random_disable(struct conn *c, char attribute((unused)) **vec, int attribute((unused)) nvec) { - disable_random(c->who); + disable_random(c->who, c->ev); sink_writes(ev_writer_sink(c->w), "250 OK\n"); return 1; /* completed */ } @@ -1150,10 +1150,17 @@ static int c_set_global(struct conn *c, sink_writes(ev_writer_sink(c->w), "550 cannot set internal global preferences\n"); return 1; } - if(trackdb_set_global(vec[0], vec[1], c->who)) - sink_printf(ev_writer_sink(c->w), "250 OK\n"); - else - sink_writes(ev_writer_sink(c->w), "550 not found\n"); + /* We special-case the 'magic' preferences here. */ + if(!strcmp(vec[0], "playing")) { + (flag_enabled(vec[1]) ? enable_playing : disable_playing)(c->who, c->ev); + } else if(!strcmp(vec[0], "random-play")) { + (flag_enabled(vec[1]) ? enable_random : disable_random)(c->who, c->ev); + } else { + if(trackdb_set_global(vec[0], vec[1], c->who)) + sink_printf(ev_writer_sink(c->w), "250 OK\n"); + else + sink_writes(ev_writer_sink(c->w), "550 not found\n"); + } return 1; }