Mercurial > ~mikael > mcabber > hg
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")) { |