changeset 583:32ae027a3238

MUC: clean up departure message code A message is now displayed when a buddy is banned/kicked.
author Mikael Berthe <mikael@lilotux.net>
date Tue, 06 Dec 2005 21:13:03 +0100
parents bd176d6f34af
children 414fbf558f1e
files mcabber/src/jabglue.c
diffstat 1 files changed, 47 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/jabglue.c	Mon Dec 05 23:56:29 2005 +0100
+++ b/mcabber/src/jabglue.c	Tue Dec 06 21:13:03 2005 +0100
@@ -914,44 +914,66 @@
   // Check for departure/arrival
   if (!mbnick && mbrole == role_none) {
     gchar *mbuf;
+    enum { leave=0, kick, ban } how;
+    bool we_left = FALSE;
+
+    if (statuscode == 307)
+      how = kick;
+    else if (statuscode == 301)
+      how = ban;
 
     // If this is a leave, check if it is ourself
     m = buddy_getnickname(room_elt->data);
+
     if (m && !strcmp(rname, m)) {
-      // _We_ have left! (kicked, banned, etc.)
-      gchar *mbuf;
-
+      we_left = TRUE; // _We_ have left! (kicked, banned, etc.)
       buddy_setnickname(room_elt->data, NULL);
       buddy_del_all_resources(room_elt->data);
+      update_roster = TRUE;
+    }
 
-      if (statuscode == 307) {
-        if (actorjid)
-          mbuf = g_strdup_printf("You have been kicked from %s by <%s>."
-                                 "\nReason: %s", roomjid, actorjid, reason);
+    // The message depends on _who_ left, and _how_
+    if (how) {
+      gchar *mbuf_end;
+      // Forced leave
+      if (actorjid) {
+        mbuf_end = g_strdup_printf("%s from %s by <%s>.\nReason: %s",
+                                   (how == ban ? "banned" : "kicked"),
+                                   roomjid, actorjid,
+                                   (reason ? reason : "None given"));
+      } else {
+        mbuf_end = g_strdup_printf("%s from %s.",
+                                   (how == ban ? "banned" : "kicked"),
+                                   roomjid);
+      }
+      if (we_left)
+        mbuf = g_strdup_printf("You have been %s", mbuf_end);
+      else
+        mbuf = g_strdup_printf("%s has been %s", rname, mbuf_end);
+
+      g_free(mbuf_end);
+    } else {
+      // Natural leave
+      if (we_left) {
+        mbuf = g_strdup_printf("You have left %s", roomjid);
+      } else {
+        if (ustmsg)
+          mbuf = g_strdup_printf("%s has left: %s", rname, ustmsg);
         else
-          mbuf = g_strdup_printf("You have been kicked from %s.", roomjid);
-      } else if (statuscode == 301) {
-        if (actorjid)
-          mbuf = g_strdup_printf("You have been banned from %s by <%s>."
-                                 "\nReason: %s", roomjid, actorjid, reason);
-        else
-          mbuf = g_strdup_printf("You have been banned from %s.", roomjid);
-      } else {
-        mbuf = g_strdup_printf("You have left %s", roomjid);
+          mbuf = g_strdup_printf("%s has left", rname);
       }
+    }
+
+    scr_WriteIncomingMessage(roomjid, mbuf, 0,
+                             HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG);
+
+    if (log_muc_conf) hlog_write_message(roomjid, 0, FALSE, mbuf);
+
+    if (we_left) {
       scr_LogPrint(LPRINT_LOGNORM, "%s", mbuf);
-      scr_WriteIncomingMessage(roomjid, mbuf, 0,
-                               HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG);
       g_free(mbuf);
-      update_roster = TRUE;
       return;
     }
-
-    if (ustmsg)  mbuf = g_strdup_printf("%s has left: %s", rname, ustmsg);
-    else         mbuf = g_strdup_printf("%s has left", rname);
-    scr_WriteIncomingMessage(roomjid, mbuf, 0,
-                             HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG);
-    if (log_muc_conf) hlog_write_message(roomjid, 0, FALSE, mbuf);
     g_free(mbuf);
   } else if (buddy_getstatus(room_elt->data, rname) == offline &&
              ust != offline) {