]> code.citadel.org Git - citadel.git/blobdiff - webcit/preferences.c
* abstract setting per room preferences
[citadel.git] / webcit / preferences.c
index c29ec1c0f43326bf50776120858ca8216f68c8d6..437287b767e066536ad89d3a970676a9b38519af 100644 (file)
@@ -9,10 +9,12 @@
 #include "webserver.h"
 #include "groupdav.h"
 
+#ifdef DBG_PREFS_HASH
 inline const char *PrintPref(void *Prefstr)
 {
        return ChrPtr(Prefstr);
 }
+#endif
 
 /*
  * display preferences dialog
@@ -78,6 +80,7 @@ void load_preferences(void) {
                                }
                                FreeStrBuf(&Key);
                        }
+                       FreeStrBuf(&ReadBuf);
                }
        }
 
@@ -140,7 +143,9 @@ void save_preferences(void) {
                StrBuf *SubBuf = NULL;
                
                Hash = WC->hash_prefs;
+#ifdef DBG_PREFS_HASH
                dbg_PrintHash(Hash, PrintPref, NULL);
+#endif
                HashPos = GetNewHashPos();
                while (GetNextHashPos(Hash, HashPos, &len, &Key, &Value)!=0)
                {
@@ -158,7 +163,7 @@ void save_preferences(void) {
                                offset = 0;
                                while (nchars > 0) {
                                        if (n == 0)
-                                               nchars = 71;
+                                               nchars = 70;
                                        else 
                                                nchars = 80;
 
@@ -170,6 +175,7 @@ void save_preferences(void) {
                                                serv_printf(" %s", ChrPtr(SubBuf));
 
                                        offset += nchars;
+                                       nchars = StrLength(Buf) - offset;
                                        n++;
                                }
                                
@@ -200,8 +206,9 @@ void save_preferences(void) {
 int get_PREFERENCE(const char *key, size_t keylen, StrBuf **value)
 {
        void *hash_value = NULL;
-       
+#ifdef DBG_PREFS_HASH
        dbg_PrintHash(WC->hash_prefs, PrintPref, NULL);
+#endif
        if (GetHash(WC->hash_prefs, key, keylen, &hash_value) == 0) {
                *value = NULL;
                return 0;
@@ -287,6 +294,27 @@ void set_PREF_YESNO(const char *key, size_t keylen, int value, int save_to_serve
        }
 }
 
+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);
+       get_pref(pref_name, &pref_value);
+       FreeStrBuf(&pref_name);
+       return pref_value;
+}
+
+void set_ROOM_PREFS(const char *key, size_t keylen, StrBuf *value, int save_to_server)
+{
+       StrBuf *pref_name;
+       
+       pref_name = NewStrBuf ();
+       StrBufPrintf(pref_name, "%s %s", key, WC->wc_roomname);
+       set_PREFERENCE(ChrPtr(pref_name), StrLength(pref_name), value, save_to_server);
+       FreeStrBuf(&pref_name);
+}
+
 /** 
  * \brief display form for changing your preferences and settings
  */
@@ -471,13 +499,13 @@ void display_preferences(void)
        );
 
        wprintf("<input type=\"radio\" id=\"no_sig\" name=\"use_sig\" VALUE=\"no\"");
-       if (UseSig) wprintf(" checked");
+       if (!UseSig) wprintf(" checked");
        wprintf(" onChange=\"show_or_hide_sigbox();\" >");
        wprintf(_("No signature"));
        wprintf("</input>&nbsp,&nbsp;&nbsp;\n");
 
        wprintf("<input type=\"radio\" id=\"yes_sig\" name=\"use_sig\" VALUE=\"yes\"");
-       if (!UseSig) wprintf(" checked");
+       if (UseSig) wprintf(" checked");
        wprintf(" onChange=\"show_or_hide_sigbox();\" >");
        wprintf(_("Use this signature:"));
        wprintf("<div id=\"signature_box\">"
@@ -604,4 +632,11 @@ void set_preferences(void)
 }
 
 
+void 
+InitModule_PREFERENCES
+(void)
+{
+       WebcitAddUrlHandler(HKEY("display_preferences"), display_preferences, 0);
+       WebcitAddUrlHandler(HKEY("set_preferences"), set_preferences, 0);
+}
 /*@}*/