Mercurial > ~mikael > mcabber > hg
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, |