Changeset - ff23ea784702
backends/twitter/Requests/CreateFriendRequest.cpp
Show inline comments
 
@@ -23,27 +23,28 @@ void CreateFriendRequest::run()
 

	
 
		profileImg = "";
 
		if(req.GET(friendInfo.getProfileImgURL(), img)) profileImg = img;
 
		else {
 
			LOG4CXX_INFO(logger, user << " - Was unable to fetch profile image of user " << frnd);
 
		}
 

	
 
	}
 
}
 

	
 
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);
 
	}
 
}
backends/twitter/Requests/CreateFriendRequest.h
Show inline comments
 
@@ -9,32 +9,32 @@
 
#include <boost/function.hpp>
 
#include <iostream>
 
#include <vector>
 

	
 
using namespace Transport;
 

	
 
class CreateFriendRequest : public Thread
 
{
 
	twitCurl *twitObj;
 
	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;
 
		callBack = cb;
 
	}
 

	
 
	~CreateFriendRequest() {
 
		delete twitObj;
 
	}
 

	
 
	void run();
 
	void finalize();
backends/twitter/Requests/DestroyFriendRequest.cpp
Show inline comments
 
@@ -9,24 +9,25 @@ void DestroyFriendRequest::run()
 
		twitObj->getLastWebResponse(replyMsg);
 
		
 
		LOG4CXX_INFO(logger, user << replyMsg)		
 
		
 

	
 
	   	friendInfo = getUser(replyMsg);
 
		if(friendInfo.getScreenName() == "") LOG4CXX_INFO(logger, user << " - Was unable to fetch user info for " << frnd);
 
	}
 
}
 

	
 
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);
 
	}
 
}
backends/twitter/Requests/DestroyFriendRequest.h
Show inline comments
 
@@ -9,31 +9,31 @@
 
#include <boost/function.hpp>
 
#include <iostream>
 
#include <vector>
 

	
 
using namespace Transport;
 

	
 
class DestroyFriendRequest : public Thread
 
{
 
	twitCurl *twitObj;
 
	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;
 
		callBack = cb;
 
	}
 

	
 
	~DestroyFriendRequest() {
 
		delete twitObj;
 
	}
 

	
 
	void run();
 
	void finalize();
backends/twitter/Requests/DirectMessageRequest.cpp
Show inline comments
 
@@ -7,23 +7,26 @@ void DirectMessageRequest::run()
 
	replyMsg = "";
 
	if(username != "") success = twitObj->directMessageSend(username, data, false);
 
	else success = twitObj->directMessageGet(data); /* data will contain sinceId */
 

	
 
	if(success) {
 
		twitObj->getLastWebResponse( replyMsg );
 
		if(username == "" ) messages = getDirectMessages( replyMsg );
 
	}
 
}
 

	
 
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);	
 
	}
 
}
backends/twitter/Requests/DirectMessageRequest.h
Show inline comments
 
@@ -9,31 +9,31 @@
 
#include <boost/function.hpp>
 
#include <iostream>
 

	
 
using namespace Transport;
 

	
 
class DirectMessageRequest : public Thread
 
{
 
	twitCurl *twitObj;
 
	std::string data;
 
	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;
 
		username = _username;
 
		callBack = cb;
 
	}
 

	
 
	~DirectMessageRequest() {
 
		delete twitObj;
 
	}
 

	
 
	void run();
backends/twitter/Requests/FetchFriends.cpp
Show inline comments
 
@@ -26,22 +26,25 @@ void FetchFriends::run()
 
	for(int i=0 ; i<friends.size() ; i++) {
 
		std::string img;
 
		friendAvatars.push_back("");
 
		if(req.GET(friends[i].getProfileImgURL(), img)) friendAvatars[i] = img;
 
		else {
 
			LOG4CXX_INFO(logger, "Warning: Couldn't fetch Profile Image for " << user << "'s friend " << friends[i].getScreenName())
 
		}
 
	}
 
}
 

	
 
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);	
 
	} 
 
}
backends/twitter/Requests/FetchFriends.h
Show inline comments
 
@@ -12,29 +12,29 @@
 
