4 * Manage user preferences with a little help from the Citadel server.
15 #include <sys/types.h>
17 #include <sys/socket.h>
20 #include <netinet/in.h>
29 #include "webserver.h"
33 void load_preferences(void) {
37 lprintf(9, "entering load_preferences()\n");
39 serv_printf("GOTO %s", USERCONFIGROOM);
41 if (buf[0] != '2') return;
43 serv_puts("MSGS ALL|0|1");
46 serv_puts("subj|__ WebCit Preferences __");
49 while (serv_gets(buf), strcmp(buf, "000")) {
54 serv_printf("MSG0 %ld", msgnum);
57 while (serv_gets(buf),
58 (strcmp(buf, "text") && strcmp(buf, "000"))) {
60 if (!strcmp(buf, "text")) {
61 while (serv_gets(buf), strcmp(buf, "000")) {
62 if (WC->preferences == NULL) {
63 WC->preferences = malloc(SIZ);
64 strcpy(WC->preferences, "");
67 WC->preferences = realloc(
69 strlen(WC->preferences)
73 strcat(WC->preferences, buf);
74 strcat(WC->preferences, "\n");
80 /* Go back to the room we're supposed to be in */
81 serv_printf("GOTO %s", WC->wc_roomname);
83 lprintf(9, "exiting load_preferences()\n");
86 void save_preferences(void) {
90 lprintf(9, "entering save_preferences()\n");
91 serv_printf("GOTO %s", USERCONFIGROOM);
93 if (buf[0] != '2') { /* try to create the config room if not there */
94 serv_printf("CRE8 1|%s|4|0", USERCONFIGROOM);
96 serv_printf("GOTO %s", USERCONFIGROOM);
98 if (buf[0] != '2') return; /* oh well. */
101 serv_puts("MSGS ALL|0|1");
104 serv_puts("subj|__ WebCit Preferences __");
107 while (serv_gets(buf), strcmp(buf, "000")) {
112 serv_printf("DELE %ld", msgnum);
116 serv_printf("ENT0 1||0|1|__ WebCit Preferences __|");
119 serv_puts(WC->preferences);
124 /* Go back to the room we're supposed to be in */
125 serv_printf("GOTO %s", WC->wc_roomname);
127 lprintf(9, "exiting save_preferences()\n");
130 void get_preference(char *key, char *value) {
136 lprintf(9, "entering get_preference(%s)\n", key);
139 num_prefs = num_tokens(WC->preferences, '\n');
140 for (i=0; i<num_prefs; ++i) {
141 extract_token(buf, WC->preferences, i, '\n');
142 extract_token(thiskey, buf, 0, '|');
143 if (!strcasecmp(thiskey, key)) {
144 extract_token(value, buf, 1, '|');
147 lprintf(9, "exiting get_preference() = %s\n", value);
150 void set_preference(char *key, char *value) {
155 char *newprefs = NULL;
157 lprintf(9, "entering set_preference(%s, %s)\n", key, value);
158 num_prefs = num_tokens(WC->preferences, '\n');
159 for (i=0; i<num_prefs; ++i) {
160 extract_token(buf, WC->preferences, i, '\n');
161 if (num_tokens(buf, '|') == 2) {
162 extract_token(thiskey, buf, 0, '|');
163 if (strcasecmp(thiskey, key)) {
164 if (newprefs == NULL) newprefs = strdup("");
165 newprefs = realloc(newprefs,
166 strlen(newprefs) + SIZ );
167 strcat(newprefs, buf);
168 strcat(newprefs, "\n");
174 if (newprefs == NULL) newprefs = strdup("");
175 newprefs = realloc(newprefs, strlen(newprefs) + SIZ);
176 sprintf(&newprefs[strlen(newprefs)], "%s|%s\n", key, value);
178 free(WC->preferences);
179 WC->preferences = newprefs;
182 lprintf(9, "exiting set_preference()\n");