# HG changeset patch # User Mikael Berthe # Date 1474713073 -7200 # Node ID f1eebfdd6db755490db060b98cd743bb51867b97 # Parent f1f24ee1edfca19bd052aa854cffb8eb3e93c56b Improve efficiency with high number of MUC resources diff -r f1f24ee1edfc -r f1eebfdd6db7 mcabber/mcabber/hooks.c --- a/mcabber/mcabber/hooks.c Sat Sep 24 12:30:01 2016 +0200 +++ b/mcabber/mcabber/hooks.c Sat Sep 24 12:31:13 2016 +0200 @@ -568,7 +568,7 @@ roster_setstatus(bjid, rn, prio, status, status_msg, timestamp, role_none, affil_none, NULL); buddylist_build(); - scr_draw_roster(); + update_roster = TRUE; hlog_write_status(bjid, timestamp, status, status_msg); #ifdef MODULES_ENABLE diff -r f1f24ee1edfc -r f1eebfdd6db7 mcabber/mcabber/screen.c --- a/mcabber/mcabber/screen.c Sat Sep 24 12:30:01 2016 +0200 +++ b/mcabber/mcabber/screen.c Sat Sep 24 12:31:13 2016 +0200 @@ -2158,7 +2158,6 @@ unsigned short ismsg, isgrp, ismuc, ishid, isspe; guint isurg; gchar *rline_locale; - GSList *resources, *p_res; bflags = buddy_getflags(BUDDATA(buddy)); btype = buddy_gettype(BUDDATA(buddy)); @@ -2178,17 +2177,22 @@ status = '?'; pending = ' '; - resources = buddy_getresources(BUDDATA(buddy)); - for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) { - guint events = buddy_resource_getevents(BUDDATA(buddy), - p_res ? p_res->data : ""); - if ((events & ROSTER_EVENT_PAUSED) && pending != '+') - pending = '.'; - if (events & ROSTER_EVENT_COMPOSING) - pending = '+'; - g_free(p_res->data); + if (!ismuc) { + // There is currently no chat state support for MUC + GSList *resources = buddy_getresources(BUDDATA(buddy)); + GSList *p_res; + + for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) { + guint events = buddy_resource_getevents(BUDDATA(buddy), + p_res ? p_res->data : ""); + if ((events & ROSTER_EVENT_PAUSED) && pending != '+') + pending = '.'; + if (events & ROSTER_EVENT_COMPOSING) + pending = '+'; + g_free(p_res->data); + } + g_slist_free(resources); } - g_slist_free(resources); // Display message notice if there is a message flag, but not // for unfolded groups. diff -r f1f24ee1edfc -r f1eebfdd6db7 mcabber/mcabber/xmpp_muc.c --- a/mcabber/mcabber/xmpp_muc.c Sat Sep 24 12:30:01 2016 +0200 +++ b/mcabber/mcabber/xmpp_muc.c Sat Sep 24 12:31:13 2016 +0200 @@ -494,7 +494,7 @@ scr_WriteIncomingMessage(roomjid, msg, 0, HBB_PREFIX_INFO, 0); // Send back an unavailable packet xmpp_setstatus(offline, roomjid, "", TRUE); - scr_draw_roster(); + update_roster = TRUE; return; } @@ -748,7 +748,7 @@ cmd_room_whois(room_elt->data, rname, FALSE); } - scr_draw_roster(); + update_roster = TRUE; } void roompresence(gpointer room, void *presencedata)