# HG changeset patch # User Hermitifier # Date 1330503489 -3600 # Node ID a73ce708c2c9b654352e15c0964f8e56ad7e7a18 # Parent a859ed648638579d03b8576135c875969b8cb558 Fix bookmarks losing autojoin attribute diff -r a859ed648638 -r a73ce708c2c9 mcabber/mcabber/commands.c --- a/mcabber/mcabber/commands.c Tue Feb 28 20:26:22 2012 +0100 +++ b/mcabber/mcabber/commands.c Wed Feb 29 09:18:09 2012 +0100 @@ -3059,7 +3059,7 @@ enum room_flagjoins flagjoins = 0; enum room_printstatus printstatus = 0; enum { bm_add = 0, bm_del = 1 } action = 0; - int autojoin = 0; + int autojoin = 0, autojoin_set = 0; int nick_set = 0; if (arg && *arg) { @@ -3073,11 +3073,14 @@ action = bm_add; else if (!strcasecmp(*pp, "del")) action = bm_del; - else if (!strcasecmp(*pp, "-autojoin")) + else if (!strcasecmp(*pp, "-autojoin")) { autojoin = 0; - else if (!strcasecmp(*pp, "+autojoin") || !strcasecmp(*pp, "autojoin")) + autojoin_set = 1; + } else if (!strcasecmp(*pp, "+autojoin") + || !strcasecmp(*pp, "autojoin")) { autojoin = 1; - else if (!strcmp(*pp, "-")) + autojoin_set = 1; + } else if (!strcmp(*pp, "-")) nick_set = 1; else { nick_set = 1; @@ -3096,6 +3099,9 @@ if (!nick) //we are probably bookmarking offline room nick = xmpp_get_bookmark_nick(roomid); } + if (!autojoin_set) { + autojoin = xmpp_get_bookmark_autojoin(roomid); + } printstatus = buddy_getprintstatus(bud); autowhois = buddy_getautowhois(bud); flagjoins = buddy_getflagjoins(bud); diff -r a859ed648638 -r a73ce708c2c9 mcabber/mcabber/xmpp.c --- a/mcabber/mcabber/xmpp.c Tue Feb 28 20:26:22 2012 +0100 +++ b/mcabber/mcabber/xmpp.c Wed Feb 29 09:18:09 2012 +0100 @@ -2179,6 +2179,29 @@ return NULL; } +int xmpp_get_bookmark_autojoin(const char *bjid) +{ + LmMessageNode *x; + + if (!bookmarks || !bjid) + return 0; + + // Walk through the storage bookmark tags + for (x = bookmarks->children ; x; x = x->next) { + // If the node is a conference item, check the jid. + if (x->name && !strcmp(x->name, "conference")) { + const char *fjid = lm_message_node_get_attribute(x, "jid"); + if (fjid && !strcasecmp(bjid, fjid)) { + const char *autojoin; + autojoin = lm_message_node_get_attribute(x, "autojoin"); + if (autojoin && (!strcmp(autojoin, "1") || !strcmp(autojoin, "true"))) + return 1; + return 0; + } + } + } + return 0; +} // xmpp_get_all_storage_bookmarks() // Return a GSList with all storage bookmarks. @@ -2279,7 +2302,7 @@ NULL); if (fjoins) lm_message_node_add_child(x, "flag_joins", strflagjoins[fjoins]); - if (group) + if (group && *group) lm_message_node_add_child(x, "group", group); changed = TRUE; scr_LogPrint(LPRINT_LOGNORM, "Updating bookmarks..."); diff -r a859ed648638 -r a73ce708c2c9 mcabber/mcabber/xmpp.h --- a/mcabber/mcabber/xmpp.h Tue Feb 28 20:26:22 2012 +0100 +++ b/mcabber/mcabber/xmpp.h Wed Feb 29 09:18:09 2012 +0100 @@ -79,6 +79,7 @@ void xmpp_set_storage_rosternotes(const char *barejid, const char *note); guint xmpp_is_bookmarked(const char *bjid); const char *xmpp_get_bookmark_nick(const char *bjid); +int xmpp_get_bookmark_autojoin(const char *bjid); void xmpp_request(const char *fjid, enum iqreq_type reqtype); void request_vcard(const char *bjid);