summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Sluift/client.cpp')
-rw-r--r--Sluift/client.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/Sluift/client.cpp b/Sluift/client.cpp
index 75f675d..ae2f610 100644
--- a/Sluift/client.cpp
+++ b/Sluift/client.cpp
@@ -674,61 +674,61 @@ SLUIFT_LUA_FUNCTION(Client, get_next_event) {
return 1;
}
SLUIFT_LUA_FUNCTION_WITH_HELP(
Client, add_contact,
"Add a contact to the contact list.",
"self\n",
"jid The JID of the contact to add\n"
"name The name to use in the contact list\n"
"groups An array of group names to add the contact to\n") {
Sluift::globals.eventLoop.runOnce();
SluiftClient* client = getClient(L);
RosterItemPayload item;
int timeout = getGlobalTimeout(L);
if (lua_type(L, 2) == LUA_TTABLE) {
lua_getfield(L, 2, "jid");
const char* rawJID = lua_tostring(L, -1);
if (rawJID) {
item.setJID(std::string(rawJID));
}
lua_getfield(L, 2, "name");
const char* rawName = lua_tostring(L, -1);
if (rawName) {
item.setName(rawName);
}
lua_getfield(L, 2, "groups");
if (!lua_isnil(L, -1)) {
if (lua_type(L, -1) == LUA_TTABLE) {
- for (size_t i = 1; i <= lua_objlen(L, -1); ++i) {
+ for (size_t i = 1; i <= lua_rawlen(L, -1); ++i) {
lua_rawgeti(L, -1, boost::numeric_cast<int>(i));
const char* rawGroup = lua_tostring(L, -1);
if (rawGroup) {
item.addGroup(rawGroup);
}
lua_pop(L, 1);
}
}
else {
throw Lua::Exception("Groups should be a table");
}
}
}
else {
item.setJID(Lua::checkString(L, 2));
}
client->getRoster(timeout);
if (!client->getClient()->getRoster()->containsJID(item.getJID())) {
RosterPayload::ref roster = std::make_shared<RosterPayload>();
roster->addItem(item);
Sluift::Response response = client->sendVoidRequest(
SetRosterRequest::create(roster, client->getClient()->getIQRouter()), timeout);
if (response.error) {
return response.convertToLuaResult(L);
}
}
client->getClient()->getSubscriptionManager()->requestSubscription(item.getJID());
lua_pushboolean(L, true);