mcabber/src/commands.c
changeset 1012 7f216b904315
parent 1009 c112423ac012
child 1014 99c5278bf6b8
equal deleted inserted replaced
1011:b5bcc223cf51 1012:7f216b904315
  1566 }
  1566 }
  1567 
  1567 
  1568 static void room_join(gpointer bud, char *arg)
  1568 static void room_join(gpointer bud, char *arg)
  1569 {
  1569 {
  1570   char **paramlst;
  1570   char **paramlst;
  1571   char *roomname, *nick, *pass, *roomname_tmp;
  1571   char *roomname, *nick, *pass;
       
  1572   char *roomname_tmp = NULL;
  1572   char *pass_utf8;
  1573   char *pass_utf8;
  1573 
  1574 
  1574   paramlst = split_arg(arg, 3, 0); // roomid, nickname, password
  1575   paramlst = split_arg(arg, 3, 0); // roomid, nickname, password
  1575   roomname = *paramlst;
  1576   roomname = *paramlst;
  1576   nick = *(paramlst+1);
  1577   nick = *(paramlst+1);
  1577   pass = *(paramlst+2);
  1578   pass = *(paramlst+2);
  1578 
  1579 
       
  1580   if (!roomname)
       
  1581     nick = NULL;
  1579   if (!nick)
  1582   if (!nick)
  1580     pass = NULL;
  1583     pass = NULL;
  1581 
  1584 
  1582   if (!roomname || !strcmp(roomname, ".")) {
  1585   if (!roomname || !strcmp(roomname, ".")) {
  1583     // If the current_buddy is recognized as a room, the room name
  1586     // If the current_buddy is recognized as a room, the room name
  1585     if (!bud || !(buddy_gettype(bud) & ROSTER_TYPE_ROOM)) {
  1588     if (!bud || !(buddy_gettype(bud) & ROSTER_TYPE_ROOM)) {
  1586       scr_LogPrint(LPRINT_NORMAL, "Please specify a room name.");
  1589       scr_LogPrint(LPRINT_NORMAL, "Please specify a room name.");
  1587       free_arg_lst(paramlst);
  1590       free_arg_lst(paramlst);
  1588       return;
  1591       return;
  1589     }
  1592     }
  1590     if (!roomname)
       
  1591       nick = NULL;
       
  1592     roomname = (char*)buddy_getjid(bud);
  1593     roomname = (char*)buddy_getjid(bud);
  1593   } else if (strchr(roomname, '/')) {
  1594   } else if (strchr(roomname, '/')) {
  1594     scr_LogPrint(LPRINT_NORMAL, "Invalid room name.");
  1595     scr_LogPrint(LPRINT_NORMAL, "Invalid room name.");
  1595     free_arg_lst(paramlst);
  1596     free_arg_lst(paramlst);
  1596     return;
  1597     return;
       
  1598   } else {
       
  1599     // The room id has been specified.  Let's convert it and use it.
       
  1600     roomname_tmp = to_utf8(roomname);
       
  1601     mc_strtolower(roomname_tmp);
       
  1602     roomname = roomname_tmp;
  1597   }
  1603   }
  1598 
  1604 
  1599   // If no nickname is provided with the /join command,
  1605   // If no nickname is provided with the /join command,
  1600   // we try to get a default nickname.
  1606   // we try to get a default nickname.
  1601   if (!nick || !*nick)
  1607   if (!nick || !*nick)
  1610     return;
  1616     return;
  1611   }
  1617   }
  1612 
  1618 
  1613   pass_utf8 = to_utf8(pass);
  1619   pass_utf8 = to_utf8(pass);
  1614 
  1620 
  1615   roomname_tmp = g_strdup(roomname);
  1621   jb_room_join(roomname, nick, pass_utf8);
  1616   mc_strtolower(roomname_tmp);
  1622 
  1617   roomname = to_utf8(roomname_tmp);
  1623   scr_LogPrint(LPRINT_LOGNORM, "Sent a join request to <%s>...", roomname);
       
  1624 
  1618   g_free(roomname_tmp);
  1625   g_free(roomname_tmp);
  1619 
       
  1620   jb_room_join(roomname, nick, pass_utf8);
       
  1621 
       
  1622   scr_LogPrint(LPRINT_LOGNORM, "Sent a join request to <%s>...", roomname);
       
  1623 
       
  1624   g_free(roomname);
       
  1625   g_free(nick);
  1626   g_free(nick);
  1626   g_free(pass_utf8);
  1627   g_free(pass_utf8);
  1627   buddylist_build();
  1628   buddylist_build();
  1628   update_roster = TRUE;
  1629   update_roster = TRUE;
  1629   free_arg_lst(paramlst);
  1630   free_arg_lst(paramlst);