Mercurial > pidgin.yaz
diff libpurple/protocols/jabber/presence.c @ 26928:d0a049ede31e
Only call jabber_caps_get_info if we don't have all the information we want.
Has the pleasant side-effect of *not* polling for adhoc commands every time
we get presence (this should make MattJ happy).
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Fri, 08 May 2009 02:38:39 +0000 |
parents | 33f98d662db8 |
children | e7819fa37224 |
line wrap: on
line diff
--- a/libpurple/protocols/jabber/presence.c Thu May 07 23:46:11 2009 +0000 +++ b/libpurple/protocols/jabber/presence.c Fri May 08 02:38:39 2009 +0000 @@ -854,13 +854,26 @@ /* v1.3 uses: node, ver, and optionally ext. * v1.5 uses: node, ver, and hash. */ if (node && *node && ver && *ver) { - JabberPresenceCapabilities *userdata = g_new0(JabberPresenceCapabilities, 1); - userdata->js = js; - userdata->jb = jb; - userdata->from = g_strdup(from); - jabber_caps_get_info(js, from, node, ver, hash, ext, - (jabber_caps_get_info_cb)jabber_presence_set_capabilities, - userdata); + gchar **exts = ext && *ext ? g_strsplit(ext, " ", -1) : NULL; + jbr = jabber_buddy_find_resource(jb, jid->resource); + + /* Look it up if we don't already have all this information */ + if (!jbr || !jbr->caps.info || + !g_str_equal(node, jbr->caps.info->tuple.node) || + !g_str_equal(ver, jbr->caps.info->tuple.ver) || + !purple_strequal(hash, jbr->caps.info->tuple.hash) || + !jabber_caps_exts_known(jbr->caps.info, (gchar **)exts)) { + JabberPresenceCapabilities *userdata = g_new0(JabberPresenceCapabilities, 1); + userdata->js = js; + userdata->jb = jb; + userdata->from = g_strdup(from); + jabber_caps_get_info(js, from, node, ver, hash, exts, + (jabber_caps_get_info_cb)jabber_presence_set_capabilities, + userdata); + } else { + if (exts) + g_strfreev(exts); + } } }