X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/71634563a24f62eedab5fd97fed3c029061acf43..d0b6635eee6d656502d129e88c65a5014c8e042f:/server/lookup.c diff --git a/server/lookup.c b/server/lookup.c index 4005238..cb28f2c 100644 --- a/server/lookup.c +++ b/server/lookup.c @@ -17,119 +17,103 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA */ -/** @file server/macros-disorder.c - * @brief DisOrder-specific expansions - */ - -#include -#include "types.h" - -#include -#include - -#include "queue.h" -#include "sink.h" -#include "client.h" -#include "rights.h" -#include "lookup.h" -#include "cgi.h" - -/** @brief Client used by CGI +/** @file server/lookup.c + * @brief Server lookups * - * The caller should arrange for this to be created before any of - * these expansions are used (if it cannot connect then it's safe to - * leave it as NULL). + * To improve performance many server lookups are cached. */ -disorder_client *client; + +#include "disorder-cgi.h" /** @brief Cached data */ static unsigned flags; -struct queue_entry *queue; -struct queue_entry *playing; -struct queue_entry *recent; - -int volume_left; -int volume_right; - -char **files; -int nfiles; +struct queue_entry *dcgi_queue; +struct queue_entry *dcgi_playing; +struct queue_entry *dcgi_recent; -char **dirs; -int ndirs; +int dcgi_volume_left; +int dcgi_volume_right; -char **new; -int nnew; +char **dcgi_new; +int dcgi_nnew; -rights_type rights; +rights_type dcgi_rights; -int enabled; -int random_enabled; +int dcgi_enabled; +int dcgi_random_enabled; /** @brief Fetch cachable data */ -void lookup(unsigned want) { +void dcgi_lookup(unsigned want) { unsigned need = want ^ (flags & want); struct queue_entry *r, *rnext; +#if 0 const char *dir, *re; - char *rights_string; +#endif + char *rs; - if(!client || !need) + if(!dcgi_client || !need) return; - if(need & DC_QUEUE) - disorder_queue(client, &queue); - if(need & DC_PLAYING) - disorder_playing(client, &playing); - if(need & DC_NEW) - disorder_new_tracks(client, &new, &nnew, 0); - if(need & DC_RECENT) { + if(need & DCGI_QUEUE) + disorder_queue(dcgi_client, &dcgi_queue); + if(need & DCGI_PLAYING) + disorder_playing(dcgi_client, &dcgi_playing); + if(need & DCGI_NEW) + disorder_new_tracks(dcgi_client, &dcgi_new, &dcgi_nnew, 0); + if(need & DCGI_RECENT) { /* we need to reverse the order of the list */ - disorder_recent(client, &r); + disorder_recent(dcgi_client, &r); while(r) { rnext = r->next; - r->next = recent; - recent = r; + r->next = dcgi_recent; + dcgi_recent = r; r = rnext; } } - if(need & DC_VOLUME) - disorder_get_volume(client, - &volume_left, &volume_right); - /* DC_FILES and DC_DIRS are looking obsolete now */ - if(need & (DC_FILES|DC_DIRS)) { + if(need & DCGI_VOLUME) + disorder_get_volume(dcgi_client, + &dcgi_volume_left, &dcgi_volume_right); +#if 0 + /* DCGI_FILES and DCGI_DIRS are looking obsolete now */ + if(need & (DCGI_FILES|DCGI_DIRS)) { if(!(dir = cgi_get("directory"))) dir = ""; re = cgi_get("regexp"); - if(need & DC_DIRS) - if(disorder_directories(client, dir, re, + if(need & DCGI_DIRS) + if(disorder_directories(dcgi_client, dir, re, &dirs, &ndirs)) ndirs = 0; - if(need & DC_FILES) - if(disorder_files(client, dir, re, + if(need & DCGI_FILES) + if(disorder_files(dcgi_client, dir, re, &files, &nfiles)) nfiles = 0; } - if(need & DC_RIGHTS) { - rights = RIGHT_READ; /* fail-safe */ - if(!disorder_userinfo(client, disorder_user(client), - "rights", &rights_string)) - parse_rights(rights_string, &rights, 1); +#endif + if(need & DCGI_RIGHTS) { + dcgi_rights = RIGHT_READ; /* fail-safe */ + if(!disorder_userinfo(dcgi_client, disorder_user(dcgi_client), + "rights", &rs)) + parse_rights(rs, &dcgi_rights, 1); } - if(need & DC_ENABLED) - disorder_enabled(client, &enabled); - if(need & DC_RANDOM_ENABLED) - disorder_random_enabled(client, &random_enabled); - if(need & DC_RANDOM_ENABLED) + if(need & DCGI_ENABLED) + disorder_enabled(dcgi_client, &dcgi_enabled); + if(need & DCGI_RANDOM_ENABLED) + disorder_random_enabled(dcgi_client, &dcgi_random_enabled); flags |= need; } -void lookup_reset(void) { - /* Junk the old connection if there is one */ - if(client) - disorder_close(client); - /* Create a new connection */ - client = disorder_new(0); +void dcgi_lookup_reset(void) { /* Forget everything we knew */ flags = 0; + dcgi_recent = 0; + dcgi_queue = 0; + dcgi_playing = 0; + dcgi_rights = 0; + dcgi_new = 0; + dcgi_nnew = 0; + dcgi_enabled = 0; + dcgi_random_enabled = 0; + dcgi_volume_left = dcgi_volume_right = 0; }