From: Wilfried Göesgens Date: Sun, 3 Aug 2008 20:54:42 +0000 (+0000) Subject: * abstract setting per room preferences X-Git-Tag: v7.86~2052 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=df2f8d2028ad2bdeed05a9104e99c1629a78d121 * abstract setting per room preferences * 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) --- diff --git a/webcit/addressbook_popup.c b/webcit/addressbook_popup.c index 6cfb5b5c3..f3445cfef 100644 --- a/webcit/addressbook_popup.c +++ b/webcit/addressbook_popup.c @@ -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(""); wprintf(""); wprintf("
"); @@ -44,7 +47,9 @@ void display_address_book_middle_div(void) { bstr("target_input") ); - wprintf("\n"); @@ -65,7 +70,10 @@ void display_address_book_middle_div(void) { while (GetNextHashPos(List, it, &len, &Name, &Namee)) { wprintf("\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"); diff --git a/webcit/messages.c b/webcit/messages.c index 1b5351235..86b6a7c2f 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -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) { diff --git a/webcit/preferences.c b/webcit/preferences.c index c76aff119..437287b76 100644 --- a/webcit/preferences.c +++ b/webcit/preferences.c @@ -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 */ diff --git a/webcit/webcit.h b/webcit/webcit.h index 8737160e4..bf66a34d5 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -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);