Files @ cbcf2f145298
Branch filter:

Location: libtransport.git/backends/libircclient-qt/session.cpp - annotation

HanzZ
networkplugin is now in separate library libtransport-plugin + does not depend on boost/swiften/libtransport
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
8e03fbec4701
1ebe5535c4f3
0a33a3100eb9
1ebe5535c4f3
0a33a3100eb9
0a33a3100eb9
2a40419b2bc4
1ebe5535c4f3
1ebe5535c4f3
52991c925d39
52991c925d39
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
632afeabe03a
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
0a33a3100eb9
1ebe5535c4f3
1ebe5535c4f3
0a33a3100eb9
1ebe5535c4f3
1ebe5535c4f3
0a33a3100eb9
0a33a3100eb9
8e03fbec4701
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
cbcf2f145298
cbcf2f145298
8e03fbec4701
cbcf2f145298
8e03fbec4701
8e03fbec4701
8e03fbec4701
8e03fbec4701
8e03fbec4701
8e03fbec4701
457d19d1ec41
457d19d1ec41
cbcf2f145298
8e03fbec4701
8e03fbec4701
cbcf2f145298
1ebe5535c4f3
1ebe5535c4f3
8e03fbec4701
8e03fbec4701
cbcf2f145298
8e03fbec4701
8e03fbec4701
cbcf2f145298
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
164704c8aa6c
1ebe5535c4f3
1ebe5535c4f3
457d19d1ec41
457d19d1ec41
8e03fbec4701
cbcf2f145298
632afeabe03a
cbcf2f145298
8e03fbec4701
8e03fbec4701
8e03fbec4701
8e03fbec4701
8e03fbec4701
8e03fbec4701
ec94eefaf4aa
ec94eefaf4aa
8e03fbec4701
cbcf2f145298
8e03fbec4701
8e03fbec4701
cbcf2f145298
8e03fbec4701
cbcf2f145298
cbcf2f145298
1ebe5535c4f3
1ebe5535c4f3
a1eba9bedbbd
a1eba9bedbbd
a1eba9bedbbd
a1eba9bedbbd
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
2add374fbd61
2add374fbd61
2add374fbd61
2add374fbd61
2add374fbd61
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
0a33a3100eb9
52991c925d39
52991c925d39
52991c925d39
a1eba9bedbbd
a1eba9bedbbd
a1eba9bedbbd
a1eba9bedbbd
a1eba9bedbbd
a1eba9bedbbd
0a33a3100eb9
0a33a3100eb9
0a33a3100eb9
0a33a3100eb9
0a33a3100eb9
cbcf2f145298
8e03fbec4701
8e03fbec4701
8e03fbec4701
632afeabe03a
cbcf2f145298
0a33a3100eb9
0a33a3100eb9
0a33a3100eb9
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
1ebe5535c4f3
/*
 * Copyright (C) 2008-2009 J-P Nurmi jpnurmi@gmail.com
 *
 * This example is free, and not covered by LGPL license. There is no
 * restriction applied to their modification, redistribution, using and so on.
 * You can study them, modify them, use them in your own program - either
 * completely or partially. By using it you may give me some credits in your
 * program, but you don't have to.
 */

#include "session.h"
#include <QtCore>
#include <iostream>
#include "Swiften/Elements/StatusShow.h"

MyIrcSession::MyIrcSession(const std::string &user, NetworkPlugin *np, QObject* parent) : Irc::Session(parent)
{
	this->np = np;
	this->user = user;
	connect(this, SIGNAL(disconnected()), SLOT(on_disconnected()));
}

void MyIrcSession::on_connected(){
	std::cout << "connected:\n";
}

void MyIrcSession::on_disconnected()
{
    std::cout << "disconnected:\n";
    np->handleDisconnected(user, 0, "");
}

void MyIrcSession::on_bufferAdded(Irc::Buffer* buffer)
{
    qDebug() << "buffer added:" << buffer->receiver();
}

void MyIrcSession::on_bufferRemoved(Irc::Buffer* buffer)
{
    qDebug() << "buffer removed:" << buffer->receiver();
}

Irc::Buffer* MyIrcSession::createBuffer(const QString& receiver)
{
    return new MyIrcBuffer(receiver, user, np, this);
}

