Mercurial > hg
comparison mcabber/src/jabglue.c @ 470:eaa2ad773192
Add "/room nick"
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sun, 02 Oct 2005 00:37:16 +0200 |
parents | a926523d2392 |
children | 75442262c082 |
comparison
equal
deleted
inserted
replaced
469:a926523d2392 | 470:eaa2ad773192 |
---|---|
474 // Join a MUC room | 474 // Join a MUC room |
475 void jb_room_join(const char *room, const char *nickname) | 475 void jb_room_join(const char *room, const char *nickname) |
476 { | 476 { |
477 xmlnode x, y; | 477 xmlnode x, y; |
478 gchar *roomid, *utf8_nickname; | 478 gchar *roomid, *utf8_nickname; |
479 GSList *roster_usr; | |
480 | 479 |
481 if (!online || !room || !nickname) return; | 480 if (!online || !room || !nickname) return; |
482 | 481 |
483 utf8_nickname = to_utf8(nickname); | 482 utf8_nickname = to_utf8(nickname); |
484 roomid = g_strdup_printf("%s/%s", room, utf8_nickname); | 483 roomid = g_strdup_printf("%s/%s", room, utf8_nickname); |
487 scr_LogPrint(LPRINT_NORMAL, "<%s/%s> is not a valid Jabber room", room, | 486 scr_LogPrint(LPRINT_NORMAL, "<%s/%s> is not a valid Jabber room", room, |
488 nickname); | 487 nickname); |
489 g_free(roomid); | 488 g_free(roomid); |
490 return; | 489 return; |
491 } | 490 } |
492 | |
493 // We need to save the nickname for future use | |
494 roster_usr = roster_add_user(room, NULL, NULL, ROSTER_TYPE_ROOM); | |
495 if (roster_usr) | |
496 buddy_setnickname(roster_usr->data, nickname); | |
497 | 491 |
498 // Send the XML request | 492 // Send the XML request |
499 x = jutil_presnew(JPACKET__UNKNOWN, 0, 0); | 493 x = jutil_presnew(JPACKET__UNKNOWN, 0, 0); |
500 xmlnode_put_attrib(x, "from", jid_full(jc->user)); | 494 xmlnode_put_attrib(x, "from", jid_full(jc->user)); |
501 xmlnode_put_attrib(x, "to", roomid); | 495 xmlnode_put_attrib(x, "to", roomid); |
1102 (newname_noutf8 ? newname_noutf8 : "(?)")); | 1096 (newname_noutf8 ? newname_noutf8 : "(?)")); |
1103 scr_WriteIncomingMessage(r, mbuf, 0, HBB_PREFIX_INFO); | 1097 scr_WriteIncomingMessage(r, mbuf, 0, HBB_PREFIX_INFO); |
1104 g_free(mbuf); | 1098 g_free(mbuf); |
1105 if (newname_noutf8) { | 1099 if (newname_noutf8) { |
1106 buddy_resource_setname(room_elt->data, rname, newname_noutf8); | 1100 buddy_resource_setname(room_elt->data, rname, newname_noutf8); |
1101 m = buddy_getnickname(room_elt->data); | |
1102 if (m && !strcmp(rname, m)) | |
1103 buddy_setnickname(room_elt->data, newname_noutf8); | |
1107 g_free(newname_noutf8); | 1104 g_free(newname_noutf8); |
1108 } | 1105 } |
1109 } | 1106 } |
1110 } | 1107 } |
1111 | 1108 |
1114 gchar *mbuf = g_strdup_printf("%s has left", rname); | 1111 gchar *mbuf = g_strdup_printf("%s has left", rname); |
1115 scr_WriteIncomingMessage(r, mbuf, 0, HBB_PREFIX_INFO); | 1112 scr_WriteIncomingMessage(r, mbuf, 0, HBB_PREFIX_INFO); |
1116 g_free(mbuf); | 1113 g_free(mbuf); |
1117 } else if (buddy_getstatus(room_elt->data, rname) == offline && | 1114 } else if (buddy_getstatus(room_elt->data, rname) == offline && |
1118 ust != offline) { | 1115 ust != offline) { |
1119 gchar *mbuf = g_strdup_printf("%s has joined", rname); | 1116 gchar *mbuf; |
1117 if (buddy_getnickname(room_elt->data) == NULL) { | |
1118 buddy_setnickname(room_elt->data, rname); | |
1119 mbuf = g_strdup_printf("You have joined as \"%s\"", rname); | |
1120 } else { | |
1121 mbuf = g_strdup_printf("%s has joined", rname); | |
1122 } | |
1120 scr_WriteIncomingMessage(r, mbuf, 0, HBB_PREFIX_INFO); | 1123 scr_WriteIncomingMessage(r, mbuf, 0, HBB_PREFIX_INFO); |
1121 g_free(mbuf); | 1124 g_free(mbuf); |
1122 } | 1125 } |
1123 | 1126 |
1124 // Update room member status | 1127 // Update room member status |