* abstract setting per room preferences
authorWilfried Göesgens <willi@citadel.org>
Sun, 3 Aug 2008 20:54:42 +0000 (20:54 +0000)
committerWilfried Göesgens <willi@citadel.org>
Sun, 3 Aug 2008 20:54:42 +0000 (20:54 +0000)
* migrate mbox sortorder to the new abstraction
* add default addressbook selector, so the user gets the last selected addressbook again (html doesn't work yet)

webcit/addressbook_popup.c
webcit/messages.c
webcit/preferences.c
webcit/webcit.h

index 6cfb5b5c3a8b02c918d619ac102628334d257857..f3445cfef3c72a9ca57650d586c6d45c2b9d000d 100644 (file)
@@ -29,11 +29,14 @@ void display_address_book_middle_div(void) {
        long len;
        char *Name;
        void *Namee;
+       StrBuf *DefAddrBook;
        HashList *List;
        HashPos  *it;
 
        begin_ajax_response();
 
+       DefAddrBook = get_room_pref("defaddrbook");
+
        wprintf("<table border=0 width=100%%><tr valign=middle>");
        wprintf("<td align=left><img src=\"static/viewcontacts_32x.gif\"></td>");
        wprintf("<td align=center>");
@@ -44,7 +47,9 @@ void display_address_book_middle_div(void) {
                bstr("target_input")
        );
 
-       wprintf("<option value=\"__LOCAL_USERS__\">");
+       wprintf("<option value=\"__LOCAL_USERS__\" %s>", 
+               (strcmp(ChrPtr(DefAddrBook), "__LOCAL_USERS__") == 0)?
+               "active=\"yes\" ":"");
        escputs(serv_info.serv_humannode);
        wprintf("</option>\n");
 
@@ -65,7 +70,10 @@ void display_address_book_middle_div(void) {
        while (GetNextHashPos(List, it, &len, &Name, &Namee)) {
                wprintf("<option value=\"");
                urlescputs((char*)Namee);
-               wprintf("\">");
+               if (strcmp(ChrPtr(DefAddrBook), Namee) == 0)
+                       wprintf("\" active=\"yes\" >");
+               else
+                       wprintf("\">");
                escputs((char*)Namee);
                wprintf("</option>\n");
        }
@@ -139,6 +147,7 @@ void display_address_book_inner_div() {
        }
 
        else {
+               set_room_pref("defaddrbook",NewStrBufDup(sbstr("which_addr_book")), 0);
                safestrncpy(saved_roomname, WC->wc_roomname, sizeof saved_roomname);
                gotoroom(bstr("which_addr_book"));
                serv_puts("DVCA");
index 1b5351235164abf077e870283412303117bdb472..86b6a7c2f0bfc9754d37613ab647394416489204 100644 (file)
@@ -2414,7 +2414,7 @@ const int SenderInvertSortString[eUnSet] =  { eSender, eSender, eSender, eSender
  * \return the enum matching the string; defaults to RDate
  */
 //SortByEnum 
-int StrToESort (StrBuf *sortby)
+int StrToESort (const StrBuf *sortby)
 {
        int result = eDate;
 
@@ -2458,11 +2458,10 @@ void readloop(char *oper)
        int highest_displayed = 0;
        struct addrbookent *addrbook = NULL;
        int num_ab = 0;
-       StrBuf *sortby = NULL;
+       const StrBuf *sortby = NULL;
        //SortByEnum 
        int SortBy = eRDate;
-       StrBuf *sortpref_name;
-       StrBuf *sortpref_value;
+       const StrBuf *sortpref_value;
        int bbs_reverse = 0;
        struct wcsession *WCC = WC;     /* This is done to make it run faster; WC is a function */
 
@@ -2477,20 +2476,16 @@ void readloop(char *oper)
        is_summary = (ibstr("is_summary") && !WCC->is_mobile);
        if (maxmsgs == 0) maxmsgs = DEFAULT_MAXMSGS;
 
-       sortpref_name = NewStrBuf ();
-       StrBufPrintf(sortpref_name, "sort %s", WCC->wc_roomname);
-       get_pref(sortpref_name, &sortpref_value);
+       sortpref_value = get_room_pref("sort");
 
-       sortby = NewStrBufPlain(bstr("sortby"), -1);
+       sortby = sbstr("sortby");
        if ( (!IsEmptyStr(ChrPtr(sortby))) && 
             (strcasecmp(ChrPtr(sortby), ChrPtr(sortpref_value)) != 0)) {
-               set_pref(sortpref_name, sortby, 1);
+               set_room_pref("sort", NewStrBufDup(sortby), 1);
                sortpref_value = NULL;
                sortpref_value = sortby;
        }
-       FreeStrBuf(&sortby);
 
-       FreeStrBuf(&sortpref_name);
        SortBy = StrToESort(sortpref_value);
        /** message board sort */
        if (SortBy == eReverse) {
index c76aff1194ccbf11899ca02991ccc681b0175ca3..437287b767e066536ad89d3a970676a9b38519af 100644 (file)
@@ -294,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
  */
index 8737160e47566cdd3c55e0e07074dcaf827febfd..bf66a34d5e9d72ffee4fb77b491ec718fe73eefe 100644 (file)
@@ -648,7 +648,11 @@ int get_PREF_YESNO(const char *key, size_t keylen, int *value, int Default);
 #define set_pref_yesno(a, b, c) set_PREF_YESNO(a, sizeof(a) - 1, b, c)
 void set_PREF_YESNO(const char *key, size_t keylen, int value, int save_to_server);
 
+#define get_room_pref(a) get_ROOM_PREFS(a, sizeof(a) - 1)
+StrBuf *get_ROOM_PREFS(const char *key, size_t keylen);
 
+#define set_room_pref(a, b, c) set_ROOM_PREFS(a, sizeof(a) - 1, b, c)
+void set_ROOM_PREFS(const char *key, size_t keylen, StrBuf *value, int save_to_server);
 
 int is_msg_in_mset(char *mset, long msgnum);
 void display_addressbook(long msgnum, char alpha);