Mercurial > hg
diff mcabber/src/jabglue.c @ 532:2ac8d8e49e81
Send status changes to chatrooms
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Thu, 24 Nov 2005 00:03:37 +0100 |
parents | aee9a279a0f3 |
children | c478e8f7f074 |
line wrap: on
line diff
--- a/mcabber/src/jabglue.c Tue Nov 22 23:36:12 2005 +0100 +++ b/mcabber/src/jabglue.c Thu Nov 24 00:03:37 2005 +0100 @@ -57,6 +57,11 @@ STATE_LOGGED } jstate; +struct T_presence { + enum imstatus st; + const char *msg; +}; + void statehandler(jconn, int); void packethandler(jconn, jpacket); @@ -263,11 +268,32 @@ return mystatusmsg; } +static void roompresence(gpointer room, void *presencedata) +{ + const char *jid; + const char *nickname; + char *to; + struct T_presence *pres = presencedata; + + if (!buddy_getresources(room)) // FIXME: that's a memory leak + return; + + jid = buddy_getjid(room); + if (!jid) return; + nickname = buddy_getnickname(room); + if (!nickname) return; + + to = g_strdup_printf("%s/%s", jid, nickname); + jb_setstatus(pres->st, to, pres->msg); + g_free(to); +} + void jb_setstatus(enum imstatus st, const char *recipient, const char *msg) { xmlnode x; gchar *utf8_msg; unsigned int prio; + struct T_presence room_presence; if (!online) return; @@ -347,8 +373,12 @@ // If we didn't change our _global_ status, we are done if (recipient) return; - // Buddy per buddy invisibility handling - //sendvisibility(); + // Send presence to chatrooms + if (st != invisible) { + room_presence.st = st; + room_presence.msg = msg; + foreach_buddy(ROSTER_TYPE_ROOM, &roompresence, &room_presence); + } // We'll need to update the roster if we switch to/from offline because // we don't know the presences of buddies when offline...