Works with libCommuni now (libircclient-qt renamed)
This commit is contained in:
parent
ff3adaa3f3
commit
e312a8602e
15 changed files with 566 additions and 375 deletions
|
@ -44,8 +44,8 @@ message( STATUS "Found Boost: ${Boost_LIBRARIES}, ${Boost_INCLUDE_DIR}")
|
|||
set(Protobuf_DIR "${CMAKE_SOURCE_DIR}/cmake_modules")
|
||||
find_package(Protobuf REQUIRED)
|
||||
|
||||
set(IRCClientQt_DIR "${CMAKE_SOURCE_DIR}/cmake_modules")
|
||||
find_package(IRCClientQt)
|
||||
set(Communi_DIR "${CMAKE_SOURCE_DIR}/cmake_modules")
|
||||
find_package(Communi)
|
||||
|
||||
set(log4cxx_DIR "${CMAKE_SOURCE_DIR}/cmake_modules")
|
||||
find_package(log4cxx)
|
||||
|
@ -123,13 +123,13 @@ if (PROTOBUF_FOUND)
|
|||
endif()
|
||||
|
||||
if(IRC_FOUND)
|
||||
ADD_DEFINITIONS(-DIRC_SHARED)
|
||||
ADD_DEFINITIONS(-DCOMMUNI_SHARED)
|
||||
message("IRC plugin : yes")
|
||||
include_directories(${QT_QTNETWORK_INCLUDE_DIR})
|
||||
include_directories(${IRC_INCLUDE_DIR})
|
||||
include(${QT_USE_FILE})
|
||||
else()
|
||||
message("IRC plugin : no (install libircclient-qt and libprotobuf-dev)")
|
||||
message("IRC plugin : no (install libCommuni and libprotobuf-dev)")
|
||||
endif()
|
||||
|
||||
message("Frotz plugin : yes")
|
||||
|
|
|
@ -4,7 +4,7 @@ if (PROTOBUF_FOUND)
|
|||
endif()
|
||||
|
||||
if (IRC_FOUND)
|
||||
ADD_SUBDIRECTORY(libircclient-qt)
|
||||
ADD_SUBDIRECTORY(libcommuni)
|
||||
endif()
|
||||
|
||||
if (NOT WIN32)
|
||||
|
|
10
backends/libcommuni/CMakeLists.txt
Normal file
10
backends/libcommuni/CMakeLists.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
FILE(GLOB SRC *.cpp)
|
||||
FILE(GLOB HEADERS *.h)
|
||||
QT4_WRAP_CPP(SRC ${HEADERS})
|
||||
ADD_EXECUTABLE(spectrum2_libcommuni_backend ${SRC})
|
||||
|
||||
target_link_libraries(spectrum2_libcommuni_backend ${IRC_LIBRARY} ${QT_LIBRARIES} transport-plugin transport pthread)
|
||||
|
||||
INSTALL(TARGETS spectrum2_libcommuni_backend RUNTIME DESTINATION bin)
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
#include "ircnetworkplugin.h"
|
||||
#include <IrcCommand>
|
||||
#include <IrcMessage>
|
||||
|
||||
IRCNetworkPlugin::IRCNetworkPlugin(Config *config, Swift::QtEventLoop *loop, const std::string &host, int port) {
|
||||
this->config = config;
|
||||
|
@ -26,8 +28,10 @@ void IRCNetworkPlugin::handleLoginRequest(const std::string &user, const std::st
|
|||
if (CONFIG_BOOL(config, "service.server_mode")) {
|
||||
MyIrcSession *session = new MyIrcSession(user, this);
|
||||
std::string h = user.substr(0, user.find("@"));
|
||||
session->setNick(QString::fromStdString(h.substr(0, h.find("%"))));
|
||||
session->connectToServer(QString::fromStdString(h.substr(h.find("%") + 1)), 6667);
|
||||
session->setNickName(QString::fromStdString(h.substr(0, h.find("%"))));
|
||||
session->setHost(QString::fromStdString(h.substr(h.find("%") + 1)));
|
||||
session->setPort(6667);
|
||||
session->open();
|
||||
std::cout << "CONNECTING IRC NETWORK " << h.substr(h.find("%") + 1) << "\n";
|
||||
m_sessions[user] = session;
|
||||
}
|
||||
|
@ -39,7 +43,7 @@ void IRCNetworkPlugin::handleLoginRequest(const std::string &user, const std::st
|
|||
void IRCNetworkPlugin::handleLogoutRequest(const std::string &user, const std::string &legacyName) {
|
||||
if (m_sessions[user] == NULL)
|
||||
return;
|
||||
m_sessions[user]->disconnectFromServer();
|
||||
m_sessions[user]->close();
|
||||
m_sessions[user]->deleteLater();
|
||||
m_sessions.erase(user);
|
||||
}
|
||||
|
@ -68,7 +72,7 @@ void IRCNetworkPlugin::handleMessageSendRequest(const std::string &user, const s
|
|||
}
|
||||
}
|
||||
std::cout << "MESSAGE " << u << " " << r << "\n";
|
||||
m_sessions[u]->message(QString::fromStdString(r), QString::fromStdString(message));
|
||||
m_sessions[u]->sendCommand(IrcCommand::createMessage(QString::fromStdString(r), QString::fromStdString(message)));
|
||||
std::cout << "SENT\n";
|
||||
}
|
||||
|
||||
|
@ -85,8 +89,10 @@ void IRCNetworkPlugin::handleJoinRoomRequest(const std::string &user, const std:
|
|||
if (room.find("@") != std::string::npos) {
|
||||
// suffix is %irc.freenode.net to let MyIrcSession return #room%irc.freenode.net
|
||||
MyIrcSession *session = new MyIrcSession(user, this, room.substr(room.find("@")));
|
||||
session->setNick(QString::fromStdString(nickname));
|
||||
session->connectToServer(QString::fromStdString(room.substr(room.find("@") + 1)), 6667);
|
||||
session->setNickName(QString::fromStdString(nickname));
|
||||
session->setHost(QString::fromStdString(room.substr(room.find("@") + 1)));
|
||||
session->setPort(6667);
|
||||
session->open();
|
||||
std::cout << "CONNECTING IRC NETWORK " << room.substr(room.find("@") + 1) << "\n";
|
||||
std::cout << "SUFFIX " << room.substr(room.find("@")) << "\n";
|
||||
m_sessions[u] = session;
|
||||
|
@ -96,11 +102,11 @@ void IRCNetworkPlugin::handleJoinRoomRequest(const std::string &user, const std:
|
|||
}
|
||||
}
|
||||
std::cout << "JOINING " << r << "\n";
|
||||
m_sessions[u]->addAutoJoinChannel(QString::fromStdString(r));
|
||||
m_sessions[u]->join(QString::fromStdString(r), QString::fromStdString(password));
|
||||
m_sessions[u]->addAutoJoinChannel(r);
|
||||
m_sessions[u]->sendCommand(IrcCommand::createJoin(QString::fromStdString(r), QString::fromStdString(password)));
|
||||
m_sessions[u]->rooms += 1;
|
||||
// update nickname, because we have nickname per session, no nickname per room.
|
||||
handleRoomNicknameChanged(user, r, m_sessions[u]->nick().toStdString());
|
||||
handleRoomNicknameChanged(user, r, m_sessions[u]->nickName().toStdString());
|
||||
}
|
||||
|
||||
void IRCNetworkPlugin::handleLeaveRoomRequest(const std::string &user, const std::string &room) {
|
||||
|
@ -114,12 +120,12 @@ void IRCNetworkPlugin::handleLeaveRoomRequest(const std::string &user, const std
|
|||
if (m_sessions[u] == NULL)
|
||||
return;
|
||||
|
||||
m_sessions[u]->part(QString::fromStdString(r));
|
||||
m_sessions[u]->removeAutoJoinChannel(QString::fromStdString(r));
|
||||
m_sessions[u]->sendCommand(IrcCommand::createPart(QString::fromStdString(r)));
|
||||
m_sessions[u]->removeAutoJoinChannel(r);
|
||||
m_sessions[u]->rooms -= 1;
|
||||
|
||||
if (m_sessions[u]->rooms <= 0) {
|
||||
m_sessions[u]->disconnectFromServer();
|
||||
m_sessions[u]->close();
|
||||
m_sessions[u]->deleteLater();
|
||||
m_sessions.erase(u);
|
||||
}
|
400
backends/libcommuni/session.cpp
Normal file
400
backends/libcommuni/session.cpp
Normal file
|
@ -0,0 +1,400 @@
|
|||
/*
|
||||
* 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"
|
||||
#include <IrcCommand>
|
||||
#include <IrcMessage>
|
||||
|
||||
#include "log4cxx/logger.h"
|
||||
|
||||
using namespace log4cxx;
|
||||
|
||||
static LoggerPtr logger = log4cxx::Logger::getLogger("IRCSession");
|
||||
|
||||
MyIrcSession::MyIrcSession(const std::string &user, NetworkPlugin *np, const std::string &suffix, QObject* parent) : IrcSession(parent)
|
||||
{
|
||||
this->np = np;
|
||||
this->user = user;
|
||||
this->suffix = suffix;
|
||||
rooms = 0;
|
||||
connect(this, SIGNAL(disconnected()), SLOT(on_disconnected()));
|
||||
connect(this, SIGNAL(connected()), SLOT(on_connected()));
|
||||
connect(this, SIGNAL(messageReceived(IrcMessage*)), this, SLOT(onMessageReceived(IrcMessage*)));
|
||||
}
|
||||
|
||||
void MyIrcSession::on_connected() {
|
||||
if (suffix.empty()) {
|
||||
np->handleConnected(user);
|
||||
}
|
||||
|
||||
for(std::list<std::string>::const_iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) {
|
||||
sendCommand(IrcCommand::createJoin(QString::fromStdString(*it)));
|
||||
}
|
||||
|
||||
if (getIdentify().find(" ") != std::string::npos) {
|
||||
std::string to = getIdentify().substr(0, getIdentify().find(" "));
|
||||
std::string what = getIdentify().substr(getIdentify().find(" ") + 1);
|
||||
sendCommand(IrcCommand::createMessage(QString::fromStdString(to), QString::fromStdString(what)));
|
||||
}
|
||||
}
|
||||
|
||||
void MyIrcSession::on_disconnected() {
|
||||
if (suffix.empty())
|
||||
np->handleDisconnected(user, 0, "");
|
||||
}
|
||||
|
||||
bool MyIrcSession::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 MyIrcSession::on_joined(IrcMessage *message) {
|
||||
IrcJoinMessage *m = (IrcJoinMessage *) message;
|
||||
bool flags = 0;
|
||||
std::string nickname = m->sender().name().toStdString();
|
||||
flags = correctNickname(nickname);
|
||||
np->handleParticipantChanged(user, nickname, m->channel().toStdString() + suffix, (int) flags, pbnetwork::STATUS_ONLINE);
|
||||
LOG4CXX_INFO(logger, user << ": Joined " << m->parameters()[0].toStdString());
|
||||
}
|
||||
|
||||
|
||||
void MyIrcSession::on_parted(IrcMessage *message) {
|
||||
IrcPartMessage *m = (IrcPartMessage *) message;
|
||||
bool flags = 0;
|
||||
std::string nickname = m->sender().name().toStdString();
|
||||
flags = correctNickname(nickname);
|
||||
LOG4CXX_INFO(logger, user << ": " << nickname << " parted " << m->channel().toStdString() + suffix);
|
||||
np->handleParticipantChanged(user, nickname, m->channel().toStdString() + suffix,(int) flags, pbnetwork::STATUS_NONE, m->reason().toStdString());
|
||||
}
|
||||
|
||||
void MyIrcSession::on_quit(IrcMessage *message) {
|
||||
IrcQuitMessage *m = (IrcQuitMessage *) message;
|
||||
for(std::list<std::string>::const_iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) {
|
||||
bool flags = 0;
|
||||
std::string nickname = m->sender().name().toStdString();
|
||||
flags = correctNickname(nickname);
|
||||
LOG4CXX_INFO(logger, user << ": " << nickname << " quit " << (*it) + suffix);
|
||||
np->handleParticipantChanged(user, nickname, (*it) + suffix,(int) flags, pbnetwork::STATUS_NONE, m->reason().toStdString());
|
||||
}
|
||||
}
|
||||
|
||||
void MyIrcSession::on_nickChanged(IrcMessage *message) {
|
||||
IrcNickMessage *m = (IrcNickMessage *) message;
|
||||
|
||||
for(std::list<std::string>::const_iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) {
|
||||
std::string nickname = m->sender().name().toStdString();
|
||||
bool flags = m_modes[(*it) + nickname];
|
||||
LOG4CXX_INFO(logger, user << ": " << nickname << " changed nickname to " << m->nick().toStdString());
|
||||
np->handleParticipantChanged(user, nickname, (*it) + suffix,(int) flags, pbnetwork::STATUS_ONLINE, "", m->nick().toStdString());
|
||||
}
|
||||
}
|
||||
|
||||
void MyIrcSession::on_modeChanged(IrcMessage *message) {
|
||||
IrcModeMessage *m = (IrcModeMessage *) message;
|
||||
|
||||
// mode changed: "#testik" "HanzZ" "+o" "hanzz_k"
|
||||
std::string nickname = m->argument().toStdString();
|
||||
std::string mode = m->mode().toStdString();
|
||||
if (nickname.empty())
|
||||
return;
|
||||
LOG4CXX_INFO(logger, user << ": " << nickname << " changed mode to " << mode);
|
||||
for(std::list<std::string>::const_iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) {
|
||||
if (mode == "+o") {
|
||||
m_modes[(*it) + nickname] = 1;
|
||||
}
|
||||
else {
|
||||
m_modes[(*it) + nickname] = 0;
|
||||
}
|
||||
bool flags = m_modes[(*it) + nickname];
|
||||
np->handleParticipantChanged(user, nickname, (*it) + suffix,(int) flags, pbnetwork::STATUS_ONLINE, "");
|
||||
}
|
||||
}
|
||||
|
||||
void MyIrcSession::on_topicChanged(IrcMessage *message) {
|
||||
IrcTopicMessage *m = (IrcTopicMessage *) message;
|
||||
|
||||
bool flags = 0;
|
||||
std::string nickname = m->sender().name().toStdString();
|
||||
flags = correctNickname(nickname);
|
||||
|
||||
LOG4CXX_INFO(logger, user << ": " << nickname << " topic changed to " << m->topic().toStdString());
|
||||
np->handleSubject(user, m->channel().toStdString() + suffix, m->topic().toStdString(), nickname);
|
||||
}
|
||||
|
||||
void MyIrcSession::on_messageReceived(IrcMessage *message) {
|
||||
IrcPrivateMessage *m = (IrcPrivateMessage *) message;
|
||||
|
||||
std::string target = m->target().toStdString();
|
||||
LOG4CXX_INFO(logger, user << ": Message from " << target);
|
||||
if (target.find("#") == 0) {
|
||||
bool flags = 0;
|
||||
std::string nickname = m->sender().name().toStdString();
|
||||
flags = correctNickname(nickname);
|
||||
np->handleMessage(user, target + suffix, m->message().toStdString(), nickname);
|
||||
}
|
||||
else {
|
||||
bool flags = 0;
|
||||
std::string nickname = m->sender().name().toStdString();
|
||||
flags = correctNickname(nickname);
|
||||
np->handleMessage(user, nickname, m->message().toStdString());
|
||||
}
|
||||
}
|
||||
|
||||
void MyIrcSession::on_numericMessageReceived(IrcMessage *message) {
|
||||
IrcNumericMessage *m = (IrcNumericMessage *) message;
|
||||
switch (m->code()) {
|
||||
case 332:
|
||||
m_topicData = m->parameters().value(2).toStdString();
|
||||
break;
|
||||
case 333:
|
||||
np->handleSubject(user, m->parameters().value(1).toStdString() + suffix, m_topicData, m->parameters().value(2).toStdString());
|
||||
break;
|
||||
case 353:
|
||||
QString channel = m->parameters().value(2);
|
||||
QStringList members = m->parameters().value(3).split(" ");
|
||||
|
||||
for (int i = 0; i < members.size(); i++) {
|
||||
bool flags = 0;
|
||||
std::string nickname = members.at(i).toStdString();
|
||||
flags = correctNickname(nickname);
|
||||
m_modes[channel.toStdString() + nickname] = flags;
|
||||
np->handleParticipantChanged(user, nickname, channel.toStdString() + suffix,(int) flags, pbnetwork::STATUS_ONLINE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
//qDebug() << "numeric message received:" << receiver() << origin << code << params;
|
||||
}
|
||||
|
||||
void MyIrcSession::onMessageReceived(IrcMessage *message) {
|
||||
LOG4CXX_INFO(logger, user << ": " << message->toString().toStdString());
|
||||
switch (message->type()) {
|
||||
case IrcMessage::Join:
|
||||
on_joined(message);
|
||||
break;
|
||||
case IrcMessage::Part:
|
||||
on_parted(message);
|
||||
break;
|
||||
case IrcMessage::Quit:
|
||||
on_quit(message);
|
||||
break;
|
||||
case IrcMessage::Nick:
|
||||
on_nickChanged(message);
|
||||
break;
|
||||
case IrcMessage::Mode:
|
||||
on_modeChanged(message);
|
||||
break;
|
||||
case IrcMessage::Topic:
|
||||
on_topicChanged(message);
|
||||
break;
|
||||
case IrcMessage::Private:
|
||||
on_messageReceived(message);
|
||||
break;
|
||||
case IrcMessage::Numeric:
|
||||
on_numericMessageReceived(message);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//MyIrcBuffer::MyIrcBuffer(const QString& receiver, const std::string &user, NetworkPlugin *np, const std::string &suffix, Irc::Session* parent)
|
||||
// : Irc::Buffer(receiver, parent)
|
||||
//{
|
||||
// this->np = np;
|
||||
// this->user = user;
|
||||
// this->suffix = suffix;
|
||||
// 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) {
|
||||
// LOG4CXX_INFO(logger, user << ": " << origin.toStdString() << " joined " << receiver().toStdString() + suffix);
|
||||
// bool flags = 0;
|
||||
// std::string nickname = origin.toStdString();
|
||||
// flags = correctNickname(nickname);
|
||||
// np->handleParticipantChanged(user, origin.toStdString(), receiver().toStdString() + suffix, (int) flags, pbnetwork::STATUS_ONLINE);
|
||||
//}
|
||||
|
||||
//void MyIrcBuffer::on_parted(const QString& origin, const QString& message) {
|
||||
// LOG4CXX_INFO(logger, user << ": " << origin.toStdString() << " parted " << receiver().toStdString() + suffix);
|
||||
// qDebug() << "parted:" << receiver() << origin << message;
|
||||
// bool flags = 0;
|
||||
// std::string nickname = origin.toStdString();
|
||||
// flags = correctNickname(nickname);
|
||||
// np->handleParticipantChanged(user, nickname, receiver().toStdString() + suffix,(int) flags, pbnetwork::STATUS_NONE, message.toStdString());
|
||||
//}
|
||||
|
||||
//void MyIrcBuffer::on_quit(const QString& origin, const QString& message) {
|
||||
// on_parted(origin, message);
|
||||
//}
|
||||
|
||||
//void MyIrcBuffer::on_nickChanged(const QString& origin, const QString& nick) {
|
||||
// LOG4CXX_INFO(logger, user << ": " << origin.toStdString() << " changed nickname to " << nick.toStdString());
|
||||
// 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() + suffix,(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"
|
||||
// std::string nickname = args.toStdString();
|
||||
// if (nickname.empty())
|
||||
// return;
|
||||
// LOG4CXX_INFO(logger, user << ": " << nickname << " changed mode to " << mode.toStdString());
|
||||
// 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() + suffix,(int) flags, pbnetwork::STATUS_ONLINE, "");
|
||||
//}
|
||||
|
||||
//void MyIrcBuffer::on_topicChanged(const QString& origin, const QString& topic) {
|
||||
// //topic changed: "#testik" "HanzZ" "test"
|
||||
// LOG4CXX_INFO(logger, user << ": " << origin.toStdString() << " topic changed to " << topic.toStdString());
|
||||
// np->handleSubject(user, receiver().toStdString() + suffix, 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;
|
||||
// std::string r = receiver().toStdString();
|
||||
//// if (!suffix.empty()) {
|
||||
//// r = receiver().replace('@', '%').toStdString();
|
||||
//// }
|
||||
// LOG4CXX_INFO(logger, user << ": Message from " << r);
|
||||
// if (r.find("#") == 0) {
|
||||
// np->handleMessage(user, r + suffix, message.toStdString(), origin.toStdString());
|
||||
// }
|
||||
// else {
|
||||
// np->handleMessage(user, r + suffix, message.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:
|
||||
// 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());
|
||||
// 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() + suffix << " " << flags << "\n";
|
||||
// np->handleParticipantChanged(user, nickname, channel.toStdString() + suffix,(int) flags, pbnetwork::STATUS_ONLINE);
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
// LOG4CXX_INFO(logger, user << ": Numeric message received " << receiver().toStdString() << " " << origin.toStdString() << " " << code);
|
||||
// //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;
|
||||
//}
|
103
backends/libcommuni/session.h
Normal file
103
backends/libcommuni/session.h
Normal file
|
@ -0,0 +1,103 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef SESSION_H
|
||||
#define SESSION_H
|
||||
|
||||
#include <IrcSession>
|
||||
#include <transport/networkplugin.h>
|
||||
|
||||
using namespace Transport;
|
||||
|
||||
class MyIrcSession : public IrcSession
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
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 addAutoJoinChannel(const std::string &channel) {
|
||||
m_autoJoin.push_back(channel);
|
||||
}
|
||||
|
||||
void removeAutoJoinChannel(const std::string &channel) {
|
||||
m_autoJoin.remove(channel);
|
||||
}
|
||||
|
||||
void setIdentify(const std::string &identify) {
|
||||
m_identify = identify;
|
||||
}
|
||||
|
||||
const std::string &getIdentify() {
|
||||
return m_identify;
|
||||
}
|
||||
|
||||
bool correctNickname(std::string &nickname);
|
||||
|
||||
void on_joined(IrcMessage *message);
|
||||
void on_parted(IrcMessage *message);
|
||||
void on_quit(IrcMessage *message);
|
||||
void on_nickChanged(IrcMessage *message);
|
||||
void on_modeChanged(IrcMessage *message);
|
||||
void on_topicChanged(IrcMessage *message);
|
||||
void on_messageReceived(IrcMessage *message);
|
||||
void on_numericMessageReceived(IrcMessage *message);
|
||||
|
||||
protected Q_SLOTS:
|
||||
void on_connected();
|
||||
void on_disconnected();
|
||||
|
||||
void onMessageReceived(IrcMessage* message);
|
||||
|
||||
protected:
|
||||
NetworkPlugin *np;
|
||||
std::string user;
|
||||
std::string m_identify;
|
||||
std::list<std::string> m_autoJoin;
|
||||
std::string m_topicData;
|
||||
};
|
||||
|
||||
//class MyIrcBuffer : public Irc::Buffer
|
||||
//{
|
||||
// Q_OBJECT
|
||||
|
||||
//public:
|
||||
// MyIrcBuffer(const QString& receiver, const std::string &user, NetworkPlugin *np, const std::string &suffix, Irc::Session* parent);
|
||||
// NetworkPlugin *np;
|
||||
// std::string user;
|
||||
// MyIrcSession *p;
|
||||
// std::string m_topicData;
|
||||
// std::string suffix;
|
||||
|
||||
//protected Q_SLOTS:
|
||||
// void on_receiverChanged(const QString& receiver);
|
||||
// void on_joined(const QString& origin);
|
||||
// void on_parted(const QString& origin, const QString& message);
|
||||
// void on_quit(const QString& origin, const QString& message);
|
||||
// void on_nickChanged(const QString& origin, const QString& nick);
|
||||
// void on_modeChanged(const QString& origin, const QString& mode, const QString& args);
|
||||
// void on_topicChanged(const QString& origin, const QString& topic);
|
||||
// void on_invited(const QString& origin, const QString& receiver, const QString& channel);
|
||||
// void on_kicked(const QString& origin, const QString& nick, const QString& message);
|
||||
// void on_messageReceived(const QString& origin, const QString& message, Irc::Buffer::MessageFlags flags);
|
||||
// void on_noticeReceived(const QString& origin, const QString& notice, Irc::Buffer::MessageFlags flags);
|
||||
// void on_ctcpRequestReceived(const QString& origin, const QString& request, Irc::Buffer::MessageFlags flags);
|
||||
// void on_ctcpReplyReceived(const QString& origin, const QString& reply, Irc::Buffer::MessageFlags flags);
|
||||
// void on_ctcpActionReceived(const QString& origin, const QString& action, Irc::Buffer::MessageFlags flags);
|
||||
// void on_numericMessageReceived(const QString& origin, uint code, const QStringList& params);
|
||||
// void on_unknownMessageReceived(const QString& origin, const QStringList& params);
|
||||
|
||||
// bool correctNickname(std::string &nickname);
|
||||
//};
|
||||
|
||||
#endif // SESSION_H
|
|
@ -1,5 +1,7 @@
|
|||
#include "singleircnetworkplugin.h"
|
||||
#include "log4cxx/logger.h"
|
||||
#include <IrcCommand>
|
||||
#include <IrcMessage>
|
||||
|
||||
using namespace log4cxx;
|
||||
|
||||
|
@ -44,14 +46,19 @@ 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);
|
||||
session->setUserName(QString::fromStdString(legacyName));
|
||||
session->setNickName(QString::fromStdString(legacyName));
|
||||
session->setRealName(QString::fromStdString(legacyName));
|
||||
session->setHost(QString::fromStdString(m_server));
|
||||
session->setPort(6667);
|
||||
|
||||
std::string identify = m_identify;
|
||||
boost::replace_all(identify, "$password", password);
|
||||
boost::replace_all(identify, "$name", legacyName);
|
||||
session->setIdentify(identify);
|
||||
|
||||
session->open();
|
||||
|
||||
m_sessions[user] = session;
|
||||
}
|
||||
|
||||
|
@ -62,7 +69,7 @@ void SingleIRCNetworkPlugin::handleLogoutRequest(const std::string &user, const
|
|||
}
|
||||
LOG4CXX_INFO(logger, user << ": Disconnecting.");
|
||||
|
||||
m_sessions[user]->disconnectFromServer();
|
||||
m_sessions[user]->close();
|
||||
m_sessions[user]->deleteLater();
|
||||
m_sessions.erase(user);
|
||||
}
|
||||
|
@ -83,7 +90,11 @@ void SingleIRCNetworkPlugin::handleMessageSendRequest(const std::string &user, c
|
|||
}
|
||||
|
||||
LOG4CXX_INFO(logger, user << ": Forwarding message to " << r);
|
||||
m_sessions[user]->message(QString::fromStdString(r), QString::fromStdString(message));
|
||||
m_sessions[user]->sendCommand(IrcCommand::createMessage(QString::fromStdString(r), QString::fromStdString(message)));
|
||||
|
||||
if (r.find("#") == 0) {
|
||||
handleMessage(user, legacyName, message, m_sessions[user]->nickName().toStdString());
|
||||
}
|
||||
}
|
||||
|
||||
void SingleIRCNetworkPlugin::handleJoinRoomRequest(const std::string &user, const std::string &room, const std::string &nickname, const std::string &password) {
|
||||
|
@ -93,12 +104,12 @@ void SingleIRCNetworkPlugin::handleJoinRoomRequest(const std::string &user, cons
|
|||
}
|
||||
|
||||
LOG4CXX_INFO(logger, user << ": Joining " << room);
|
||||
m_sessions[user]->addAutoJoinChannel(QString::fromStdString(room));
|
||||
m_sessions[user]->join(QString::fromStdString(room), QString::fromStdString(password));
|
||||
m_sessions[user]->addAutoJoinChannel(room);
|
||||
m_sessions[user]->sendCommand(IrcCommand::createJoin(QString::fromStdString(room), QString::fromStdString(password)));
|
||||
m_sessions[user]->rooms += 1;
|
||||
|
||||
// update nickname, because we have nickname per session, no nickname per room.
|
||||
handleRoomNicknameChanged(user, room, m_sessions[user]->nick().toStdString());
|
||||
handleRoomNicknameChanged(user, room, m_sessions[user]->userName().toStdString());
|
||||
}
|
||||
|
||||
void SingleIRCNetworkPlugin::handleLeaveRoomRequest(const std::string &user, const std::string &room) {
|
||||
|
@ -111,7 +122,7 @@ void SingleIRCNetworkPlugin::handleLeaveRoomRequest(const std::string &user, con
|
|||
}
|
||||
|
||||
LOG4CXX_INFO(logger, user << ": Leaving " << room);
|
||||
m_sessions[u]->part(QString::fromStdString(r));
|
||||
m_sessions[u]->removeAutoJoinChannel(QString::fromStdString(r));
|
||||
m_sessions[u]->sendCommand(IrcCommand::createPart(QString::fromStdString(r)));
|
||||
m_sessions[u]->removeAutoJoinChannel(r);
|
||||
m_sessions[u]->rooms -= 1;
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
cmake_minimum_required(VERSION 2.6)
|
||||
FILE(GLOB SRC *.cpp)
|
||||
FILE(GLOB HEADERS *.h)
|
||||
QT4_WRAP_CPP(SRC ${HEADERS})
|
||||
ADD_EXECUTABLE(spectrum2_libircclient-qt_backend ${SRC})
|
||||
|
||||
target_link_libraries(spectrum2_libircclient-qt_backend ${IRC_LIBRARY} ${QT_LIBRARIES} transport-plugin transport pthread)
|
||||
|
||||
INSTALL(TARGETS spectrum2_libircclient-qt_backend RUNTIME DESTINATION bin)
|
||||
|
|
@ -1,243 +0,0 @@
|
|||
/*
|
||||
* 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"
|
||||
|
||||
#include "log4cxx/logger.h"
|
||||
|
||||
using namespace log4cxx;
|
||||
|
||||
static LoggerPtr logger = log4cxx::Logger::getLogger("IRCSession");
|
||||
|
||||
MyIrcSession::MyIrcSession(const std::string &user, NetworkPlugin *np, const std::string &suffix, QObject* parent) : Irc::Session(parent)
|
||||
{
|
||||
this->np = np;
|
||||
this->user = user;
|
||||
this->suffix = suffix;
|
||||
rooms = 0;
|
||||
connect(this, SIGNAL(disconnected()), SLOT(on_disconnected()));
|
||||
}
|
||||
|
||||
void MyIrcSession::on_connected(){
|
||||
// std::cout << "connected:\n";
|
||||
}
|
||||
|
||||
void MyIrcSession::on_disconnected()
|
||||
{
|
||||
// std::cout << "disconnected:\n";
|
||||
if (suffix.empty())
|
||||
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, suffix, this);
|
||||
}
|
||||
|
||||
MyIrcBuffer::MyIrcBuffer(const QString& receiver, const std::string &user, NetworkPlugin *np, const std::string &suffix, Irc::Session* parent)
|
||||
: Irc::Buffer(receiver, parent)
|
||||
{
|
||||
this->np = np;
|
||||
this->user = user;
|
||||
this->suffix = suffix;
|
||||
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) {
|
||||
LOG4CXX_INFO(logger, user << ": " << origin.toStdString() << " joined " << receiver().toStdString() + suffix);
|
||||
bool flags = 0;
|
||||
std::string nickname = origin.toStdString();
|
||||
flags = correctNickname(nickname);
|
||||
np->handleParticipantChanged(user, origin.toStdString(), receiver().toStdString() + suffix, (int) flags, pbnetwork::STATUS_ONLINE);
|
||||
}
|
||||
|
||||
void MyIrcBuffer::on_parted(const QString& origin, const QString& message) {
|
||||
LOG4CXX_INFO(logger, user << ": " << origin.toStdString() << " parted " << receiver().toStdString() + suffix);
|
||||
qDebug() << "parted:" << receiver() << origin << message;
|
||||
bool flags = 0;
|
||||
std::string nickname = origin.toStdString();
|
||||
flags = correctNickname(nickname);
|
||||
np->handleParticipantChanged(user, nickname, receiver().toStdString() + suffix,(int) flags, pbnetwork::STATUS_NONE, message.toStdString());
|
||||
}
|
||||
|
||||
void MyIrcBuffer::on_quit(const QString& origin, const QString& message) {
|
||||
on_parted(origin, message);
|
||||
}
|
||||
|
||||
void MyIrcBuffer::on_nickChanged(const QString& origin, const QString& nick) {
|
||||
LOG4CXX_INFO(logger, user << ": " << origin.toStdString() << " changed nickname to " << nick.toStdString());
|
||||
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() + suffix,(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"
|
||||
std::string nickname = args.toStdString();
|
||||
if (nickname.empty())
|
||||
return;
|
||||
LOG4CXX_INFO(logger, user << ": " << nickname << " changed mode to " << mode.toStdString());
|
||||
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() + suffix,(int) flags, pbnetwork::STATUS_ONLINE, "");
|
||||
}
|
||||
|
||||
void MyIrcBuffer::on_topicChanged(const QString& origin, const QString& topic) {
|
||||
//topic changed: "#testik" "HanzZ" "test"
|
||||
LOG4CXX_INFO(logger, user << ": " << origin.toStdString() << " topic changed to " << topic.toStdString());
|
||||
np->handleSubject(user, receiver().toStdString() + suffix, 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;
|
||||
std::string r = receiver().toStdString();
|
||||
// if (!suffix.empty()) {
|
||||
// r = receiver().replace('@', '%').toStdString();
|
||||
// }
|
||||
LOG4CXX_INFO(logger, user << ": Message from " << r);
|
||||
if (r.find("#") == 0) {
|
||||
np->handleMessage(user, r + suffix, message.toStdString(), origin.toStdString());
|
||||
}
|
||||
else {
|
||||
np->handleMessage(user, r + suffix, message.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:
|
||||
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());
|
||||
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() + suffix << " " << flags << "\n";
|
||||
np->handleParticipantChanged(user, nickname, channel.toStdString() + suffix,(int) flags, pbnetwork::STATUS_ONLINE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
LOG4CXX_INFO(logger, user << ": Numeric message received " << receiver().toStdString() << " " << origin.toStdString() << " " << code);
|
||||
//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;
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef SESSION_H
|
||||
#define SESSION_H
|
||||
|
||||
#include <IrcSession>
|
||||
#include <IrcBuffer>
|
||||
#include <transport/networkplugin.h>
|
||||
|
||||
using namespace Transport;
|
||||
|
||||
class MyIrcSession : public Irc::Session
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
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
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MyIrcBuffer(const QString& receiver, const std::string &user, NetworkPlugin *np, const std::string &suffix, Irc::Session* parent);
|
||||
NetworkPlugin *np;
|
||||
std::string user;
|
||||
MyIrcSession *p;
|
||||
std::string m_topicData;
|
||||
std::string suffix;
|
||||
|
||||
protected Q_SLOTS:
|
||||
void on_receiverChanged(const QString& receiver);
|
||||
void on_joined(const QString& origin);
|
||||
void on_parted(const QString& origin, const QString& message);
|
||||
void on_quit(const QString& origin, const QString& message);
|
||||
void on_nickChanged(const QString& origin, const QString& nick);
|
||||
void on_modeChanged(const QString& origin, const QString& mode, const QString& args);
|
||||
void on_topicChanged(const QString& origin, const QString& topic);
|
||||
void on_invited(const QString& origin, const QString& receiver, const QString& channel);
|
||||
void on_kicked(const QString& origin, const QString& nick, const QString& message);
|
||||
void on_messageReceived(const QString& origin, const QString& message, Irc::Buffer::MessageFlags flags);
|
||||
void on_noticeReceived(const QString& origin, const QString& notice, Irc::Buffer::MessageFlags flags);
|
||||
void on_ctcpRequestReceived(const QString& origin, const QString& request, Irc::Buffer::MessageFlags flags);
|
||||
void on_ctcpReplyReceived(const QString& origin, const QString& reply, Irc::Buffer::MessageFlags flags);
|
||||
void on_ctcpActionReceived(const QString& origin, const QString& action, Irc::Buffer::MessageFlags flags);
|
||||
void on_numericMessageReceived(const QString& origin, uint code, const QStringList& params);
|
||||
void on_unknownMessageReceived(const QString& origin, const QStringList& params);
|
||||
|
||||
bool correctNickname(std::string &nickname);
|
||||
};
|
||||
|
||||
#endif // SESSION_H
|
10
cmake_modules/CommuniConfig.cmake
Normal file
10
cmake_modules/CommuniConfig.cmake
Normal file
|
@ -0,0 +1,10 @@
|
|||
FIND_LIBRARY(IRC_LIBRARY NAMES Communi)
|
||||
FIND_PATH(IRC_INCLUDE_DIR NAMES "ircglobal.h" PATH_SUFFIXES Communi qt4/Communi )
|
||||
|
||||
# message( STATUS ${IRC_LIBRARY})
|
||||
if( IRC_LIBRARY AND IRC_INCLUDE_DIR )
|
||||
message( STATUS "Found libCommuni ${IRC_LIBRARY}, ${IRC_INCLUDE_DIR}")
|
||||
set( IRC_FOUND 1 )
|
||||
else()
|
||||
message( STATUS "Could NOT find libCommuni" )
|
||||
endif()
|
|
@ -1,10 +0,0 @@
|
|||
FIND_LIBRARY(IRC_LIBRARY NAMES ircclient-qt)
|
||||
FIND_PATH(IRC_INCLUDE_DIR NAMES "ircglobal.h" PATH_SUFFIXES ircclient-qt qt4/ircclient-qt )
|
||||
|
||||
# message( STATUS ${IRC_LIBRARY})
|
||||
if( IRC_LIBRARY AND IRC_INCLUDE_DIR )
|
||||
message( STATUS "Found libircclient-qt: ${IRC_LIBRARY}, ${IRC_INCLUDE_DIR}")
|
||||
set( IRC_FOUND 1 )
|
||||
else()
|
||||
message( STATUS "Could NOT find libircclient-qt" )
|
||||
endif()
|
Loading…
Add table
Reference in a new issue