#include <iostream>
 

	
 
using namespace Transport;
 

	
 
class FetchFriends : public Thread
 
{
 
	twitCurl *twitObj;
 
	std::string user;
 
	std::string replyMsg;
 
	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;
 
	}
 

	
 
	~FetchFriends() {
 
		delete twitObj;
 
	}
 

	
 
	void run();
 
	void finalize();
 
};
backends/twitter/Requests/PINExchangeProcess.cpp
Show inline comments
 
@@ -11,28 +11,28 @@ void PINExchangeProcess::run()
 
void PINExchangeProcess::finalize()
 
{
 
	if(!success) {
 
		LOG4CXX_ERROR(logger, user << ": Error while exchanging PIN for Access Token!")
 
		np->handleMessage(user, "twitter-account", "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);
 
		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;
 
		}
 

	
 

	
 
		std::string OAuthAccessTokenKey, OAuthAccessTokenSecret;
 
		twitObj->getOAuth().getOAuthTokenKey( OAuthAccessTokenKey );
 
		twitObj->getOAuth().getOAuthTokenSecret( OAuthAccessTokenSecret );
 

	
 
		if(np->storeUserOAuthKeyAndSecret(user, OAuthAccessTokenKey, OAuthAccessTokenSecret) == false) {
 
			np->handleLogoutRequest(user, "");
 
			return;
backends/twitter/Requests/ProfileImageRequest.cpp
Show inline comments
 
@@ -3,22 +3,24 @@
 
DEFINE_LOGGER(logger, "ProfileImageRequest")
 
void ProfileImageRequest::run() 
 
{	
 
	HTTPRequest req;
 
	req.init();
 
	req.setProxy(ip, port, puser, ppasswd);
 
	success = req.GET(url, callbackdata);
 
	if(!success) error.assign(req.getCurlError());
 
}
 

	
 
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);	
 
	} 
 
}
backends/twitter/Requests/ProfileImageRequest.h
Show inline comments
 
@@ -13,36 +13,36 @@
 
#include <sstream>
 

	
 
using namespace Transport;
 
using namespace boost::program_options;
 

	
 
class ProfileImageRequest : public Thread
 
{
 
	std::string user;
 
	std::string buddy;
 
	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;
 

	
 
	bool success;
 

	
 
	std::string error;
 
	std::string callbackdata;
 

	
 
	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");
 

	
 
			std::ostringstream out; 
 
			out << CONFIG_INT(config,"proxy.port");
 
			port = out.str();
 

	
 
			puser = CONFIG_STRING(config,"proxy.user");
 
			ppasswd = CONFIG_STRING(config,"proxy.password");
 
		}
 

	
backends/twitter/Requests/RetweetRequest.cpp
Show inline comments
 
#include "RetweetRequest.h"
 
DEFINE_LOGGER(logger, "RetweetRequest")
 
void RetweetRequest::run()
 
{
 
	LOG4CXX_INFO(logger, user << " Retweeting " << data)
 
	success = twitObj->retweetById( data );
 
}
 

	
 
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);
 
	}
 
}
backends/twitter/Requests/RetweetRequest.h
Show inline comments
 
@@ -9,29 +9,29 @@
 
#include <boost/function.hpp>
 
#include <string>
 
#include <iostream>
 

	
 
using namespace Transport;
 
class RetweetRequest : public Thread
 
{
 
	twitCurl *twitObj;
 
	std::string data;
 
	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;
 
		callBack = _cb;
 
	}
 

	
 
	~RetweetRequest() {
 
		delete twitObj;
 
	}
 

	
 
	void run();
 
	void finalize();
backends/twitter/Requests/StatusUpdateRequest.cpp
Show inline comments
 
@@ -5,23 +5,26 @@ DEFINE_LOGGER(logger, "StatusUpdateRequest")
 
void StatusUpdateRequest::run() 
 
{
 
	replyMsg = "";
 
	success = twitObj->statusUpdate(data);
 
	if(success) {
 
		twitObj->getLastWebResponse( replyMsg );
 
		LOG4CXX_INFO(logger, user << "StatusUpdateRequest response " << replyMsg );
 
	}
 
}
 

	
 
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);
 
	}
 
}
backends/twitter/Requests/StatusUpdateRequest.h
Show inline comments
 
