Changeset - 132dfb379d42
[Not reviewed]
0 8 0
Jan Kaluza - 14 years ago 2011-03-24 11:42:31
hanzz.k@gmail.com
JID Escaping and preparation for RIE
8 files changed with 51 insertions and 20 deletions:
0 comments (0 inline, 0 general)
include/transport/abstractbuddy.h
Show inline comments
 
@@ -39,7 +39,7 @@ typedef enum { 	BUDDY_NO_FLAG = 0,
 
class AbstractBuddy {
 
	public:
 
		/// Constructor.
 
		AbstractBuddy(long id);
 
		AbstractBuddy(RosterManager *rosterManager, long id);
 

	
 
		/// Destructor
 
		virtual ~AbstractBuddy();
 
@@ -59,7 +59,7 @@ class AbstractBuddy {
 
		/// Returns full JID of this buddy.
 
		/// \param hostname hostname used as domain in returned JID
 
		/// \return full JID of this buddy
 
		Swift::JID getJID(const std::string &hostname);
 
		const Swift::JID &getJID(const std::string &hostname);
 

	
 
		/// Generates whole Presennce stanza with current status/show for this buddy.
 
		/// Presence stanza does not containt "to" attribute, it has to be added manually.
 
@@ -95,10 +95,6 @@ class AbstractBuddy {
 
		/// \param flags flags
 
		BuddyFlag getFlags();
 

	
 
		/// Sets RosterManager associated with this buddy.
 
		/// \param rosterManager RosterManager
 
		void setRosterManager(RosterManager *rosterManager) { m_rosterManager = rosterManager; }
 

	
 
		/// Returns RosterManager associated with this buddy
 
		/// \return rosterManager
 
		RosterManager *getRosterManager() { return m_rosterManager; }
 
@@ -132,10 +128,13 @@ class AbstractBuddy {
 
		virtual std::string getIconHash() = 0;
 

	
 
	private:
 
		void generateJID();
 

	
 
		long m_id;
 
		bool m_online;
 
		std::string m_subscription;
 
		Swift::Presence::ref m_lastPresence;
 
		Swift::JID m_jid;
 
		BuddyFlag m_flags;
 
		RosterManager *m_rosterManager;
 
};
include/transport/rostermanager.h
Show inline comments
 
@@ -67,9 +67,12 @@ class RosterManager {
 
		boost::signal<void (AbstractBuddy *buddy)> onBuddyUnset;
 

	
 
	private:
 
		void setBuddyCallback(AbstractBuddy *buddy);
 

	
 
		std::map<std::string, AbstractBuddy *> m_buddies;
 
		Component *m_component;
 
		User *m_user;
 
		Swift::Timer::ref m_setBuddyTimer;
 
};
 

	
 
}
include/transport/user.h
Show inline comments
 
@@ -55,6 +55,9 @@ class User {
 

	
 
		RosterManager *getRosterManager() { return m_rosterManager; }
 

	
 

	
 
		Component *getComponent() { return m_component; }
 

	
 
		void setData(void *data) { m_data = data; }
 
		void *getData() { return m_data; }
 

	
spectrum/src/main.cpp
Show inline comments
 
@@ -65,11 +65,9 @@ static void buddyListNewNode(PurpleBlistNode *node) {
 
		s_buddy->addBuddy(buddy);
 
	}
 
	else {
 
		buddy->node.ui_data = (void *) new SpectrumBuddy(-1, buddy);
 
		buddy->node.ui_data = (void *) new SpectrumBuddy(user->getRosterManager(), -1, buddy);
 
		SpectrumBuddy *s_buddy = (SpectrumBuddy *) buddy->node.ui_data;
 
		s_buddy->setFlags(BUDDY_JID_ESCAPING);
 

	
 
		user->getRosterManager()->setBuddy(s_buddy);
 
	}
 
}
 

	
 
@@ -85,7 +83,6 @@ static void NodeRemoved(PurpleBlistNode *node, void *data) {
 
		s_buddy->removeBuddy(buddy);
 
		buddy->node.ui_data = NULL;
 
		if (s_buddy->getBuddiesCount() == 0) {
 
			user->getRosterManager()->unsetBuddy(s_buddy);
 
			delete s_buddy;
 
		}
 
	}
spectrum/src/spectrumbuddy.cpp
Show inline comments
 
@@ -23,7 +23,7 @@
 

	
 
#define Log(X, STRING) std::cout << "[SPECTRUM] " << X << " " << STRING << "\n";
 

	
 
SpectrumBuddy::SpectrumBuddy(long id, PurpleBuddy *buddy) : AbstractBuddy(id), m_buddy(buddy) {
 
SpectrumBuddy::SpectrumBuddy(RosterManager *rosterManager, long id, PurpleBuddy *buddy) : AbstractBuddy(rosterManager, id), m_buddy(buddy) {
 
}
 

	
 
SpectrumBuddy::~SpectrumBuddy() {
spectrum/src/spectrumbuddy.h
Show inline comments
 
@@ -27,13 +27,14 @@
 
#include "glib.h"
 
#include <algorithm>
 
#include "transport/abstractbuddy.h"
 
#include "transport/rostermanager.h"
 

	
 
using namespace Transport;
 

	
 
// Wrapper for PurpleBuddy
 
class SpectrumBuddy : public AbstractBuddy {
 
	public:
 
		SpectrumBuddy(long id, PurpleBuddy *buddy);
 
		SpectrumBuddy(RosterManager *rosterManager, long id, PurpleBuddy *buddy);
 
		virtual ~SpectrumBuddy();
 

	
 
		std::string getAlias();
src/abstractbuddy.cpp
Show inline comments
 
@@ -19,13 +19,23 @@
 
 */
 

	
 
#include "transport/abstractbuddy.h"
 
#include "transport/rostermanager.h"
 
#include "transport/user.h"
 
#include "transport/transport.h"
 

	
 
namespace Transport {
 

	
 
AbstractBuddy::AbstractBuddy(long id) : m_id(id), m_online(false), m_subscription("ask"), m_flags(BUDDY_NO_FLAG) {
 
AbstractBuddy::AbstractBuddy(RosterManager *rosterManager, long id) : m_id(id), m_online(false), m_subscription("ask"), m_flags(BUDDY_NO_FLAG), m_rosterManager(rosterManager){
 
	m_rosterManager->setBuddy(this);
 
}
 

	
 
AbstractBuddy::~AbstractBuddy() {
 
	m_rosterManager->unsetBuddy(this);
 
}
 

	
 
void AbstractBuddy::generateJID() {
 
	m_jid = Swift::JID();
 
	m_jid = Swift::JID(getSafeName(), m_rosterManager->getUser()->getComponent()->getJID().toString(), "bot");
 
}
 

	
 
void AbstractBuddy::setID(long id) {
 
@@ -38,14 +48,19 @@ long AbstractBuddy::getID() {
 

	
 
void AbstractBuddy::setFlags(BuddyFlag flags) {
 
	m_flags = flags;
 

	
 
	generateJID();
 
}
 

	
 
BuddyFlag AbstractBuddy::getFlags() {
 
	return m_flags;
 
}
 

	
 
Swift::JID AbstractBuddy::getJID(const std::string &hostname) {
 
 	return Swift::JID(getSafeName(), hostname, "bot");
 
const Swift::JID &AbstractBuddy::getJID(const std::string &hostname) {
 
	if (!m_jid.isValid()) {
 
		generateJID();
 
	}
 
	return m_jid;
 
}
 

	
 
void AbstractBuddy::setOnline() {
 
@@ -111,19 +126,22 @@ Swift::Presence::ref AbstractBuddy::generatePresenceStanza(int features, bool on
 
}
 

	
 
std::string AbstractBuddy::getSafeName() {
 
	if (m_jid.isValid()) {
 
		return m_jid.getNode();
 
	}
 
	std::string name = getName();
 
// 	Transport::instance()->protocol()->prepareUsername(name, purple_buddy_get_account(m_buddy));
 
	if (getFlags() & BUDDY_JID_ESCAPING) {
 
// 		name = JID::escapeNode(name);
 
		name = Swift::JID::getEscapedNode(name);
 
	}
 
	else {
 
		if (name.find_last_of("@") != std::string::npos) {
 
			name.replace(name.find_last_of("@"), 1, "%");
 
		}
 
	}
 
	if (name.empty()) {
 
// 	if (name.empty()) {
 
// 		Log("SpectrumBuddy::getSafeName", "Name is EMPTY! Previous was " << getName() << ".");
 
	}
 
// 	}
 
	return name;
 
}
 

	
src/rostermanager.cpp
Show inline comments
 
@@ -29,21 +29,31 @@ namespace Transport {
 
RosterManager::RosterManager(User *user, Component *component){
 
	m_user = user;
 
	m_component = component;
 
	m_setBuddyTimer = m_component->getFactories()->getTimerFactory()->createTimer(10);
 
}
 

	
 
RosterManager::~RosterManager() {
 
}
 

	
 
void RosterManager::setBuddy(AbstractBuddy *buddy) {
 
	m_setBuddyTimer->onTick.connect(boost::bind(&RosterManager::setBuddyCallback, this, buddy));
 
	m_setBuddyTimer->start();
 
}
 

	
 
void RosterManager::setBuddyCallback(AbstractBuddy *buddy) {
 
	m_setBuddyTimer->onTick.disconnect(boost::bind(&RosterManager::setBuddyCallback, this, buddy));
 

	
 
	m_buddies[buddy->getSafeName()] = buddy;
 
	buddy->setRosterManager(this);
 
	onBuddySet(buddy);
 

	
 
	if (m_setBuddyTimer->onTick.empty()) {
 
		m_setBuddyTimer->stop();
 
	}
 
}
 

	
 
void RosterManager::unsetBuddy(AbstractBuddy *buddy) {
 
	m_buddies.erase(buddy->getSafeName());
 
	onBuddyUnset(buddy);
 
	buddy->setRosterManager(NULL);
 
}
 

	
 
}
 
\ No newline at end of file
0 comments (0 inline, 0 general)