2 * This file is part of DisOrder.
3 * Copyright (C) 2004-2008 Richard Kettlewell
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
20 /** @file server/lookup.c
21 * @brief Server lookups
23 * To improve performance many server lookups are cached.
26 #include "disorder-cgi.h"
28 /** @brief Cached data */
29 static unsigned flags
;
31 struct queue_entry
*dcgi_queue
;
32 struct queue_entry
*dcgi_playing
;
33 struct queue_entry
*dcgi_recent
;
36 int dcgi_volume_right
;
41 rights_type dcgi_rights
;
44 int dcgi_random_enabled
;
46 /** @brief Fetch cachable data */
47 void dcgi_lookup(unsigned want
) {
48 unsigned need
= want
^ (flags
& want
);
49 struct queue_entry
*r
, *rnext
;
55 if(!dcgi_client
|| !need
)
58 disorder_queue(dcgi_client
, &dcgi_queue
);
59 if(need
& DCGI_PLAYING
)
60 disorder_playing(dcgi_client
, &dcgi_playing
);
62 disorder_new_tracks(dcgi_client
, &dcgi_new
, &dcgi_nnew
, 0);
63 if(need
& DCGI_RECENT
) {
64 /* we need to reverse the order of the list */
65 disorder_recent(dcgi_client
, &r
);
68 r
->next
= dcgi_recent
;
73 if(need
& DCGI_VOLUME
)
74 disorder_get_volume(dcgi_client
,
75 &dcgi_volume_left
, &dcgi_volume_right
);
77 /* DCGI_FILES and DCGI_DIRS are looking obsolete now */
78 if(need
& (DCGI_FILES
|DCGI_DIRS
)) {
79 if(!(dir
= cgi_get("directory")))
81 re
= cgi_get("regexp");
83 if(disorder_directories(dcgi_client
, dir
, re
,
87 if(disorder_files(dcgi_client
, dir
, re
,
92 if(need
& DCGI_RIGHTS
) {
93 dcgi_rights
= RIGHT_READ
; /* fail-safe */
94 if(!disorder_userinfo(dcgi_client
, disorder_user(dcgi_client
),
96 parse_rights(rs
, &dcgi_rights
, 1);
98 if(need
& DCGI_ENABLED
)
99 disorder_enabled(dcgi_client
, &dcgi_enabled
);
100 if(need
& DCGI_RANDOM_ENABLED
)
101 disorder_random_enabled(dcgi_client
, &dcgi_random_enabled
);
105 void dcgi_lookup_reset(void) {
106 /* Forget everything we knew */
115 dcgi_random_enabled
= 0;
116 dcgi_volume_left
= dcgi_volume_right
= 0;