mcabber/src/commands.c
changeset 469 a926523d2392
parent 464 e4840b288be0
child 470 eaa2ad773192
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"))  {