X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/d22b8a59995829bc14b4490b9bddd95346e0585d..04aa2c4f1affbc96f5de4ad492e9dce89f6209e1:/server/dcgi.c diff --git a/server/dcgi.c b/server/dcgi.c index 9a510c8..bf6fbe5 100644 --- a/server/dcgi.c +++ b/server/dcgi.c @@ -80,94 +80,8 @@ static void expand_template(dcgi_state *ds, cgi_sink *output, expand(output, action, ds); } -/* actions ********************************************************************/ - -static void act_prefs_errors(const char *msg, - void attribute((unused)) *u) { - fatal(0, "error splitting parts list: %s", msg); -} - -static const char *numbered_arg(const char *argname, int numfile) { - char *fullname; - - byte_xasprintf(&fullname, "%d_%s", numfile, argname); - return cgi_get(fullname); -} - -static void process_prefs(dcgi_state *ds, int numfile) { - const char *file, *name, *value, *part, *parts, *current, *context; - char **partslist; - - if(!(file = numbered_arg("file", numfile))) - /* The first file doesn't need numbering. */ - if(numfile > 0 || !(file = cgi_get("file"))) - return; - if((parts = numbered_arg("parts", numfile)) - || (parts = cgi_get("parts"))) { - /* Default context is display. Other contexts not actually tested. */ - if(!(context = numbered_arg("context", numfile))) context = "display"; - partslist = split(parts, 0, 0, act_prefs_errors, 0); - while((part = *partslist++)) { - if(!(value = numbered_arg(part, numfile))) - continue; - /* If it's already right (whether regexps or db) don't change anything, - * so we don't fill the database up with rubbish. */ - if(disorder_part(ds->g->client, (char **)¤t, - file, context, part)) - fatal(0, "disorder_part() failed"); - if(!strcmp(current, value)) - continue; - byte_xasprintf((char **)&name, "trackname_%s_%s", context, part); - disorder_set(ds->g->client, file, name, value); - } - if((value = numbered_arg("random", numfile))) - disorder_unset(ds->g->client, file, "pick_at_random"); - else - disorder_set(ds->g->client, file, "pick_at_random", "0"); - if((value = numbered_arg("tags", numfile))) { - if(!*value) - disorder_unset(ds->g->client, file, "tags"); - else - disorder_set(ds->g->client, file, "tags", value); - } - if((value = numbered_arg("weight", numfile))) { - if(!*value || !strcmp(value, "90000")) - disorder_unset(ds->g->client, file, "weight"); - else - disorder_set(ds->g->client, file, "weight", value); - } - } else if((name = cgi_get("name"))) { - /* Raw preferences. Not well supported in the templates at the moment. */ - value = cgi_get("value"); - if(value) - disorder_set(ds->g->client, file, name, value); - else - disorder_unset(ds->g->client, file, name); - } -} - -static void act_prefs(cgi_sink *output, dcgi_state *ds) { - const char *files; - int nfiles, numfile; - - if((files = cgi_get("files"))) nfiles = atoi(files); - else nfiles = 1; - for(numfile = 0; numfile < nfiles; ++numfile) - process_prefs(ds, numfile); - cgi_header(output->sink, "Content-Type", "text/html"); - header_cookie(output->sink); - cgi_body(output->sink); - expand(output, "prefs", ds); -} /* expansions *****************************************************************/ -static void exp_label(int attribute((unused)) nargs, - char **args, - cgi_sink *output, - void attribute((unused)) *u) { - cgi_output(output, "%s", cgi_label(args[0])); -} - struct trackinfo_state { dcgi_state *ds; const struct queue_entry *q;