From: Wilfried Göesgens Date: Tue, 10 Feb 2009 22:08:53 +0000 (+0000) Subject: * add name of callback hook for logging (yes, I LOVE XMACROS) X-Git-Tag: v7.86~1472 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=675bac2d0316dc6eb7f26f375959f43025b621b8 * add name of callback hook for logging (yes, I LOVE XMACROS) * we need to decode preferences on load, so the preference evaluator callback gets the actual value --- diff --git a/webcit/calendar.c b/webcit/calendar.c index 30e4e5280..cc946365d 100644 --- a/webcit/calendar.c +++ b/webcit/calendar.c @@ -1188,9 +1188,9 @@ void InitModule_CALENDAR (void) { - RegisterPreference(HKEY("daystart"), _("Calendar day view begins at:"), PRF_INT, NULL); - RegisterPreference(HKEY("dayend"), _("Calendar day view ends at:"), PRF_INT, NULL); - RegisterPreference(HKEY("weekstart"), _("Week starts on:"), PRF_INT, NULL); + RegisterPreference("daystart", _("Calendar day view begins at:"), PRF_INT, NULL); + RegisterPreference("dayend", _("Calendar day view ends at:"), PRF_INT, NULL); + RegisterPreference("weekstart", _("Week starts on:"), PRF_INT, NULL); WebcitAddUrlHandler(HKEY("display_edit_task"), display_edit_task, 0); WebcitAddUrlHandler(HKEY("save_task"), save_task, 0); diff --git a/webcit/fmt_date.c b/webcit/fmt_date.c index ff895f20e..2bd49af45 100644 --- a/webcit/fmt_date.c +++ b/webcit/fmt_date.c @@ -279,7 +279,7 @@ void InitModule_DATETIME (void) { - RegisterPreference(HKEY("calhourformat"), _("Time format"), PRF_INT, LoadTimeformatSettingsCache); + RegisterPreference("calhourformat", _("Time format"), PRF_INT, LoadTimeformatSettingsCache); } diff --git a/webcit/messages.c b/webcit/messages.c index a30263a2f..37a918630 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -1676,25 +1676,25 @@ void InitModule_MSG (void) { - RegisterPreference(HKEY("use_sig"), + RegisterPreference("use_sig", _("Attach signature to email messages?"), PRF_YESNO, NULL); - RegisterPreference(HKEY("signature"), _("Use this signature:"), PRF_QP_STRING, NULL); - RegisterPreference(HKEY("default_header_charset"), + RegisterPreference("signature", _("Use this signature:"), PRF_QP_STRING, NULL); + RegisterPreference("default_header_charset", _("Default character set for email headers:"), PRF_STRING, NULL); - RegisterPreference(HKEY("defaultfrom"), _("Preferred email address"), PRF_STRING, NULL); - RegisterPreference(HKEY("defaultname"), + RegisterPreference("defaultfrom", _("Preferred email address"), PRF_STRING, NULL); + RegisterPreference("defaultname", _("Preferred display name for email messages"), PRF_STRING, NULL); - RegisterPreference(HKEY("defaulthandle"), + RegisterPreference("defaulthandle", _("Preferred display name for bulletin board posts"), PRF_STRING, NULL); - RegisterPreference(HKEY("mailbox"),_("Mailbox view mode"), PRF_STRING, NULL); + RegisterPreference("mailbox",_("Mailbox view mode"), PRF_STRING, NULL); WebcitAddUrlHandler(HKEY("readnew"), h_readnew, NEED_URL); WebcitAddUrlHandler(HKEY("readold"), h_readold, NEED_URL); diff --git a/webcit/preferences.c b/webcit/preferences.c index 19181cca0..c134355ae 100644 --- a/webcit/preferences.c +++ b/webcit/preferences.c @@ -16,6 +16,7 @@ typedef struct _PrefDef { StrBuf *Setting; const char *PrefStr; PrefEvalFunc OnLoad; + StrBuf *OnLoadName; } PrefDef; typedef struct _Preference { @@ -32,6 +33,7 @@ void DestroyPrefDef(void *vPrefDef) { PrefDef *Prefdef = (PrefDef*) vPrefDef; FreeStrBuf(&Prefdef->Setting); + FreeStrBuf(&Prefdef->OnLoadName); free(Prefdef); } @@ -44,16 +46,22 @@ void DestroyPreference(void *vPref) 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); } @@ -86,20 +94,52 @@ void GetPrefTypes(HashList *List) 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); diff --git a/webcit/preferences.h b/webcit/preferences.h index 70db2e36c..64d0c04ed 100644 --- a/webcit/preferences.h +++ b/webcit/preferences.h @@ -8,11 +8,14 @@ typedef void (*PrefEvalFunc)(StrBuf *Preference, long lvalue); -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); + +#define RegisterPreference(a, b, c, d) _RegisterPreference(a, sizeof(a) -1, b, c, d, #d) void load_preferences(void); void save_preferences(void); diff --git a/webcit/roomops.c b/webcit/roomops.c index b1fce7f15..eb84ba3ea 100644 --- a/webcit/roomops.c +++ b/webcit/roomops.c @@ -4004,11 +4004,11 @@ void InitModule_ROOMOPS (void) { - RegisterPreference(HKEY("roomlistview"), + RegisterPreference("roomlistview", _("Room list view"), PRF_STRING, NULL); - RegisterPreference(HKEY("emptyfloors"), _("Show empty floors"), PRF_YESNO, NULL); + RegisterPreference("emptyfloors", _("Show empty floors"), PRF_YESNO, NULL); RegisterNamespace("ROOMNAME", 0, 1, tmplput_RoomName, 0);