#ifndef STATUS_UPDATE
 
#define STATUS_UPDATE
 

	
 
#include "transport/threadpool.h"
 
#include "../libtwitcurl/twitcurl.h"
 
#include "../TwitterResponseParser.h"
 
#include "transport/networkplugin.h"
 
#include "transport/logging.h"
 
#include <boost/function.hpp>
 
#include <string>
 
#include <iostream>
 

	
 
using namespace Transport;
 
class StatusUpdateRequest : public Thread
 
{
 
	twitCurl *twitObj;
 
	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;
 
		callBack = cb;
 
	}
 

	
 
	~StatusUpdateRequest() {
 
		delete twitObj;
 
	}
 

	
 
	void run();
 
	void finalize();
backends/twitter/Requests/TimelineRequest.cpp
Show inline comments
 
@@ -8,22 +8,25 @@ void TimelineRequest::run()
 
	else success = twitObj->timelineHomeGet(since_id);
 
	
 
	if(!success) return;
 
	
 
	replyMsg = ""; 
 
	twitObj->getLastWebResponse( replyMsg );
 
	//LOG4CXX_INFO(logger, user << " - " << replyMsg.length() << " " << replyMsg << "\n" );
 
	tweets = getTimeline(replyMsg);
 
}
 

	
 
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);
 
	} 
 
}
backends/twitter/Requests/TimelineRequest.h
Show inline comments
 
@@ -10,30 +10,30 @@
 
#include <boost/function.hpp>
 

	
 
using namespace Transport;
 

	
 
class TimelineRequest : public Thread
 
{
 
	twitCurl *twitObj;
 
	std::string user;
 
	std::string userRequested;
 
	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;
 
		since_id = _since_id;
 
		callBack = cb;
 
	}
 

	
 
	~TimelineRequest() {
 
		//std::cerr << "*****Timeline request: DESTROYING twitObj****" << std::endl;
 
		delete twitObj;
 
	}
 

	
backends/twitter/TwitterPlugin.cpp
Show inline comments
 
@@ -524,99 +524,99 @@ void TwitterPlugin::updateLastDMID(const std::string user, const std::string ID)
 
	userdb[user].mostRecentDirectMessageID = ID;
 
}
 

	
 
std::string TwitterPlugin::getMostRecentDMID(const std::string user)
 
{
 
	boost::mutex::scoped_lock lock(userlock);	
 
	std::string ID = "";
 
	if(onlineUsers.count(user)) ID = userdb[user].mostRecentDirectMessageID;
 
	return ID;
 
}
 

	
 
