comparison mcabber/mcabber/xmpp_muc.c @ 1898:e25cec543da1

Fix two MUC issues (reported by VarLog) - Reason sometimes missing after kick/ban (fixed by isbear) - mcabber not realizing it's been kicked
author Mikael Berthe <mikael@lilotux.net>
date Mon, 12 Apr 2010 23:24:20 +0200
parents e6d355e50d7a
children decf94827efe
comparison
equal deleted inserted replaced
1897:efd7c4c34ff2 1898:e25cec543da1
489 buddy_setnickname(room_elt->data, mbnick); 489 buddy_setnickname(room_elt->data, mbnick);
490 nickchange = TRUE; 490 nickchange = TRUE;
491 } 491 }
492 492
493 // Check for departure/arrival 493 // Check for departure/arrival
494 if (!mbnick && ust == offline) { 494 if (statuscode != 303 && ust == offline) {
495 // Somebody is leaving 495 // Somebody is leaving
496 enum { leave=0, kick, ban } how = leave; 496 enum { leave=0, kick, ban } how = leave;
497 bool we_left = FALSE; 497 bool we_left = FALSE;
498 498
499 if (statuscode == 307) 499 if (statuscode == 307)
513 } 513 }
514 514
515 // The message depends on _who_ left, and _how_ 515 // The message depends on _who_ left, and _how_
516 if (how) { 516 if (how) {
517 gchar *mbuf_end; 517 gchar *mbuf_end;
518 gchar *reason_msg = NULL;
518 // Forced leave 519 // Forced leave
519 if (actorjid) { 520 if (actorjid) {
520 mbuf_end = g_strdup_printf("%s from %s by <%s>.\nReason: %s", 521 mbuf_end = g_strdup_printf("%s from %s by <%s>.",
521 (how == ban ? "banned" : "kicked"), 522 (how == ban ? "banned" : "kicked"),
522 roomjid, actorjid, reason); 523 roomjid, actorjid);
523 } else { 524 } else {
524 mbuf_end = g_strdup_printf("%s from %s.", 525 mbuf_end = g_strdup_printf("%s from %s.",
525 (how == ban ? "banned" : "kicked"), 526 (how == ban ? "banned" : "kicked"),
526 roomjid); 527 roomjid);
527 } 528 }
529 if (reason)
530 reason_msg = g_strdup_printf("\nReason: %s", reason);
528 if (we_left) 531 if (we_left)
529 mbuf = g_strdup_printf("You have been %s", mbuf_end); 532 mbuf = g_strdup_printf("You have been %s%s", mbuf_end,
533 reason_msg ? reason_msg : "");
530 else 534 else
531 mbuf = g_strdup_printf("%s has been %s", rname, mbuf_end); 535 mbuf = g_strdup_printf("%s has been %s%s", rname, mbuf_end,
532 536 reason_msg ? reason_msg : "");
537
538 g_free(reason_msg);
533 g_free(mbuf_end); 539 g_free(mbuf_end);
534 } else { 540 } else {
535 // Natural leave 541 // Natural leave
536 if (we_left) { 542 if (we_left) {
537 LmMessageNode *destroynode = lm_message_node_find_child(xmldata, 543 LmMessageNode *destroynode = lm_message_node_find_child(xmldata,