]> code.citadel.org Git - citadel.git/blobdiff - webcit/preferences.c
* merge in matts r6917 so it doesn't colide with ongoing changes.
[citadel.git] / webcit / preferences.c
index 8118e6eb8792518d513ba7e6a738911729660b4d..fddc53c10fed733dc454c585fb16bb9527536767 100644 (file)
@@ -122,7 +122,7 @@ void load_preferences(void)
        }
 
        /* Go back to the room we're supposed to be in */
-       serv_printf("GOTO %s", WC->wc_roomname);
+       serv_printf("GOTO %s", ChrPtr(WC->wc_roomname));
        serv_getln(buf, sizeof buf);
 }
 
@@ -234,7 +234,7 @@ void save_preferences(void) {
        }
 
        /** Go back to the room we're supposed to be in */
-       serv_printf("GOTO %s", WC->wc_roomname);
+       serv_printf("GOTO %s", ChrPtr(WC->wc_roomname));
        serv_getln(buf, sizeof buf);
 }
 
@@ -341,7 +341,7 @@ StrBuf *get_ROOM_PREFS(const char *key, size_t keylen)
        StrBuf *pref_name, *pref_value;
        
        pref_name = NewStrBuf ();
-       StrBufPrintf(pref_name, "%s %s", key, WC->wc_roomname);
+       StrBufPrintf(pref_name, "%s %s", key, ChrPtr(WC->wc_roomname));
        get_pref(pref_name, &pref_value);
        FreeStrBuf(&pref_name);
        return pref_value;
@@ -352,7 +352,7 @@ void set_ROOM_PREFS(const char *key, size_t keylen, StrBuf *value, int save_to_s
        StrBuf *pref_name;
        
        pref_name = NewStrBuf ();
-       StrBufPrintf(pref_name, "%s %s", key, WC->wc_roomname);
+       StrBufPrintf(pref_name, "%s %s", key, ChrPtr(WC->wc_roomname));
        set_PREFERENCE(ChrPtr(pref_name), StrLength(pref_name), value, save_to_server);
        FreeStrBuf(&pref_name);
 }