MyIrcBuffer::MyIrcBuffer(const QString& receiver, const std::string &user, NetworkPlugin *np, Irc::Session* parent)
    : Irc::Buffer(receiver, parent)
{
	this->np = np;
	this->user = user;
	p = (MyIrcSession *) parent;
    connect(this, SIGNAL(receiverChanged(QString)), SLOT(on_receiverChanged(QString)));
    connect(this, SIGNAL(joined(QString)), SLOT(on_joined(QString)));
    connect(this, SIGNAL(parted(QString, QString)), SLOT(on_parted(QString, QString)));
    connect(this, SIGNAL(quit(QString, QString)), SLOT(on_quit(QString, QString)));
    connect(this, SIGNAL(nickChanged(QString, QString)), SLOT(on_nickChanged(QString, QString)));
    connect(this, SIGNAL(modeChanged(QString, QString, QString)), SLOT(on_modeChanged(QString, QString, QString)));
    connect(this, SIGNAL(topicChanged(QString, QString)), SLOT(on_topicChanged(QString, QString)));
    connect(this, SIGNAL(invited(QString, QString, QString)), SLOT(on_invited(QString, QString, QString)));
    connect(this, SIGNAL(kicked(QString, QString, QString)), SLOT(on_kicked(QString, QString, QString)));
    connect(this, SIGNAL(messageReceived(QString, QString, Irc::Buffer::MessageFlags)),
                  SLOT(on_messageReceived(QString, QString, Irc::Buffer::MessageFlags)));
    connect(this, SIGNAL(noticeReceived(QString, QString, Irc::Buffer::MessageFlags)),
                  SLOT(on_noticeReceived(QString, QString, Irc::Buffer::MessageFlags)));
    connect(this, SIGNAL(ctcpRequestReceived(QString, QString, Irc::Buffer::MessageFlags)),
                  SLOT(on_ctcpRequestReceived(QString, QString, Irc::Buffer::MessageFlags)));
    connect(this, SIGNAL(ctcpReplyReceived(QString, QString, Irc::Buffer::MessageFlags)),
                  SLOT(on_ctcpReplyReceived(QString, QString, Irc::Buffer::MessageFlags)));
    connect(this, SIGNAL(ctcpActionReceived(QString, QString, Irc::Buffer::MessageFlags)),
                  SLOT(on_ctcpActionReceived(QString, QString, Irc::Buffer::MessageFlags)));
    connect(this, SIGNAL(numericMessageReceived(QString, uint, QStringList)), SLOT(on_numericMessageReceived(QString, uint, QStringList)));
    connect(this, SIGNAL(unknownMessageReceived(QString, QStringList)), SLOT(on_unknownMessageReceived(QString, QStringList)));
}

void MyIrcBuffer::on_receiverChanged(const QString& receiver)
{
    qDebug() << "receiver changed:" << receiver;
}

bool MyIrcBuffer::correctNickname(std::string &nickname) {
	bool flags = 0;
	switch(nickname.at(0)) {
		case '@': nickname = nickname.substr(1); flags = 1; break;
		case '+': nickname = nickname.substr(1); break;
		default: break;
	}
	return flags;
}

void MyIrcBuffer::on_joined(const QString& origin) {
	qDebug() << "joined:" << receiver() << origin;
	bool flags = 0;
	std::string nickname = origin.toStdString();
	flags = correctNickname(nickname);
	np->handleParticipantChanged(user, origin.toStdString(), receiver().toStdString(), (int) flags, pbnetwork::STATUS_ONLINE);
}

void MyIrcBuffer::on_parted(const QString& origin, const QString& message) {
	qDebug() << "parted:" << receiver() << origin << message;
	bool flags = 0;
	std::string nickname = origin.toStdString();
	flags = correctNickname(nickname);
	np->handleParticipantChanged(user, nickname, receiver().toStdString(),(int) flags, pbnetwork::STATUS_NONE, message.toStdString());
}

void MyIrcBuffer::on_quit(const QString& origin, const QString& message)
{
    qDebug() << "quit:" << receiver() << origin << message;
	on_parted(origin, message);
}

void MyIrcBuffer::on_nickChanged(const QString& origin, const QString& nick) {
	qDebug() << "nick changed:" << receiver() << origin << nick;
	std::string nickname = origin.toStdString();
	bool flags = p->m_modes[receiver().toStdString() + nickname];
// 	std::cout << receiver().toStdString() + nickname << " " << flags <<  "\n";
	np->handleParticipantChanged(user, nickname, receiver().toStdString(),(int) flags, pbnetwork::STATUS_ONLINE, "", nick.toStdString());
}

