comparison mcabber/src/commands.c @ 469:a926523d2392

Use UTF8 to handle resources and room nicknames
author Mikael Berthe <mikael@lilotux.net>
date Sat, 01 Oct 2005 23:17:05 +0200
parents e4840b288be0
children eaa2ad773192
comparison
equal deleted inserted replaced
468:644b8bf9ca4d 469:a926523d2392
928 { 928 {
929 if (!strncasecmp(arg, "send ", 5)) { 929 if (!strncasecmp(arg, "send ", 5)) {
930 gchar *buffer; 930 gchar *buffer;
931 for (arg += 5; *arg && *arg == ' '; arg++) 931 for (arg += 5; *arg && *arg == ' '; arg++)
932 ; 932 ;
933 buffer = g_locale_to_utf8(arg, -1, NULL, NULL, NULL); 933 buffer = to_utf8(arg);
934 if (!buffer) { 934 if (!buffer) {
935 scr_LogPrint(LPRINT_NORMAL, "Conversion error in XML string"); 935 scr_LogPrint(LPRINT_NORMAL, "Conversion error in XML string");
936 return; 936 return;
937 } 937 }
938 scr_LogPrint(LPRINT_NORMAL, "Sending XML string"); 938 scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
954 } 954 }
955 955
956 bud = BUDDATA(current_buddy); 956 bud = BUDDATA(current_buddy);
957 957
958 if (!strncasecmp(arg, "join", 4)) { 958 if (!strncasecmp(arg, "join", 4)) {
959 GSList *roster_usr; 959 char *roomname, *nick;
960 char *roomname, *nick, *roomid;
961 960
962 arg += 4; 961 arg += 4;
963 if (*arg++ != ' ') { 962 if (*arg++ != ' ') {
964 scr_LogPrint(LPRINT_NORMAL, "Wrong or missing parameter"); 963 scr_LogPrint(LPRINT_NORMAL, "Wrong or missing parameter");
965 return; 964 return;
986 if (!*nick) { 985 if (!*nick) {
987 scr_LogPrint(LPRINT_NORMAL, "Missing parameter (nickname)"); 986 scr_LogPrint(LPRINT_NORMAL, "Missing parameter (nickname)");
988 g_free(roomname); 987 g_free(roomname);
989 return; 988 return;
990 } 989 }
991 // room syntax: "room@server/nick" 990
992 roomid = g_strdup_printf("%s/%s", roomname, nick); 991 mc_strtolower(roomname);
993 if (check_jid_syntax(roomid)) { 992 jb_room_join(roomname, nick);
994 scr_LogPrint(LPRINT_NORMAL, "<%s> is not a valid Jabber room", roomid);
995 g_free(roomname);
996 g_free(roomid);
997 return;
998 }
999
1000 mc_strtolower(roomid);
1001 jb_room_join(roomid);
1002
1003 // We need to save the nickname for future use
1004 roster_usr = roster_add_user(roomname, NULL, NULL, ROSTER_TYPE_ROOM);
1005 if (roster_usr)
1006 buddy_setnickname(roster_usr->data, nick);
1007 993
1008 g_free(roomname); 994 g_free(roomname);
1009 g_free(roomid);
1010 buddylist_build(); 995 buddylist_build();
1011 update_roster = TRUE; 996 update_roster = TRUE;
1012 } else if (!strncasecmp(arg, "leave", 5)) { 997 } else if (!strncasecmp(arg, "leave", 5)) {
1013 char *roomid; 998 gchar *roomid, *utf8_nickname;
1014 arg += 5; 999 arg += 5;
1015 for (; *arg && *arg == ' '; arg++) 1000 for (; *arg && *arg == ' '; arg++)
1016 ; 1001 ;
1017 if (!(buddy_gettype(bud) & ROSTER_TYPE_ROOM)) { 1002 if (!(buddy_gettype(bud) & ROSTER_TYPE_ROOM)) {
1018 scr_LogPrint(LPRINT_NORMAL, "This isn't a chatroom"); 1003 scr_LogPrint(LPRINT_NORMAL, "This isn't a chatroom");
1019 return; 1004 return;
1020 } 1005 }
1021 roomid = g_strdup_printf("%s/%s", buddy_getjid(bud), 1006 utf8_nickname = to_utf8(buddy_getnickname(bud));
1022 buddy_getnickname(bud)); 1007 roomid = g_strdup_printf("%s/%s", buddy_getjid(bud), utf8_nickname);
1023 jb_setstatus(offline, roomid, arg); 1008 jb_setstatus(offline, roomid, arg);
1009 g_free(utf8_nickname);
1024 g_free(roomid); 1010 g_free(roomid);
1025 buddy_setnickname(bud, NULL); 1011 buddy_setnickname(bud, NULL);
1026 buddy_del_all_resources(bud); 1012 buddy_del_all_resources(bud);
1027 scr_LogPrint(LPRINT_NORMAL, "You have left %s", buddy_getjid(bud)); 1013 scr_LogPrint(LPRINT_NORMAL, "You have left %s", buddy_getjid(bud));
1028 } else if (!strcasecmp(arg, "names")) { 1014 } else if (!strcasecmp(arg, "names")) {