StrBuf *Setting;
const char *PrefStr;
PrefEvalFunc OnLoad;
+ StrBuf *OnLoadName;
} PrefDef;
typedef struct _Preference {
{
PrefDef *Prefdef = (PrefDef*) vPrefDef;
FreeStrBuf(&Prefdef->Setting);
+ FreeStrBuf(&Prefdef->OnLoadName);
free(Prefdef);
}
free(Pref);
}
-void RegisterPreference(const char *Setting, long SettingLen,
- const char *PrefStr,
- long Type,
- PrefEvalFunc OnLoad)
+void _RegisterPreference(const char *Setting, long SettingLen,
+ const char *PrefStr,
+ long Type,
+ PrefEvalFunc OnLoad,
+ const char *OnLoadName)
{
PrefDef *Newpref = (PrefDef*) malloc(sizeof(PrefDef));
Newpref->Setting = NewStrBufPlain(Setting, SettingLen);
Newpref->PrefStr = PrefStr;
Newpref->Type = Type;
Newpref->OnLoad = OnLoad;
+ if (Newpref->OnLoad != NULL) {
+ Newpref->OnLoadName = NewStrBufPlain(OnLoadName, -1);
+ }
+ else
+ Newpref->OnLoadName = NULL;
Put(PreferenceHooks, Setting, SettingLen, Newpref, DestroyPrefDef);
}
const char *Key;
void *vSetting;
void *vPrefDef;
- Preference *Setting;
+ Preference *Pref;
PrefDef *PrefType;
It = GetNewHashPos(List, 0);
while (GetNextHashPos(List, It, &len, &Key, &vSetting))
{
- Setting = (Preference*) vSetting;
- if (GetHash(PreferenceHooks, SKEY(Setting->Key), &vPrefDef) &&
+ Pref = (Preference*) vSetting;
+ if (GetHash(PreferenceHooks, SKEY(Pref->Key), &vPrefDef) &&
(vPrefDef != NULL))
{
PrefType = (PrefDef*) vPrefDef;
- Setting->Type = PrefType;
- if (PrefType->OnLoad != NULL)
- PrefType->OnLoad(Setting->Val, Setting->lval);
+ Pref->Type = PrefType;
+
+ lprintf(1, "Loading [%s]with type [%ld] [\"%s\"]\n",
+ ChrPtr(Pref->Key),
+ Pref->Type->Type,
+ ChrPtr(Pref->Val));
+
+ switch (Pref->Type->Type)
+ {
+
+ case PRF_STRING:
+ break;
+ case PRF_INT:
+ Pref->lval = StrTol(Pref->Val);
+ Pref->decoded = 1;
+ break;
+ case PRF_QP_STRING:
+ Pref->DeQPed = NewStrBufPlain(NULL, StrLength(Pref->Val));
+ StrBufEUid_unescapize(Pref->DeQPed, Pref->Val);
+ Pref->decoded = 1;
+ break;
+ case PRF_YESNO:
+ Pref->lval = strcmp(ChrPtr(Pref->Val), "yes") == 0;
+ Pref->decoded = 1;
+ break;
+ }
+
+ if (PrefType->OnLoad != NULL){
+
+ lprintf(1, "Loading with: -> %s(\"%s\", %ld)\n",
+ ChrPtr(PrefType->OnLoadName),
+ ChrPtr(Pref->Val),
+ Pref->lval);
+ PrefType->OnLoad(Pref->Val, Pref->lval);
+ }
}
}
DeleteHashPos(&It);
void ParsePref(HashList **List, StrBuf *ReadBuf)
{
- StrBuf *Key;
Preference *Data = NULL;
Preference *LastData = NULL;
- Key = NewStrBuf();
while (StrBuf_ServGetln(ReadBuf),
strcmp(ChrPtr(ReadBuf), "000"))
{
*/
void load_preferences(void)
{
+ int Done = 0;
StrBuf *ReadBuf;
- char buf[SIZ];
long msgnum = 0L;
if (goto_config_room() != 0) return; /* oh well. */
serv_puts("subj|__ WebCit Preferences __");
serv_puts("000");
}
- while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
- msgnum = atol(buf);
+ while (!Done &&
+ StrBuf_ServGetln(ReadBuf)) {
+ if ( (StrLength(ReadBuf)==3) &&
+ !strcmp(ChrPtr(ReadBuf), "000")) {
+ Done = 1;
+ break;
+ }
+ msgnum = StrTol(ReadBuf);
}
if (msgnum > 0L) {
*/
void save_preferences(void)
{
- char buf[SIZ];
+ int Done;
+ StrBuf *ReadBuf;
long msgnum = 0L;
+ ReadBuf = NewStrBuf();
if (goto_config_room() != 0) return; /* oh well. */
serv_puts("MSGS ALL|0|1");
- serv_getln(buf, sizeof buf);
- if (buf[0] == '8') {
+ StrBuf_ServGetln(ReadBuf);
+ if (GetServerStatus(ReadBuf, NULL) == 8) {
serv_puts("subj|__ WebCit Preferences __");
serv_puts("000");
}
- while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
- msgnum = atol(buf);
+ while (!Done &&
+ StrBuf_ServGetln(ReadBuf)) {
+ if ( (StrLength(ReadBuf)==3) &&
+ !strcmp(ChrPtr(ReadBuf), "000")) {
+ Done = 1;
+ break;
+ }
+ msgnum = StrTol(ReadBuf);
}
if (msgnum > 0L) {
serv_printf("DELE %ld", msgnum);
- serv_getln(buf, sizeof buf);
+ StrBuf_ServGetln(ReadBuf);
+ GetServerStatus(ReadBuf, NULL);
}
serv_printf("ENT0 1||0|1|__ WebCit Preferences __|");
- serv_getln(buf, sizeof buf);
- if (buf[0] == '4') {
+ StrBuf_ServGetln(ReadBuf);
+ if (GetServerStatus(ReadBuf, NULL) == 4) {
WritePrefsToServer(WC->hash_prefs);
serv_puts("");
/** Go back to the room we're supposed to be in */
serv_printf("GOTO %s", ChrPtr(WC->wc_roomname));
- serv_getln(buf, sizeof buf);
+ StrBuf_ServGetln(ReadBuf);
+ FreeStrBuf(&ReadBuf);
}
/**
}
}
WCC->hash_prefs = Tmp;
+ DeleteHashPos(&It);
}