X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/375d9478a5b6b14bfb5f6e1a054e900a18e40717..830ba0539c131677c9354ce9a65848ae576fa616:/server/server.c diff --git a/server/server.c b/server/server.c index 4dafabb..29efbbe 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,8 +1150,19 @@ static int c_set_global(struct conn *c, sink_writes(ev_writer_sink(c->w), "550 cannot set internal global preferences\n"); return 1; } - trackdb_set_global(vec[0], vec[1], c->who); - sink_printf(ev_writer_sink(c->w), "250 OK\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); + sink_printf(ev_writer_sink(c->w), "250 OK\n"); + } else if(!strcmp(vec[0], "random-play")) { + (flag_enabled(vec[1]) ? enable_random : disable_random)(c->who, c->ev); + sink_printf(ev_writer_sink(c->w), "250 OK\n"); + } 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; } @@ -1854,12 +1865,12 @@ static const struct command { */ rights_type rights; } commands[] = { - { "adduser", 2, 3, c_adduser, RIGHT_ADMIN|RIGHT__LOCAL }, + { "adduser", 2, 3, c_adduser, RIGHT_ADMIN }, { "adopt", 1, 1, c_adopt, RIGHT_PLAY }, { "allfiles", 0, 2, c_allfiles, RIGHT_READ }, { "confirm", 1, 1, c_confirm, 0 }, { "cookie", 1, 1, c_cookie, 0 }, - { "deluser", 1, 1, c_deluser, RIGHT_ADMIN|RIGHT__LOCAL }, + { "deluser", 1, 1, c_deluser, RIGHT_ADMIN }, { "dirs", 0, 2, c_dirs, RIGHT_READ }, { "disable", 0, 1, c_disable, RIGHT_GLOBAL_PREFS }, { "edituser", 3, 3, c_edituser, RIGHT_ADMIN|RIGHT_USERINFO }, @@ -1896,7 +1907,7 @@ static const struct command { { "random-enabled", 0, 0, c_random_enabled, RIGHT_READ }, { "recent", 0, 0, c_recent, RIGHT_READ }, { "reconfigure", 0, 0, c_reconfigure, RIGHT_ADMIN }, - { "register", 3, 3, c_register, RIGHT_REGISTER|RIGHT__LOCAL }, + { "register", 3, 3, c_register, RIGHT_REGISTER }, { "reminder", 1, 1, c_reminder, RIGHT__LOCAL }, { "remove", 1, 1, c_remove, RIGHT_REMOVE__MASK }, { "rescan", 0, INT_MAX, c_rescan, RIGHT_RESCAN },