@@ -360,7 +360,8 @@ void set_ROOM_PREFS(const char *key, size_t keylen, StrBuf *value, int save_to_s
 /*
  * Offer to make any page the user's "start page."
  */
-void offer_start_page(StrBuf *Target, int nArgs, WCTemplateToken *Token, void *Context, int ContextType) {
+void offer_start_page(StrBuf *Target, WCTemplputParams *TP)
+{
        wprintf("<a href=\"change_start_page?startpage=");
        urlescputs(WC->this_page);
        wprintf("\">");
@@ -368,9 +369,9 @@ void offer_start_page(StrBuf *Target, int nArgs, WCTemplateToken *Token, void *C
        wprintf("</a>");
 #ifdef TECH_PREVIEW
        wprintf("<br/><a href=\"rss?room=");
-       urlescputs(WC->wc_roomname);
+       urlescputs(ChrPtr(WC->wc_roomname));
        wprintf("\" title=\"RSS 2.0 feed for ");
-       escputs(WC->wc_roomname);
+       escputs(ChrPtr(WC->wc_roomname));
        wprintf("\"><img alt=\"RSS\" border=\"0\" src=\"static/xml_button.gif\"/></a>\n");
 #endif
 }
@@ -438,6 +439,7 @@ void set_preferences(void)
         set_preference("defaultfrom", NewStrBufDup(sbstr("defaultfrom")), 0);
         set_preference("defaultname", NewStrBufDup(sbstr("defaultname")), 0);
         set_preference("defaulthandle", NewStrBufDup(sbstr("defaulthandle")), 0);
+        set_preference("mailbox", NewStrBufDup(sbstr("mailbox")), 0);
 
 
        buf = NewStrBufPlain(bstr("signature"), -1);
@@ -456,47 +458,57 @@ void set_preferences(void)
 #define PRF_YESNO 4
 
 
-void tmplput_CFG_Value(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+void tmplput_CFG_Value(StrBuf *Target, WCTemplputParams *TP)
 {
        StrBuf *Setting;
        if (get_PREFERENCE(TKEY(0), &Setting))
-       StrBufAppendTemplate(Target, nArgs, Tokens, Context, ContextType, Setting, 1);
+       StrBufAppendTemplate(Target, TP, Setting, 1);
 }
 
-void tmplput_CFG_Descr(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+void tmplput_CFG_Descr(StrBuf *Target, WCTemplputParams *TP)
 {
        const char *SettingStr;
        SettingStr = PrefGetLocalStr(TKEY(0));
        if (SettingStr != NULL) 
                StrBufAppendBufPlain(Target, SettingStr, -1, 0);
 }
-
-
-void CfgZoneTempl(StrBuf *TemplBuffer, void *vContext, WCTemplateToken *Token)
+void tmplput_CFG_RoomValue(StrBuf *Target, WCTemplputParams *TP)
 {
-       StrBuf *Zone = (StrBuf*) vContext;
+  StrBuf *pref = get_ROOM_PREFS(TKEY(0));
+  if (pref != NULL) 
+    StrBufAppendBuf(Target, pref, 0);
+}
+int ConditionalHasRoomPreference(WCTemplateToken *Tokens, void *Context, int ContextType) {
+  if (get_ROOM_PREFS(Tokens->Params[0]->Start, Tokens->Params[0]->len) != NULL) 
+    return 1;
+  
+  return 0;
+}
+void CfgZoneTempl(StrBuf *TemplBuffer, WCTemplputParams *TP)
+{
+       StrBuf *Zone = (StrBuf*) CTX;
 
        SVPutBuf("ZONENAME", Zone, 1);
 }
 
-int ConditionalPreference(WCTemplateToken *Tokens, void *Context, int ContextType)
+int ConditionalPreference(StrBuf *Target, WCTemplputParams *TP)
 {
        StrBuf *Pref;
 
        if (!get_PREFERENCE(TKEY(2), &Pref)) 
                return 0;
        
-       if (Tokens->nParameters == 3) {
+       if (TP->Tokens->nParameters == 3) {
                return 1;
        }
-       else if (Tokens->Params[3]->Type == TYPE_STR)
-               return ((Tokens->Params[3]->len == StrLength(Pref)) &&
-                       (strcmp(Tokens->Params[3]->Start, ChrPtr(Pref)) == 0));
+       else if (TP->Tokens->Params[3]->Type == TYPE_STR)
+               return ((TP->Tokens->Params[3]->len == StrLength(Pref)) &&
+                       (strcmp(TP->Tokens->Params[3]->Start, ChrPtr(Pref)) == 0));
        else 
-               return (StrTol(Pref) == Tokens->Params[3]->lvalue);
+               return (StrTol(Pref) == TP->Tokens->Params[3]->lvalue);
 }
 
-int ConditionalHazePreference(WCTemplateToken *Tokens, void *Context, int ContextType)
+int ConditionalHasPreference(StrBuf *Target, WCTemplputParams *TP)
 {
        StrBuf *Pref;
 
@@ -507,7 +519,7 @@ int ConditionalHazePreference(WCTemplateToken *Tokens, void *Context, int Contex
                return 1;
 }
 
-HashList *GetGVEAHash(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+HashList *GetGVEAHash(StrBuf *Target, WCTemplputParams *TP)
 {
        StrBuf *Rcp;
        HashList *List = NULL;
@@ -518,7 +530,7 @@ HashList *GetGVEAHash(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *
        Rcp = NewStrBuf();
        serv_puts("GVEA");
        StrBuf_ServGetln(Rcp);
-       if (ChrPtr(Rcp)[0] == '1') {
+       if (GetServerStatus(Rcp, NULL) == 1) {
                FlushStrBuf(Rcp);
                List = NewHash(1, NULL);
                while (!Done && (StrBuf_ServGetln(Rcp)>=0)) {
@@ -544,7 +556,7 @@ void DeleteGVEAHash(HashList **KillMe)
        DeleteHash(KillMe);
 }
 
-HashList *GetGVSNHash(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+HashList *GetGVSNHash(StrBuf *Target, WCTemplputParams *TP)
 {
        StrBuf *Rcp;
        HashList *List = NULL;
@@ -555,7 +567,7 @@ HashList *GetGVSNHash(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *
        Rcp = NewStrBuf();
        serv_puts("GVSN");
        StrBuf_ServGetln(Rcp);
-       if (ChrPtr(Rcp)[0] == '1') {
+       if (GetServerStatus(Rcp, NULL) == 1) {
                FlushStrBuf(Rcp);
                List = NewHash(1, NULL);
                while (!Done && (StrBuf_ServGetln(Rcp)>=0)) {
@@ -602,13 +614,16 @@ InitModule_PREFERENCES
        RegisterPreference("defaultfrom", _("Preferred email address"), PRF_STRING);
        RegisterPreference("defaultname", _("Preferred display name for email messages"), PRF_STRING);
        RegisterPreference("defaulthandle", _("Preferred display name for bulletin board posts"), PRF_STRING);
-       
+       RegisterNamespace("OFFERSTARTPAGE", 0, 0, offer_start_page, CTX_NONE);
+       RegisterPreference("mailbox",_("Mailbox view mode"), PRF_STRING);
+       RegisterNamespace("PREF:ROOM:VALUE", 1, 2, tmplput_CFG_RoomValue,  CTX_NONE);
        RegisterNamespace("PREF:VALUE", 1, 2, tmplput_CFG_Value, CTX_NONE);
        RegisterNamespace("PREF:DESCR", 1, 1, tmplput_CFG_Descr, CTX_NONE);
        RegisterIterator("PREF:ZONE", 0, ZoneHash, NULL, CfgZoneTempl, NULL, CTX_PREF, CTX_NONE, IT_NOFLAG);
 
        RegisterConditional(HKEY("COND:PREF"), 4, ConditionalPreference, CTX_NONE);
-       RegisterConditional(HKEY("COND:PREF:SET"), 4, ConditionalHazePreference, CTX_NONE);
+       RegisterConditional(HKEY("COND:PREF:SET"), 4, ConditionalHasPreference, CTX_NONE);
+       RegisterConditional(HKEY("COND:ROOM:SET"), 4, ConditionalHasRoomPreference, CTX_NONE);
        
        RegisterIterator("PREF:VALID:EMAIL:ADDR", 0, NULL, 
                         GetGVEAHash, NULL, DeleteGVEAHash, CTX_STRBUF, CTX_NONE, IT_NOFLAG);