--- a/mcabber/src/commands.c Wed Nov 28 22:42:48 2007 +0100
+++ b/mcabber/src/commands.c Thu Nov 29 20:54:38 2007 +0100
@@ -2590,6 +2590,8 @@
{
const char *roomid;
const char *name = NULL, *nick = NULL;
+ enum room_autowhois autowhois = 0;
+ enum room_printstatus printstatus = 0;
enum { bm_add = 0, bm_del = 1 } action = 0;
int autojoin = 0;
@@ -2617,9 +2619,12 @@
if (action == bm_add) {
name = buddy_getname(bud);
nick = buddy_getnickname(bud);
+ printstatus = buddy_getprintstatus(bud);
+ autowhois = buddy_getautowhois(bud);
}
- jb_set_storage_bookmark(roomid, name, nick, NULL, autojoin);
+ jb_set_storage_bookmark(roomid, name, nick, NULL, autojoin,
+ printstatus, autowhois);
}
static void display_all_bookmarks(void)
--- a/mcabber/src/jab_iq.c Wed Nov 28 22:42:48 2007 +0100
+++ b/mcabber/src/jab_iq.c Thu Nov 29 20:54:38 2007 +0100
@@ -739,6 +739,7 @@
static void storage_bookmarks_parse_conference(xmlnode xmldata)
{
const char *fjid, *name, *autojoin;
+ const char *pstatus, *awhois;
char *bjid;
GSList *room_elt;
@@ -747,6 +748,8 @@
return;
name = xmlnode_get_attrib(xmldata, "name");
autojoin = xmlnode_get_attrib(xmldata, "autojoin");
+ awhois = xmlnode_get_attrib(xmldata, "autowhois");
+ pstatus = xmlnode_get_tag_data(xmldata, "print_status");
bjid = jidtodisp(fjid); // Bare jid
@@ -766,6 +769,25 @@
*/
}
+ // Set the print_status and auto_whois values
+ if (pstatus) {
+ enum room_printstatus i;
+ for (i = status_none; i <= status_all; i++)
+ if (!strcasecmp(pstatus, strprintstatus[i]))
+ break;
+ if (i <= status_all)
+ buddy_setprintstatus(room_elt->data, i);
+ }
+ if (awhois) {
+ enum room_autowhois i = autowhois_default;
+ if (!strcmp(awhois, "1"))
+ i = autowhois_on;
+ else if (!strcmp(awhois, "0"))
+ i = autowhois_off;
+ if (i != autowhois_default)
+ buddy_setautowhois(room_elt->data, i);
+ }
+
// Is autojoin set?
// If it is, we'll look up for more information (nick? password?) and
// try to join the room.
--- a/mcabber/src/jabglue.c Wed Nov 28 22:42:48 2007 +0100
+++ b/mcabber/src/jabglue.c Thu Nov 29 20:54:38 2007 +0100
@@ -1405,11 +1405,14 @@
return sl_bookmarks;
}
-// jb_set_storage_bookmark(roomid, name, nick, passwd, autojoin)
+// jb_set_storage_bookmark(roomid, name, nick, passwd, autojoin,
+// printstatus, autowhois)
// Update the private storage bookmarks: add a conference room.
// If name is nil, we remove the bookmark.
void jb_set_storage_bookmark(const char *roomid, const char *name,
- const char *nick, const char *passwd, int autojoin)
+ const char *nick, const char *passwd,
+ int autojoin, enum room_printstatus pstatus,
+ enum room_autowhois awhois)
{
xmlnode x;
bool changed = FALSE;
@@ -1456,6 +1459,11 @@
xmlnode_insert_cdata(xmlnode_insert_tag(x, "nick"), nick, -1);
if (passwd)
xmlnode_insert_cdata(xmlnode_insert_tag(x, "password"), passwd, -1);
+ if (pstatus)
+ xmlnode_insert_cdata(xmlnode_insert_tag(x, "print_status"),
+ strprintstatus[pstatus], -1);
+ if (awhois)
+ xmlnode_put_attrib(x, "autowhois", (awhois == autowhois_on ? "1" : "0"));
changed = TRUE;
scr_LogPrint(LPRINT_LOGNORM, "Updating bookmarks...");
}
--- a/mcabber/src/jabglue.h Wed Nov 28 22:42:48 2007 +0100
+++ b/mcabber/src/jabglue.h Thu Nov 29 20:54:38 2007 +0100
@@ -81,7 +81,8 @@
GSList *jb_get_all_storage_bookmarks(void);
void jb_set_storage_bookmark(const char *roomid, const char *name,
const char *nick, const char *passwd,
- int autojoin);
+ int autojoin, enum room_printstatus pstatus,
+ enum room_autowhois awhois);
struct annotation *jb_get_storage_rosternotes(const char *barejid, int silent);
GSList *jb_get_all_storage_rosternotes(void);
void jb_set_storage_rosternotes(const char *barejid, const char *note);