void MyIrcBuffer::on_modeChanged(const QString& origin, const QString& mode, const QString& args) {
	// mode changed: "#testik" "HanzZ" "+o" "hanzz_k" 
	qDebug() << "mode changed:" << receiver() << origin << mode << args;
	std::string nickname = args.toStdString();
	if (nickname.empty())
		return;
	if (mode == "+o") {
		p->m_modes[receiver().toStdString() + nickname] = 1;
	}
	else {
		p->m_modes[receiver().toStdString() + nickname] = 0;
	}
	bool flags = p->m_modes[receiver().toStdString() + nickname];
	np->handleParticipantChanged(user, nickname, receiver().toStdString(),(int) flags, pbnetwork::STATUS_ONLINE, "");
}

void MyIrcBuffer::on_topicChanged(const QString& origin, const QString& topic) {
	//topic changed: "#testik" "HanzZ" "test"
	qDebug() << "topic changed:" << receiver() << origin << topic;
	np->handleSubject(user, receiver().toStdString(), topic.toStdString(), origin.toStdString());
}

void MyIrcBuffer::on_invited(const QString& origin, const QString& receiver, const QString& channel)
{
    qDebug() << "invited:" << Irc::Buffer::receiver() << origin << receiver << channel;
}

void MyIrcBuffer::on_kicked(const QString& origin, const QString& nick, const QString& message)
{
    qDebug() << "kicked:" << receiver() << origin << nick << message;
}

void MyIrcBuffer::on_messageReceived(const QString& origin, const QString& message, Irc::Buffer::MessageFlags flags) {
	qDebug() << "message received:" << receiver() << origin << message << (flags & Irc::Buffer::IdentifiedFlag ? "(identified!)" : "(not identified)");
	if (!receiver().startsWith("#") && (flags & Irc::Buffer::EchoFlag))
		return;
	np->handleMessage(user, receiver().toStdString(), message.toStdString(), origin.toStdString());
}

void MyIrcBuffer::on_noticeReceived(const QString& origin, const QString& notice, Irc::Buffer::MessageFlags flags)
{
    qDebug() << "notice received:" << receiver() << origin << notice
             << (flags & Irc::Buffer::IdentifiedFlag ? "(identified!)" : "(not identified)");
}

void MyIrcBuffer::on_ctcpRequestReceived(const QString& origin, const QString& request, Irc::Buffer::MessageFlags flags)
{
    qDebug() << "ctcp request received:" << receiver() << origin << request
             << (flags & Irc::Buffer::IdentifiedFlag ? "(identified!)" : "(not identified)");
}

void MyIrcBuffer::on_ctcpReplyReceived(const QString& origin, const QString& reply, Irc::Buffer::MessageFlags flags)
{
    qDebug() << "ctcp reply received:" << receiver() << origin << reply
             << (flags & Irc::Buffer::IdentifiedFlag ? "(identified!)" : "(not identified)");
}

void MyIrcBuffer::on_ctcpActionReceived(const QString& origin, const QString& action, Irc::Buffer::MessageFlags flags)
{
    qDebug() << "ctcp action received:" << receiver() << origin << action
             << (flags & Irc::Buffer::IdentifiedFlag ? "(identified!)" : "(not identified)");
}

void MyIrcBuffer::on_numericMessageReceived(const QString& origin, uint code, const QStringList& params)
{
	switch (code) {
		case 251:
			np->handleConnected(user);
			break;
		case 332:
			m_topicData = params.value(2).toStdString();
			break;
		case 333:
			np->handleSubject(user, params.value(1).toStdString(), m_topicData, params.value(2).toStdString());
			break;
		case 353:
			QString channel = params.value(2);
			QStringList members = params.value(3).split(" ");

			for (int i = 0; i < members.size(); i++) {
				bool flags = 0;
				std::string nickname = members.at(i).toStdString();
				flags = correctNickname(nickname);
				p->m_modes[channel.toStdString() + nickname] = flags;
// 				std::cout << channel.toStdString() + nickname << " " << flags << "\n";
				np->handleParticipantChanged(user, nickname, channel.toStdString(),(int) flags, pbnetwork::STATUS_ONLINE);
			}
			break;
	}
    qDebug() << "numeric message received:" << receiver() << origin << code << params;
}

void MyIrcBuffer::on_unknownMessageReceived(const QString& origin, const QStringList& params)
{
    qDebug() << "unknown message received:" << receiver() << origin << params;
}