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")) { |