Changeset - ff3adaa3f33f
[Not reviewed]
0 7 0
HanzZ - 14 years ago 2011-11-24 12:24:26
hanzz.k@gmail.com
Working IRC nickserv + PMs
7 files changed with 43 insertions and 4 deletions:
0 comments (0 inline, 0 general)
backends/libircclient-qt/session.cpp
Show inline comments
 
@@ -201,14 +201,20 @@ void MyIrcBuffer::on_ctcpActionReceived(const QString& origin, const QString& ac
 
}
 

	
 
void MyIrcBuffer::on_numericMessageReceived(const QString& origin, uint code, const QStringList& params)
 
{
 
	switch (code) {
 
		case 251:
 
			if (suffix.empty())
 
			if (suffix.empty()) {
 
				np->handleConnected(user);
 
			}
 
			if (p->getIdentify().find(" ") != std::string::npos) {
 
				std::string to = p->getIdentify().substr(0, p->getIdentify().find(" "));
 
				std::string what = p->getIdentify().substr(p->getIdentify().find(" ") + 1);
 
				p->message(QString::fromStdString(to), QString::fromStdString(what));
 
			}
 
			break;
 
		case 332:
 
			m_topicData = params.value(2).toStdString();
 
			break;
 
		case 333:
 
			 np->handleSubject(user, params.value(1).toStdString() + suffix, m_topicData, params.value(2).toStdString());
backends/libircclient-qt/session.h
Show inline comments
 
@@ -24,22 +24,31 @@ class MyIrcSession : public Irc::Session
 
public:
 
	MyIrcSession(const std::string &user, NetworkPlugin *np, const std::string &suffix = "", QObject* parent = 0);
 
	std::map<std::string, bool> m_modes;
 
	std::string suffix;
 
	int rooms;
 

	
 
	void setIdentify(const std::string &identify) {
 
		m_identify = identify;
 
	}
 

	
 
	const std::string  &getIdentify() {
 
		return m_identify;
 
	}
 

	
 
protected Q_SLOTS:
 
    void on_connected();
 
    void on_disconnected();
 

	
 
    void on_bufferAdded(Irc::Buffer* buffer);
 
    void on_bufferRemoved(Irc::Buffer* buffer);
 

	
 
protected:
 
	NetworkPlugin *np;
 
	std::string user;
 
	std::string m_identify;
 

	
 
    virtual Irc::Buffer* createBuffer(const QString& receiver);
 
};
 

	
 
class MyIrcBuffer : public Irc::Buffer
 
{
backends/libircclient-qt/singleircnetworkplugin.cpp
Show inline comments
 
@@ -9,12 +9,19 @@ SingleIRCNetworkPlugin::SingleIRCNetworkPlugin(Config *config, Swift::QtEventLoo
 
	this->config = config;
 
	m_server = config->getUnregistered().find("service.irc_server")->second;
 
	m_socket = new QTcpSocket();
 
	m_socket->connectToHost(QString::fromStdString(host), port);
 
	connect(m_socket, SIGNAL(readyRead()), this, SLOT(readData()));
 

	
 
	if (config->getUnregistered().find("service.irc_identify") != config->getUnregistered().end()) {
 
		m_identify = config->getUnregistered().find("service.irc_identify")->second;
 
	}
 
	else {
 
		m_identify = "NickServ identify $name $password";
 
	}
 

	
 
	LOG4CXX_INFO(logger, "SingleIRCNetworkPlugin for server " << m_server << " initialized.");
 
}
 

	
 
void SingleIRCNetworkPlugin::readData() {
 
	size_t availableBytes = m_socket->bytesAvailable();
 
	if (availableBytes == 0)
 
@@ -36,12 +43,18 @@ void SingleIRCNetworkPlugin::handleLoginRequest(const std::string &user, const s
 
	}
 
	LOG4CXX_INFO(logger, user << ": Connecting " << m_server << " as " << legacyName);
 

	
 
	MyIrcSession *session = new MyIrcSession(user, this);
 
	session->setNick(QString::fromStdString(legacyName));
 
	session->connectToServer(QString::fromStdString(m_server), 6667);
 

	
 
	std::string identify = m_identify;
 
	boost::replace_all(identify, "$password", password);
 
	boost::replace_all(identify, "$name", legacyName);
 
	session->setIdentify(identify);
 

	
 
	m_sessions[user] = session;
 
}
 

	
 
void SingleIRCNetworkPlugin::handleLogoutRequest(const std::string &user, const std::string &legacyName) {
 
	if (m_sessions[user] == NULL) {
 
		LOG4CXX_WARN(logger, user << ": Already disconnected.");
backends/libircclient-qt/singleircnetworkplugin.h
Show inline comments
 
@@ -33,7 +33,8 @@ class SingleIRCNetworkPlugin : public QObject, public NetworkPlugin {
 
		void sendData(const std::string &string);
 

	
 
	private:
 
		Config *config;
 
		QTcpSocket *m_socket;
 
		std::string m_server;
 
		std::string m_identify;
 
};
include/transport/conversation.h
Show inline comments
 
@@ -71,12 +71,16 @@ class Conversation {
 

	
 
		/// \param nickname XMPP user nickname in MUC rooms.
 
		void setNickname(const std::string &nickname) {
 
			m_nickname = nickname;
 
		}
 

	
 
		const std::string &getNickname() {
 
			return m_nickname;
 
		}
 

	
 
		void setJID(const Swift::JID &jid) {
 
			m_jid = jid;
 
		}
 

	
 
		/// Sends message to Legacy network.
 

	
src/conversation.cpp
Show inline comments
 
@@ -53,31 +53,36 @@ void Conversation::handleMessage(boost::shared_ptr<Swift::Message> &message, con
 
		message->setType(Swift::Message::Groupchat);
 
	}
 
	else {
 
		message->setType(Swift::Message::Chat);
 
	}
 

	
 
	std::string n = nickname;
 
	if (n.empty() && !m_room.empty() && !m_muc) {
 
		n = m_nickname;
 
	}
 

	
 
	if (message->getType() != Swift::Message::Groupchat) {
 
		message->setTo(m_jid);
 
		// normal message
 
		if (nickname.empty()) {
 
		if (n.empty()) {
 
			Buddy *buddy = m_conversationManager->getUser()->getRosterManager()->getBuddy(m_legacyName);
 
			if (buddy) {
 
				message->setFrom(buddy->getJID());
 
			}
 
			else {
 
				message->setFrom(Swift::JID(Swift::JID::getEscapedNode(m_legacyName), m_conversationManager->getComponent()->getJID().toBare()));
 
			}
 
		}
 
		// PM message
 
		else {
 
			if (m_room.empty()) {
 
				message->setFrom(Swift::JID(nickname, m_conversationManager->getComponent()->getJID().toBare(), "user"));
 
				message->setFrom(Swift::JID(n, m_conversationManager->getComponent()->getJID().toBare(), "user"));
 
			}
 
			else {
 
				message->setFrom(Swift::JID(m_room, m_conversationManager->getComponent()->getJID().toBare(), nickname));
 
				message->setFrom(Swift::JID(m_room, m_conversationManager->getComponent()->getJID().toBare(), n));
 
			}
 
		}
 
		m_conversationManager->getComponent()->getStanzaChannel()->sendMessage(message);
 
	}
 
	else {
 
		std::string legacyName = m_legacyName;
src/conversationmanager.cpp
Show inline comments
 
@@ -87,12 +87,13 @@ void ConversationManager::handleMessageReceived(Swift::Message::ref message) {
 
	else if (m_convs[name]->isMUC() && message->getType() != Swift::Message::Groupchat) {
 
		std::string room_name = name;
 
		name = message->getTo().getResource();
 
		if (!m_convs[name]) {
 
			m_convs[name] = m_component->getFactory()->createConversation(this, name);
 
			m_convs[name]->setRoom(room_name);
 
			m_convs[name]->setNickname(name);
 
		}
 
	}
 

	
 
	// update resource and send the message
 
	m_convs[name]->setJID(message->getFrom());
 
	m_convs[name]->sendMessage(message);
0 comments (0 inline, 0 general)