# HG changeset patch # User Mikael Berthe # Date 1133899983 -3600 # Node ID 32ae027a3238995365e370d14115eeadfe776e24 # Parent bd176d6f34af5d0472f621d18ccda70a92982941 MUC: clean up departure message code A message is now displayed when a buddy is banned/kicked. diff -r bd176d6f34af -r 32ae027a3238 mcabber/src/jabglue.c --- 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) {