changeset 2280:f1eebfdd6db7

Improve efficiency with high number of MUC resources
author Mikael Berthe <mikael@lilotux.net>
date Sat, 24 Sep 2016 12:31:13 +0200
parents f1f24ee1edfc
children 1bb9002801e5
files mcabber/mcabber/hooks.c mcabber/mcabber/screen.c mcabber/mcabber/xmpp_muc.c
diffstat 3 files changed, 18 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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.
--- 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)