/************************************** 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 : "");
 
	}
 
}
 

	
 
void TwitterPlugin::helpMessageResponse(std::string &user, std::string &msg)
 
{
 
	handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
 
						msg, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
 
}
 

	
 
void TwitterPlugin::clearRoster(const std::string user)
 
{
 
	if(userdb[user].buddies.size() == 0) return;
 
	std::set<std::string>::iterator it = userdb[user].buddies.begin();
 
	while(it != userdb[user].buddies.end()) {
 
		handleBuddyRemoved(user, *it);
 
		it++;
 
	}
 
	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());
 
			userdb[user].buddiesInfo[friends[i].getScreenName()] = friends[i];
 
			userdb[user].buddiesImgs[friends[i].getScreenName()] = friendAvatars[i];
 
			
 
			if(userdb[user].twitterMode == MULTIPLECONTACT) {
 
				std::string lastTweet = friends[i].getLastStatus().getTweet();
 
				//LOG4CXX_INFO(logger, user << " - " << SHA(friendAvatars[i]))
 
				handleBuddyChanged(user, friends[i].getScreenName(), friends[i].getUserName(), std::vector<std::string>(), 
 
								   pbnetwork::STATUS_ONLINE, lastTweet, SHA(friendAvatars[i]));
 
			}
 
			else if(userdb[user].twitterMode == CHATROOM)
 
				handleParticipantChanged(user, friends[i].getScreenName(), adminChatRoom, 0, pbnetwork::STATUS_ONLINE);
 
			
 
			/*handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
 
							   	friends[i].getScreenName() + " - " + friends[i].getLastStatus().getTweet(), 
 
								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++) {
 
			userlist += " - " + friends[i].getUserName() + " (" + friends[i].getScreenName() + ")\n";
 
		}	
 
		userlist += "***************************************\n";
 
		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;
 
		std::map<std::string, int>::iterator it;
 

	
 
		for(int i=0 ; i<tweets.size() ; i++) {
 
			if(userdb[user].twitterMode != CHATROOM) {
 
				timeline += " - " + tweets[i].getUserData().getScreenName() + ": " + tweets[i].getTweet() + " (MsgId: " + tweets[i].getID() + ")\n";
 

	
 
				std::string scrname = tweets[i].getUserData().getScreenName();
 
				if(lastTweet.count(scrname) == 0 || cmp(tweets[lastTweet[scrname]].getID(), tweets[i].getID()) <= 0) lastTweet[scrname] = i;
 

	
 
@@ -634,32 +634,39 @@ void TwitterPlugin::displayTweets(std::string &user, std::string &userRequested,
 
								   std::vector<std::string>(), pbnetwork::STATUS_ONLINE, tweets[t].getTweet());
 
			}
 
		}
 

	
 
		if((userRequested == "" || userRequested == user) && tweets.size()) {
 
			std::string tweetID = getMostRecentTweetID(user);
 
			if(tweetID != tweets[0].getID()) updateLastTweetID(user, tweets[0].getID());
 
		}
 

	
 
		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;
 
	}
 

	
 
	if(username != "") {
 
		handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
 
						   "Message delivered!", userdb[user].twitterMode == CHATROOM ? adminNickName : "");	
 
		return;
 
	}
 
	
 
	if(!messages.size()) return;
 
	
 
	if(userdb[user].twitterMode == SINGLECONTACT) {
 
@@ -689,80 +696,80 @@ void TwitterPlugin::directMessageResponse(std::string &user, std::string &userna
 
					handleMessage(user, messages[i].getSenderData().getScreenName(), messages[i].getMessage(), "");
 
				else
 
					handleMessage(user, adminChatRoom, messages[i].getMessage() + " - <Direct Message>", messages[i].getSenderData().getScreenName());
 
				if(cmp(maxID, messages[i].getID()) == -1) maxID = messages[i].getID();
 
			}
 
		}	
 
		
 
		if(maxID == getMostRecentDMID(user)) LOG4CXX_INFO(logger, "No new direct messages for " << user)
 
		updateLastDMID(user, maxID);
 
	}
 
}
 

	
 
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;
 
	}
 

	
 
	handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
 
						std::string("You are now following ") + frnd.getScreenName(), userdb[user].twitterMode == CHATROOM ? adminNickName : "");
 
	
 
	userdb[user].buddies.insert(frnd.getScreenName());
 
	userdb[user].buddiesInfo[frnd.getScreenName()] = frnd;
 
	userdb[user].buddiesImgs[frnd.getScreenName()] = img;
 
	
 
	LOG4CXX_INFO(logger, user << " - " << frnd.getScreenName() << ", " << frnd.getProfileImgURL())
 
	if(userdb[user].twitterMode == MULTIPLECONTACT) {
 
		handleBuddyChanged(user, frnd.getScreenName(), frnd.getUserName(), std::vector<std::string>(), pbnetwork::STATUS_ONLINE, "", SHA(img));
 
	} else if(userdb[user].twitterMode == CHATROOM) {
 
		handleParticipantChanged(user, frnd.getScreenName(), adminChatRoom, 0, pbnetwork::STATUS_ONLINE);
 
	}
 
}
 

	
 
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;
 
	} 
 
	
 
	LOG4CXX_INFO(logger, user << " - " << frnd.getScreenName() << ", " << frnd.getProfileImgURL())
 
	userdb[user].buddies.erase(frnd.getScreenName());
 
	
 
	handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
 
						std::string("You are not following ") + frnd.getScreenName() + " anymore", userdb[user].twitterMode == CHATROOM ? adminNickName : "");
 
	
 
	if (userdb[user].twitterMode == CHATROOM) {
 
		handleParticipantChanged(user, frnd.getScreenName(), adminLegacyName, 0, pbnetwork::STATUS_NONE);
 
	}
 
	
 
	if(userdb[user].twitterMode == MULTIPLECONTACT) {
 
		handleBuddyRemoved(user, frnd.getScreenName());
 
	} 
 
}
 

	
 

	
 
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);
 
	}
 
}
backends/twitter/TwitterPlugin.h
Show inline comments
 
@@ -35,24 +35,25 @@
 
#include "Swiften/StringCodecs/SHA1.h"
 

	
 
using namespace boost::filesystem;
 
using namespace boost::program_options;
 
using namespace Transport;
 

	
 
#define STR(x) (std::string("(") + x.from + ", " + x.to + ", " + x.message + ")")
 

	
 
class TwitterPlugin;
 
extern TwitterPlugin *np;
 
extern Swift::SimpleEventLoop *loop_; // Event Loop
 

	
 

	
 
class TwitterPlugin : public NetworkPlugin {
 
	public:
 
		Swift::BoostNetworkFactories *m_factories;
 
		Swift::BoostIOServiceThread m_boostIOServiceThread;
 
		boost::shared_ptr<Swift::Connection> m_conn;
 
		Swift::Timer::ref tweet_timer;
 
		Swift::Timer::ref message_timer;
 
		StorageBackend *storagebackend;
 

	
 
		TwitterPlugin(Config *config, Swift::SimpleEventLoop *loop, StorageBackend *storagebackend, const std::string &host, int port);
 
		~TwitterPlugin();
 

	
 
@@ -102,43 +103,43 @@ class TwitterPlugin : public NetworkPlugin {
 

	
 
		void updateLastDMID(const std::string user, const std::string ID);
 
		
 
		std::string getMostRecentDMID(const std::string user);
 

	
 
		void clearRoster(const std::string user);
 

	
 
		int getTwitterMode(const std::string user);
 

	
 
		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:
 
		enum status {NEW, WAITING_FOR_PIN, CONNECTED, DISCONNECTED};
 
		enum mode {SINGLECONTACT, MULTIPLECONTACT, CHATROOM};
 

	
 
		Config *config;
 
		std::string adminLegacyName;
 
		std::string adminChatRoom;
 
		std::string adminNickName;
 
		std::string adminAlias;
 

	
backends/twitter/TwitterResponseParser.cpp
Show inline comments
 
@@ -203,28 +203,39 @@ std::vector<std::string> getIDs(std::string &xml)
 
		return IDs;
 
	}
 

	
 
	const std::string xmlns = rootElement->getNamespace();
 
	const std::vector<Swift::ParserElement::ref> ids = rootElement->getChild(TwitterReponseTypes::ids, xmlns)->getChildren(TwitterReponseTypes::id, xmlns);
 
	
 
	for(int i=0 ; i<ids.size() ; i++) {
 
		IDs.push_back(std::string( ids[i]->getText() ));
 
	}
 
	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;
 
}
backends/twitter/TwitterResponseParser.h
Show inline comments
 
@@ -183,23 +183,36 @@ class DirectMessage
 
	
 
	void setCreationTime(std::string _created) {created_at = _created;}
 
	void setID(std::string _id) {ID = _id;}
 
	void setMessage(std::string _text) {text = _text;}
 
	void setSenderID(std::string _id) {sender_id = _id;}
 
	void setRecipientID(std::string _id) {recipient_id = _id;}
 
	void setSenderScreenName(std::string _name) {sender_screen_name = _name;}
 
	void setRecipientScreenName(std::string _name) {recipient_screen_name = _name;}
 
	void setSenderData(User u) {sender = u;}
 
	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);
 
User getUser(const Swift::ParserElement::ref &element, const std::string xmlns);
 
#endif
0 comments (0 inline, 0 general)