Merge remote-tracking branch 'sarang/twitter-backend'

This commit is contained in:
Jan Kaluza 2012-08-13 15:22:23 +02:00
commit ff23ea7847
21 changed files with 154 additions and 103 deletions

View file

@ -32,16 +32,17 @@ void CreateFriendRequest::run()
void CreateFriendRequest::finalize()
{
Error error;
if(!success) {
std::string error;
twitObj->getLastCurlError(error);
LOG4CXX_ERROR(logger, user << " - Curl error: " << error)
std::string curlerror;
twitObj->getLastCurlError(curlerror);
error.setMessage(curlerror);
LOG4CXX_ERROR(logger, user << " - Curl error: " << curlerror)
callBack(user, friendInfo, profileImg, error);
} else {
std::string error;
error = getErrorMessage(replyMsg);
if(error.length()) {
LOG4CXX_ERROR(logger, user << " - " << error)
if(error.getMessage().length()) {
LOG4CXX_ERROR(logger, user << " - " << error.getMessage())
}
else LOG4CXX_INFO(logger, user << ": Now following " << frnd)
callBack(user, friendInfo, profileImg, error);

View file

@ -18,14 +18,14 @@ class CreateFriendRequest : public Thread
std::string user;
std::string frnd;
std::string replyMsg;
boost::function< void (std::string&, User&, std::string &, std::string&) > callBack;
boost::function< void (std::string&, User&, std::string &, Error&) > callBack;
User friendInfo;
std::string profileImg;
bool success;
public:
CreateFriendRequest(twitCurl *obj, const std::string &_user, const std::string & _frnd,
boost::function< void (std::string&, User&, std::string &, std::string&) > cb) {
boost::function< void (std::string&, User&, std::string &, Error&) > cb) {
twitObj = obj->clone();
user = _user;
frnd = _frnd;

View file

@ -18,15 +18,16 @@ void DestroyFriendRequest::run()
void DestroyFriendRequest::finalize()
{
Error error;
if(!success) {
std::string error;
twitObj->getLastCurlError(error);
LOG4CXX_ERROR(logger, user << " Curl error: " << error)
std::string curlerror;
twitObj->getLastCurlError(curlerror);
error.setMessage(curlerror);
LOG4CXX_ERROR(logger, user << " Curl error: " << curlerror)
callBack(user, friendInfo, error);
} else {
std::string error;
error = getErrorMessage(replyMsg);
if(error.length()) LOG4CXX_ERROR(logger, user << " - " << error)
if(error.getMessage().length()) LOG4CXX_ERROR(logger, user << " - " << error.getMessage())
callBack(user, friendInfo, error);
}
}

View file

@ -18,13 +18,13 @@ class DestroyFriendRequest : public Thread
std::string user;
std::string frnd;
std::string replyMsg;
boost::function< void (std::string&, User&, std::string&) > callBack;
boost::function< void (std::string&, User&, Error&) > callBack;
User friendInfo;
bool success;
public:
DestroyFriendRequest(twitCurl *obj, const std::string &_user, const std::string & _frnd,
boost::function< void (std::string&, User&, std::string&) > cb) {
boost::function< void (std::string&, User&, Error&) > cb) {
twitObj = obj->clone();
user = _user;
frnd = _frnd;

View file

@ -16,13 +16,16 @@ void DirectMessageRequest::run()
void DirectMessageRequest::finalize()
{
Error error;
if(!success) {
twitObj->getLastCurlError( replyMsg );
LOG4CXX_ERROR(logger, user << " Curl error: " << replyMsg);
callBack(user, username, messages, replyMsg);
std::string curlerror;
twitObj->getLastCurlError(curlerror);
error.setMessage(curlerror);
LOG4CXX_ERROR(logger, user << " Curl error: " << curlerror);
callBack(user, username, messages, error);
} else {
std::string error = getErrorMessage(replyMsg);
if(error.length()) LOG4CXX_ERROR(logger, user << " - " << error)
error = getErrorMessage(replyMsg);
if(error.getMessage().length()) LOG4CXX_ERROR(logger, user << " - " << error.getMessage())
else LOG4CXX_INFO(logger, user << " - " << replyMsg)
callBack(user, username, messages, error);
}

View file

@ -18,13 +18,13 @@ class DirectMessageRequest : public Thread
std::string user;
std::string username;
std::string replyMsg;
boost::function< void (std::string&, std::string &, std::vector<DirectMessage>&, std::string&) > callBack;
boost::function< void (std::string&, std::string &, std::vector<DirectMessage>&, Error&) > callBack;
std::vector<DirectMessage> messages;
bool success;
public:
DirectMessageRequest(twitCurl *obj, const std::string &_user, const std::string & _username, const std::string &_data,
boost::function< void (std::string&, std::string &, std::vector<DirectMessage>&, std::string&) > cb) {
boost::function< void (std::string&, std::string &, std::vector<DirectMessage>&, Error&) > cb) {
twitObj = obj->clone();
data = _data;
user = _user;

View file

@ -35,13 +35,16 @@ void FetchFriends::run()
void FetchFriends::finalize()
{
Error error;
if(!success) {
twitObj->getLastCurlError( replyMsg );
LOG4CXX_ERROR(logger, user << " - " << replyMsg)
callBack(user, friends, friendAvatars, replyMsg);
std::string curlerror;
twitObj->getLastCurlError(curlerror);
error.setMessage(curlerror);
LOG4CXX_ERROR(logger, user << " - " << curlerror)
callBack(user, friends, friendAvatars, error);
} else {
std::string error = getErrorMessage(replyMsg);
if(error.length()) LOG4CXX_ERROR(logger, user << " - " << error)
error = getErrorMessage(replyMsg);
if(error.getMessage().length()) LOG4CXX_ERROR(logger, user << " - " << error.getMessage())
callBack(user, friends, friendAvatars, error);
}
}

View file

@ -21,11 +21,11 @@ class FetchFriends : public Thread
std::vector<User> friends;
std::vector<std::string> friendAvatars;
bool success;
boost::function< void (std::string, std::vector<User> &, std::vector<std::string> &, std::string) > callBack;
boost::function< void (std::string, std::vector<User> &, std::vector<std::string> &, Error) > callBack;
public:
FetchFriends(twitCurl *obj, const std::string &_user,
boost::function< void (std::string, std::vector<User> &, std::vector<std::string> &, std::string) > cb) {
boost::function< void (std::string, std::vector<User> &, std::vector<std::string> &, Error) > cb) {
twitObj = obj->clone();
user = _user;
callBack = cb;

View file

@ -20,10 +20,10 @@ void PINExchangeProcess::finalize()
twitObj->getLastWebResponse(replyMsg);
}
std::string error = getErrorMessage(replyMsg);
if(error.length()) {
LOG4CXX_ERROR(logger, user << ": Error while exchanging PIN for Access Token! " << error)
np->handleMessage(user, "twitter-account", error);
Error error = getErrorMessage(replyMsg);
if(error.getMessage().length()) {
LOG4CXX_ERROR(logger, user << ": Error while exchanging PIN for Access Token! " << error.getMessage())
np->handleMessage(user, "twitter-account", error.getMessage());
np->handleLogoutRequest(user, "");
return;
}

View file

@ -12,13 +12,15 @@ void ProfileImageRequest::run()
void ProfileImageRequest::finalize()
{
Error errResponse;
if(!success) {
LOG4CXX_ERROR(logger, user << " - " << error)
img = "";
callBack(user, buddy, img, reqID, error);
errResponse.setMessage(error);
callBack(user, buddy, img, reqID, errResponse);
} else {
LOG4CXX_INFO(logger, user << " - " << callbackdata);
img = callbackdata;
callBack(user, buddy, img, reqID, error);
callBack(user, buddy, img, reqID, errResponse);
}
}

View file

@ -22,7 +22,7 @@ class ProfileImageRequest : public Thread
std::string url;
std::string img;
unsigned int reqID;
boost::function< void (std::string&, std::string&, std::string&, int, std::string&) > callBack;
boost::function< void (std::string&, std::string&, std::string&, int, Error&) > callBack;
std::string ip, port, puser, ppasswd;
@ -33,7 +33,7 @@ class ProfileImageRequest : public Thread
public:
ProfileImageRequest(Config *config, const std::string &_user, const std::string &_buddy, const std::string &_url, unsigned int _reqID,
boost::function< void (std::string&, std::string&, std::string&, int, std::string&) > cb) {
boost::function< void (std::string&, std::string&, std::string&, int, Error&) > cb) {
if(CONFIG_HAS_KEY(config,"proxy.server")) {
ip = CONFIG_STRING(config,"proxy.server");

View file

@ -8,15 +8,17 @@ void RetweetRequest::run()
void RetweetRequest::finalize()
{
replyMsg = "";
Error error;
if(!success) {
twitObj->getLastCurlError( replyMsg );
LOG4CXX_ERROR(logger, user << " Curl error: " << replyMsg)
callBack(user, replyMsg);
std::string curlerror;
twitObj->getLastCurlError(curlerror);
error.setMessage(curlerror);
LOG4CXX_ERROR(logger, user << " Curl error: " << curlerror)
callBack(user, error);
} else {
twitObj->getLastWebResponse( replyMsg );
std::string error = getErrorMessage( replyMsg );
if(error.length()) LOG4CXX_ERROR(logger, user << " - " << error)
twitObj->getLastWebResponse(replyMsg);
error = getErrorMessage(replyMsg);
if(error.getMessage().length()) LOG4CXX_ERROR(logger, user << " - " << error.getMessage())
else LOG4CXX_INFO(logger, user << " " << replyMsg);
callBack(user, error);
}

View file

@ -18,11 +18,11 @@ class RetweetRequest : public Thread
std::string user;
std::string replyMsg;
bool success;
boost::function < void (std::string&, std::string &) > callBack;
boost::function < void (std::string&, Error&) > callBack;
public:
RetweetRequest(twitCurl *obj, const std::string &_user, const std::string &_data,
boost::function < void (std::string &, std::string &) > _cb) {
boost::function < void (std::string &, Error&) > _cb) {
twitObj = obj->clone();
data = _data;
user = _user;

View file

@ -14,13 +14,16 @@ void StatusUpdateRequest::run()
void StatusUpdateRequest::finalize()
{
Error error;
if(!success) {
twitObj->getLastCurlError( replyMsg );
LOG4CXX_ERROR(logger, user << " - Curl error: " << replyMsg );
callBack(user, replyMsg);
std::string curlerror;
twitObj->getLastCurlError(curlerror);
error.setMessage(curlerror);
LOG4CXX_ERROR(logger, user << " - Curl error: " << curlerror);
callBack(user, error);
} else {
std::string error = getErrorMessage(replyMsg);
if(error.length()) LOG4CXX_ERROR(logger, user << " - " << error)
error = getErrorMessage(replyMsg);
if(error.getMessage().length()) LOG4CXX_ERROR(logger, user << " - " << error.getMessage())
else LOG4CXX_INFO(logger, "Updated status for " << user << ": " << data);
callBack(user, error);
}

View file

@ -3,6 +3,7 @@
#include "transport/threadpool.h"
#include "../libtwitcurl/twitcurl.h"
#include "../TwitterResponseParser.h"
#include "transport/networkplugin.h"
#include "transport/logging.h"
#include <boost/function.hpp>
@ -16,12 +17,12 @@ class StatusUpdateRequest : public Thread
std::string data;
std::string user;
std::string replyMsg;
boost::function<void (std::string& user, std::string& errMsg)> callBack;
boost::function<void (std::string& user, Error& errMsg)> callBack;
bool success;
public:
StatusUpdateRequest(twitCurl *obj, const std::string &_user, const std::string &_data,
boost::function<void (std::string& user, std::string& errMsg)> cb) {
boost::function<void (std::string& user, Error& errMsg)> cb) {
twitObj = obj->clone();
data = _data;
user = _user;

View file

@ -17,13 +17,16 @@ void TimelineRequest::run()
void TimelineRequest::finalize()
{
Error error;
if(!success) {
twitObj->getLastCurlError( replyMsg );
LOG4CXX_ERROR(logger, user << " - Curl error: " << replyMsg)
callBack(user, userRequested, tweets, replyMsg);
std::string curlerror;
twitObj->getLastCurlError(curlerror);
error.setMessage(curlerror);
LOG4CXX_ERROR(logger, user << " - Curl error: " << curlerror)
callBack(user, userRequested, tweets, error);
} else {
std::string error = getErrorMessage(replyMsg);
if(error.length()) LOG4CXX_ERROR(logger, user << " - " << error)
error = getErrorMessage(replyMsg);
if(error.getMessage().length()) LOG4CXX_ERROR(logger, user << " - " << error.getMessage())
callBack(user, userRequested, tweets, error);
}
}

View file

@ -19,12 +19,12 @@ class TimelineRequest : public Thread
std::string replyMsg;
std::string since_id;
bool success;
boost::function< void (std::string&, std::string&, std::vector<Status> &, std::string&) > callBack;
boost::function< void (std::string&, std::string&, std::vector<Status> &, Error&) > callBack;
std::vector<Status> tweets;
public:
TimelineRequest(twitCurl *obj, const std::string &_user, const std::string &_user2, const std::string &_since_id,
boost::function< void (std::string&, std::string&, std::vector<Status> &, std::string&) > cb) {
boost::function< void (std::string&, std::string&, std::vector<Status> &, Error&) > cb) {
twitObj = obj->clone();
user = _user;
userRequested = _user2;

View file

@ -533,11 +533,11 @@ std::string TwitterPlugin::getMostRecentDMID(const std::string user)
}
/************************************** Twitter response functions **********************************/
void TwitterPlugin::statusUpdateResponse(std::string &user, std::string &errMsg)
void TwitterPlugin::statusUpdateResponse(std::string &user, Error &errMsg)
{
if(errMsg.length()) {
if(errMsg.getMessage().length()) {
handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
errMsg, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
errMsg.getMessage(), userdb[user].twitterMode == CHATROOM ? adminNickName : "");
} else {
handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
"Status Update successful", userdb[user].twitterMode == CHATROOM ? adminNickName : "");
@ -561,9 +561,9 @@ void TwitterPlugin::clearRoster(const std::string user)
userdb[user].buddies.clear();
}
void TwitterPlugin::populateRoster(std::string &user, std::vector<User> &friends, std::vector<std::string> &friendAvatars, std::string &errMsg)
void TwitterPlugin::populateRoster(std::string &user, std::vector<User> &friends, std::vector<std::string> &friendAvatars, Error &errMsg)
{
if(errMsg.length() == 0)
if(errMsg.getMessage().length() == 0)
{
for(int i=0 ; i<friends.size() ; i++) {
userdb[user].buddies.insert(friends[i].getScreenName());
@ -584,14 +584,14 @@ void TwitterPlugin::populateRoster(std::string &user, std::vector<User> &friends
userdb[user].twitterMode == CHATROOM ? adminNickName : "");*/
}
} else handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
std::string("Error populating roster - ") + errMsg, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
std::string("Error populating roster - ") + errMsg.getMessage(), userdb[user].twitterMode == CHATROOM ? adminNickName : "");
if(userdb[user].twitterMode == CHATROOM) handleParticipantChanged(user, userdb[user].nickName, adminChatRoom, 0, pbnetwork::STATUS_ONLINE);
}
void TwitterPlugin::displayFriendlist(std::string &user, std::vector<User> &friends, std::vector<std::string> &friendAvatars, std::string &errMsg)
void TwitterPlugin::displayFriendlist(std::string &user, std::vector<User> &friends, std::vector<std::string> &friendAvatars, Error &errMsg)
{
if(errMsg.length() == 0)
if(errMsg.getMessage().length() == 0)
{
std::string userlist = "\n***************USER LIST****************\n";
for(int i=0 ; i < friends.size() ; i++) {
@ -601,13 +601,13 @@ void TwitterPlugin::displayFriendlist(std::string &user, std::vector<User> &frie
handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
userlist, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
} else handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
errMsg, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
errMsg.getMessage(), userdb[user].twitterMode == CHATROOM ? adminNickName : "");
}
void TwitterPlugin::displayTweets(std::string &user, std::string &userRequested, std::vector<Status> &tweets , std::string &errMsg)
void TwitterPlugin::displayTweets(std::string &user, std::string &userRequested, std::vector<Status> &tweets , Error &errMsg)
{
if(errMsg.length() == 0) {
if(errMsg.getMessage().length() == 0) {
std::string timeline = "";
std::map<std::string, int> lastTweet;
@ -643,14 +643,21 @@ void TwitterPlugin::displayTweets(std::string &user, std::string &userRequested,
if(timeline.length()) handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
timeline, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
} else handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
errMsg, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
errMsg.getMessage(), userdb[user].twitterMode == CHATROOM ? adminNickName : "");
}
void TwitterPlugin::directMessageResponse(std::string &user, std::string &username, std::vector<DirectMessage> &messages, std::string &errMsg)
void TwitterPlugin::directMessageResponse(std::string &user, std::string &username, std::vector<DirectMessage> &messages, Error &errMsg)
{
if(errMsg.length()) {
handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
std::string("Error while sending direct message! - ") + errMsg, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
if(errMsg.getCode() == "93") //Permission Denied
return;
if(errMsg.getMessage().length()) {
if(username != "")
handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
std::string("Error while sending direct message! - ") + errMsg.getMessage(), userdb[user].twitterMode == CHATROOM ? adminNickName : "");
else
handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
std::string("Error while fetching direct messages! - ") + errMsg.getMessage(), userdb[user].twitterMode == CHATROOM ? adminNickName : "");
return;
}
@ -698,11 +705,11 @@ void TwitterPlugin::directMessageResponse(std::string &user, std::string &userna
}
}
void TwitterPlugin::createFriendResponse(std::string &user, User &frnd, std::string &img, std::string &errMsg)
void TwitterPlugin::createFriendResponse(std::string &user, User &frnd, std::string &img, Error &errMsg)
{
if(errMsg.length()) {
if(errMsg.getMessage().length()) {
handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
errMsg, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
errMsg.getMessage(), userdb[user].twitterMode == CHATROOM ? adminNickName : "");
return;
}
@ -721,11 +728,11 @@ void TwitterPlugin::createFriendResponse(std::string &user, User &frnd, std::str
}
}
void TwitterPlugin::deleteFriendResponse(std::string &user, User &frnd, std::string &errMsg)
void TwitterPlugin::deleteFriendResponse(std::string &user, User &frnd, Error &errMsg)
{
if(errMsg.length()) {
if(errMsg.getMessage().length()) {
handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
errMsg, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
errMsg.getMessage(), userdb[user].twitterMode == CHATROOM ? adminNickName : "");
return;
}
@ -745,22 +752,22 @@ void TwitterPlugin::deleteFriendResponse(std::string &user, User &frnd, std::str
}
void TwitterPlugin::RetweetResponse(std::string &user, std::string &errMsg)
void TwitterPlugin::RetweetResponse(std::string &user, Error &errMsg)
{
if(errMsg.length()) {
if(errMsg.getMessage().length()) {
handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
errMsg, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
errMsg.getMessage(), userdb[user].twitterMode == CHATROOM ? adminNickName : "");
} else {
handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
"Retweet successful", userdb[user].twitterMode == CHATROOM ? adminNickName : "");
}
}
void TwitterPlugin::profileImageResponse(std::string &user, std::string &buddy, std::string &img, unsigned int reqID, std::string &errMsg)
void TwitterPlugin::profileImageResponse(std::string &user, std::string &buddy, std::string &img, unsigned int reqID, Error &errMsg)
{
if(errMsg.length()) {
if(errMsg.getMessage().length()) {
handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
errMsg, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
errMsg.getMessage(), userdb[user].twitterMode == CHATROOM ? adminNickName : "");
} else {
LOG4CXX_INFO(logger, user << " - Sending VCard for " << buddy)
handleVCard(user, reqID, buddy, buddy, "", img);

View file

@ -44,6 +44,7 @@ class TwitterPlugin;
extern TwitterPlugin *np;
extern Swift::SimpleEventLoop *loop_; // Event Loop
class TwitterPlugin : public NetworkPlugin {
public:
Swift::BoostNetworkFactories *m_factories;
@ -111,25 +112,25 @@ class TwitterPlugin : public NetworkPlugin {
bool setTwitterMode(const std::string user, int m);
/****************** Twitter response handlers **************************************/
void statusUpdateResponse(std::string &user, std::string &errMsg);
void statusUpdateResponse(std::string &user, Error &errMsg);
void helpMessageResponse(std::string &user, std::string &msg);
void populateRoster(std::string &user, std::vector<User> &friends, std::vector<std::string> &friendAvatars, std::string &errMsg);
void populateRoster(std::string &user, std::vector<User> &friends, std::vector<std::string> &friendAvatars, Error &errMsg);
void displayFriendlist(std::string &user, std::vector<User> &friends, std::vector<std::string> &friendAvatars, std::string &errMsg);
void displayFriendlist(std::string &user, std::vector<User> &friends, std::vector<std::string> &friendAvatars, Error &errMsg);
void displayTweets(std::string &user, std::string &userRequested, std::vector<Status> &tweets , std::string &errMsg);
void displayTweets(std::string &user, std::string &userRequested, std::vector<Status> &tweets , Error &errMsg);
void directMessageResponse(std::string &user, std::string &username, std::vector<DirectMessage> &messages, std::string &errMsg);
void directMessageResponse(std::string &user, std::string &username, std::vector<DirectMessage> &messages, Error &errMsg);
void createFriendResponse(std::string &user, User &frnd, std::string &img, std::string &errMsg);
void createFriendResponse(std::string &user, User &frnd, std::string &img, Error &errMsg);
void deleteFriendResponse(std::string &user, User &frnd, std::string &errMsg);
void deleteFriendResponse(std::string &user, User &frnd, Error &errMsg);
void RetweetResponse(std::string &user, std::string &errMsg);
void RetweetResponse(std::string &user, Error &errMsg);
void profileImageResponse(std::string &user, std::string &buddy, std::string &img, unsigned int reqID, std::string &errMsg);
void profileImageResponse(std::string &user, std::string &buddy, std::string &img, unsigned int reqID, Error &errMsg);
/***********************************************************************************/
private:

View file

@ -212,19 +212,30 @@ std::vector<std::string> getIDs(std::string &xml)
return IDs;
}
std::string getErrorMessage(std::string &xml)
Error getErrorMessage(std::string &xml)
{
std::string error;
std::string error = "";
std::string code = "";
Error resp;
Swift::ParserElement::ref rootElement = Swift::StringTreeParser::parse(xml);
if(rootElement == NULL) {
LOG4CXX_ERROR(logger, "Error while parsing XML");
return "";
return resp;
}
const std::string xmlns = rootElement->getNamespace();
const Swift::ParserElement::ref errorElement = rootElement->getChild(TwitterReponseTypes::error, xmlns);
Swift::AttributeMap attributes = errorElement->getAttributes();
if(errorElement != NULL) error = errorElement->getText();
return error;
if(errorElement != NULL) {
error = errorElement->getText();
code = (errorElement->getAttributes()).getAttribute("code");
}
resp.setCode(code);
resp.setMessage(error);
return resp;
}

View file

@ -192,12 +192,25 @@ class DirectMessage
void setRecipientData(User u) {recipient = u;}
};
class Error
{
std::string code;
std::string message;
public:
Error():code(""),message(""){}
std::string getCode() {return code;}
std::string getMessage() {return message;}
void setCode(std::string &_code) {code = _code;}
void setMessage(std::string &_message) {message = _message;}
};
std::vector<Status> getTimeline(std::string &xml);
std::vector<DirectMessage> getDirectMessages(std::string &xml);
std::vector<std::string> getIDs(std::string &xml);
std::vector<User> getUsers(std::string &xml);
User getUser(std::string &xml);
std::string getErrorMessage(std::string &xml);
Error getErrorMessage(std::string &xml);
Status getStatus(const Swift::ParserElement::ref &element, const std::string xmlns);
DirectMessage getDirectMessage(const Swift::ParserElement::ref &element, const std::string xmlns);