diff --git a/backends/twitter/Requests/DirectMessageRequest.cpp b/backends/twitter/Requests/DirectMessageRequest.cpp index e8c6f292..7eb2c82b 100644 --- a/backends/twitter/Requests/DirectMessageRequest.cpp +++ b/backends/twitter/Requests/DirectMessageRequest.cpp @@ -1,7 +1,11 @@ #include "DirectMessageRequest.h" +#include "../TwitterResponseParser.h" + DEFINE_LOGGER(logger, "DirectMessageRequest") + void DirectMessageRequest::run() { + replyMsg = ""; if(twitObj->directMessageSend(username, data, false) == false) { LOG4CXX_ERROR(logger, user << ": Error while sending directed message to " << username ); return; @@ -11,6 +15,14 @@ void DirectMessageRequest::run() void DirectMessageRequest::finalize() { - LOG4CXX_INFO(logger, user << ": Sent " << data << " to " << username) - LOG4CXX_INFO(logger, user << ": Twitter reponse - " << replyMsg) + if(replyMsg.length()) { + std::string error = getErrorMessage(replyMsg); + if(error.length()) { + np->handleMessage(user, "twitter-account", error); + LOG4CXX_INFO(logger, user << ": " << error); + } else { + LOG4CXX_INFO(logger, user << ": Sent " << data << " to " << username) + LOG4CXX_INFO(logger, user << ": Twitter reponse - " << replyMsg) + } + } } diff --git a/backends/twitter/Requests/FetchFriends.cpp b/backends/twitter/Requests/FetchFriends.cpp index ebd29049..34afc100 100644 --- a/backends/twitter/Requests/FetchFriends.cpp +++ b/backends/twitter/Requests/FetchFriends.cpp @@ -33,7 +33,14 @@ void FetchFriends::run() void FetchFriends::finalize() { if(replyMsg != "" ) { - np->handleMessage(user, "twitter-account", userlist); + std::string error = getErrorMessage(replyMsg); + if(error.length()) { + np->handleMessage(user, "twitter-account", error); + LOG4CXX_INFO(logger, user << ": " << error); + } else { + LOG4CXX_INFO(logger, user << ": " << userlist); + np->handleMessage(user, "twitter-account", userlist); + } } else { twitObj->getLastCurlError( replyMsg ); LOG4CXX_INFO(logger, user << " - friendsIdsGet error - " << replyMsg ); diff --git a/backends/twitter/Requests/HelpMessageRequest.cpp b/backends/twitter/Requests/HelpMessageRequest.cpp index 22848d91..9622fda6 100644 --- a/backends/twitter/Requests/HelpMessageRequest.cpp +++ b/backends/twitter/Requests/HelpMessageRequest.cpp @@ -6,7 +6,7 @@ void HelpMessageRequest::run() helpMsg = helpMsg + "\n******************************HELP************************************\n" + "#status ==> Update your status\n" - + "#timeline ==> Retrieve your timeline\n" + + "#timeline [username] ==> Retrieve 's timeline; Default - own timeline\n" + "@ ==> Send a directed message to the user \n" + "#help ==> Print this help message\n" + "************************************************************************\n"; diff --git a/backends/twitter/Requests/PINExchangeProcess.cpp b/backends/twitter/Requests/PINExchangeProcess.cpp index a54f0674..66c6e5b8 100644 --- a/backends/twitter/Requests/PINExchangeProcess.cpp +++ b/backends/twitter/Requests/PINExchangeProcess.cpp @@ -14,6 +14,20 @@ void PINExchangeProcess::finalize() LOG4CXX_ERROR(logger, user << ": Error while exchanging PIN for Access Token!") np->handleLogoutRequest(user, ""); } else { + std::string replyMsg; + while(replyMsg.length() == 0) { + 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); + np->handleLogoutRequest(user, ""); + return; + } + + std::string OAuthAccessTokenKey, OAuthAccessTokenSecret; twitObj->getOAuth().getOAuthTokenKey( OAuthAccessTokenKey ); twitObj->getOAuth().getOAuthTokenSecret( OAuthAccessTokenSecret ); diff --git a/backends/twitter/Requests/StatusUpdateRequest.cpp b/backends/twitter/Requests/StatusUpdateRequest.cpp index b7bd4d50..e6e50129 100644 --- a/backends/twitter/Requests/StatusUpdateRequest.cpp +++ b/backends/twitter/Requests/StatusUpdateRequest.cpp @@ -1,4 +1,6 @@ #include "StatusUpdateRequest.h" +#include "../TwitterResponseParser.h" + DEFINE_LOGGER(logger, "StatusUpdateRequest") void StatusUpdateRequest::run() { @@ -14,10 +16,14 @@ void StatusUpdateRequest::run() void StatusUpdateRequest::finalize() { if(replyMsg != "" ) { - LOG4CXX_INFO(logger, "Updated status for " << user << ": " << data); + std::string error = getErrorMessage(replyMsg); + if(error.length()) { + np->handleMessage(user, "twitter-account", error); + LOG4CXX_INFO(logger, user << ": " << error); + } else LOG4CXX_INFO(logger, "Updated status for " << user << ": " << data); } else { twitObj->getLastCurlError( replyMsg ); - LOG4CXX_ERROR(logger, user << "Error - " << replyMsg ); + LOG4CXX_ERROR(logger, user << ": CurlError - " << replyMsg ); } return; } diff --git a/backends/twitter/Requests/TimelineRequest.cpp b/backends/twitter/Requests/TimelineRequest.cpp index 3c8f66fe..4503b478 100644 --- a/backends/twitter/Requests/TimelineRequest.cpp +++ b/backends/twitter/Requests/TimelineRequest.cpp @@ -3,7 +3,7 @@ DEFINE_LOGGER(logger, "TimelineRequest") void TimelineRequest::run() { replyMsg = ""; - if( twitObj->timelineHomeGet() ) { + if( twitObj->timelineUserGet(false, false, 20, userRequested, false) ) { LOG4CXX_INFO(logger, "Sending timeline request for user " << user) while(replyMsg.length() == 0) { @@ -23,8 +23,14 @@ void TimelineRequest::run() void TimelineRequest::finalize() { if(replyMsg.length()) { - LOG4CXX_INFO(logger, user << "'s timeline\n" << replyMsg); - np->handleMessage(user, "twitter-account", timeline); //send timeline + std::string error = getErrorMessage(replyMsg); + if(error.length()) { + np->handleMessage(user, "twitter-account", error); + LOG4CXX_INFO(logger, user << ": " << error); + } else { + LOG4CXX_INFO(logger, user << "'s timeline\n" << replyMsg); + np->handleMessage(user, "twitter-account", timeline); //send timeline + } } else { twitObj->getLastCurlError( replyMsg ); diff --git a/backends/twitter/Requests/TimelineRequest.h b/backends/twitter/Requests/TimelineRequest.h index 02292373..1e442b04 100644 --- a/backends/twitter/Requests/TimelineRequest.h +++ b/backends/twitter/Requests/TimelineRequest.h @@ -15,15 +15,17 @@ class TimelineRequest : public Thread { twitCurl *twitObj; std::string user; + std::string userRequested; std::string replyMsg; std::string timeline; NetworkPlugin *np; public: - TimelineRequest(NetworkPlugin *_np, twitCurl *obj, const std::string &_user) { + TimelineRequest(NetworkPlugin *_np, twitCurl *obj, const std::string &_user, const std::string &_user2) { twitObj = obj->clone(); np = _np; user = _user; + userRequested = _user2; } ~TimelineRequest() { diff --git a/backends/twitter/TwitterPlugin.cpp b/backends/twitter/TwitterPlugin.cpp index 87ee1ec2..4f266f27 100644 --- a/backends/twitter/TwitterPlugin.cpp +++ b/backends/twitter/TwitterPlugin.cpp @@ -107,7 +107,7 @@ void TwitterPlugin::handleMessageSendRequest(const std::string &user, const std: std::istringstream in(message.c_str()); in >> cmd >> data; - handleMessage(user, "twitter-account", cmd + " " + data); + //handleMessage(user, "twitter-account", cmd + " " + data); if(cmd == "#pin") tp->runAsThread(new PINExchangeProcess(np, sessions[user], user, data)); else if(cmd == "#help") tp->runAsThread(new HelpMessageRequest(np, user)); @@ -116,8 +116,9 @@ void TwitterPlugin::handleMessageSendRequest(const std::string &user, const std: tp->runAsThread(new DirectMessageRequest(np, sessions[user], user, username, data)); } else if(cmd == "#status") tp->runAsThread(new StatusUpdateRequest(np, sessions[user], user, data)); - else if(cmd == "#timeline") tp->runAsThread(new TimelineRequest(np, sessions[user], user)); + else if(cmd == "#timeline") tp->runAsThread(new TimelineRequest(np, sessions[user], user, data)); else if(cmd == "#friends") tp->runAsThread(new FetchFriends(np, sessions[user], user)); + else handleMessage(user, "twitter-account", "Unknown command! Type #help for a list of available commands."); } } diff --git a/backends/twitter/TwitterResponseParser.cpp b/backends/twitter/TwitterResponseParser.cpp index 350f25c8..c2d2eec3 100644 --- a/backends/twitter/TwitterResponseParser.cpp +++ b/backends/twitter/TwitterResponseParser.cpp @@ -98,3 +98,15 @@ std::vector getIDs(std::string &xml) } return IDs; } + +std::string getErrorMessage(std::string &xml) +{ + std::string error; + Swift::ParserElement::ref rootElement = Swift::StringTreeParser::parse(xml); + + const std::string xmlns = rootElement->getNamespace(); + const Swift::ParserElement::ref errorElement = rootElement->getChild(TwitterReponseTypes::error, xmlns); + + if(errorElement != NULL) error = errorElement->getText(); + return error; +} diff --git a/backends/twitter/TwitterResponseParser.h b/backends/twitter/TwitterResponseParser.h index c1e61b06..32acfcf8 100644 --- a/backends/twitter/TwitterResponseParser.h +++ b/backends/twitter/TwitterResponseParser.h @@ -25,6 +25,7 @@ namespace TwitterReponseTypes const std::string user = "user"; const std::string users = "users"; const std::string status = "status"; + const std::string error = "error"; }; //Class holding user data @@ -98,6 +99,7 @@ class Status std::vector getTimeline(std::string &xml); std::vector getIDs(std::string &xml); std::vector getUsers(std::string &xml); +std::string getErrorMessage(std::string &xml); Status getStatus(const Swift::ParserElement::ref &element, const std::string xmlns); User getUser(const Swift::ParserElement::ref &element, const std::string xmlns); #endif diff --git a/backends/twitter/libtwitcurl/twitcurl.cpp b/backends/twitter/libtwitcurl/twitcurl.cpp index 63f2112c..6addd2c4 100644 --- a/backends/twitter/libtwitcurl/twitcurl.cpp +++ b/backends/twitter/libtwitcurl/twitcurl.cpp @@ -1472,6 +1472,9 @@ void twitCurl::prepareStandardParams() /* Restore any custom request we may have */ curl_easy_setopt( m_curlHandle, CURLOPT_CUSTOMREQUEST, NULL ); + /* All supported encodings*/ + curl_easy_setopt( m_curlHandle, CURLOPT_ENCODING, "" ); + /* Clear callback and error buffers */ clearCurlCallbackBuffers();