comparison mcabber/src/jabglue.c @ 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 ad07c868ff43
children 414fbf558f1e
comparison
equal deleted inserted replaced
582:bd176d6f34af 583:32ae027a3238
912 } 912 }
913 913
914 // Check for departure/arrival 914 // Check for departure/arrival
915 if (!mbnick && mbrole == role_none) { 915 if (!mbnick && mbrole == role_none) {
916 gchar *mbuf; 916 gchar *mbuf;
917 enum { leave=0, kick, ban } how;
918 bool we_left = FALSE;
919
920 if (statuscode == 307)
921 how = kick;
922 else if (statuscode == 301)
923 how = ban;
917 924
918 // If this is a leave, check if it is ourself 925 // If this is a leave, check if it is ourself
919 m = buddy_getnickname(room_elt->data); 926 m = buddy_getnickname(room_elt->data);
927
920 if (m && !strcmp(rname, m)) { 928 if (m && !strcmp(rname, m)) {
921 // _We_ have left! (kicked, banned, etc.) 929 we_left = TRUE; // _We_ have left! (kicked, banned, etc.)
922 gchar *mbuf;
923
924 buddy_setnickname(room_elt->data, NULL); 930 buddy_setnickname(room_elt->data, NULL);
925 buddy_del_all_resources(room_elt->data); 931 buddy_del_all_resources(room_elt->data);
926 932 update_roster = TRUE;
927 if (statuscode == 307) { 933 }
928 if (actorjid) 934
929 mbuf = g_strdup_printf("You have been kicked from %s by <%s>." 935 // The message depends on _who_ left, and _how_
930 "\nReason: %s", roomjid, actorjid, reason); 936 if (how) {
937 gchar *mbuf_end;
938 // Forced leave
939 if (actorjid) {
940 mbuf_end = g_strdup_printf("%s from %s by <%s>.\nReason: %s",
941 (how == ban ? "banned" : "kicked"),
942 roomjid, actorjid,
943 (reason ? reason : "None given"));
944 } else {
945 mbuf_end = g_strdup_printf("%s from %s.",
946 (how == ban ? "banned" : "kicked"),
947 roomjid);
948 }
949 if (we_left)
950 mbuf = g_strdup_printf("You have been %s", mbuf_end);
951 else
952 mbuf = g_strdup_printf("%s has been %s", rname, mbuf_end);
953
954 g_free(mbuf_end);
955 } else {
956 // Natural leave
957 if (we_left) {
958 mbuf = g_strdup_printf("You have left %s", roomjid);
959 } else {
960 if (ustmsg)
961 mbuf = g_strdup_printf("%s has left: %s", rname, ustmsg);
931 else 962 else
932 mbuf = g_strdup_printf("You have been kicked from %s.", roomjid); 963 mbuf = g_strdup_printf("%s has left", rname);
933 } else if (statuscode == 301) {
934 if (actorjid)
935 mbuf = g_strdup_printf("You have been banned from %s by <%s>."
936 "\nReason: %s", roomjid, actorjid, reason);
937 else
938 mbuf = g_strdup_printf("You have been banned from %s.", roomjid);
939 } else {
940 mbuf = g_strdup_printf("You have left %s", roomjid);
941 } 964 }
965 }
966
967 scr_WriteIncomingMessage(roomjid, mbuf, 0,
968 HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG);
969
970 if (log_muc_conf) hlog_write_message(roomjid, 0, FALSE, mbuf);
971
972 if (we_left) {
942 scr_LogPrint(LPRINT_LOGNORM, "%s", mbuf); 973 scr_LogPrint(LPRINT_LOGNORM, "%s", mbuf);
943 scr_WriteIncomingMessage(roomjid, mbuf, 0,
944 HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG);
945 g_free(mbuf); 974 g_free(mbuf);
946 update_roster = TRUE;
947 return; 975 return;
948 } 976 }
949
950 if (ustmsg) mbuf = g_strdup_printf("%s has left: %s", rname, ustmsg);
951 else mbuf = g_strdup_printf("%s has left", rname);
952 scr_WriteIncomingMessage(roomjid, mbuf, 0,
953 HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG);
954 if (log_muc_conf) hlog_write_message(roomjid, 0, FALSE, mbuf);
955 g_free(mbuf); 977 g_free(mbuf);
956 } else if (buddy_getstatus(room_elt->data, rname) == offline && 978 } else if (buddy_getstatus(room_elt->data, rname) == offline &&
957 ust != offline) { 979 ust != offline) {
958 gchar *mbuf; 980 gchar *mbuf;
959 if (buddy_getnickname(room_elt->data) == NULL) { 981 if (buddy_getnickname(room_elt->data) == NULL) {