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