author | skyhusker <skyhusker> | 2005-01-26 22:45:53 (UTC) |
---|---|---|
committer | skyhusker <skyhusker> | 2005-01-26 22:45:53 (UTC) |
commit | f85af28663814f3262f5ecfcd20a4b4f67c23067 (patch) (side-by-side diff) | |
tree | 994bd8c5a9f361ca7eff8ef9fb404f89f6f90f78 /noncore/net | |
parent | cbaf2c1c6eb42bc8a283a40fe922603a44c29304 (diff) | |
download | opie-f85af28663814f3262f5ecfcd20a4b4f67c23067.zip opie-f85af28663814f3262f5ecfcd20a4b4f67c23067.tar.gz opie-f85af28663814f3262f5ecfcd20a4b4f67c23067.tar.bz2 |
* Created new class for IRCChannelPerson.
* Added whois, ping and version entries to channel popup menu.
* Fixed action on CTCP PING reply (was interpreted as a request).
-rw-r--r-- | noncore/net/opieirc/ircchannel.cpp | 3 | ||||
-rw-r--r-- | noncore/net/opieirc/ircchannel.h | 15 | ||||
-rw-r--r-- | noncore/net/opieirc/ircchannellist.cpp | 16 | ||||
-rw-r--r-- | noncore/net/opieirc/ircchannelperson.cpp | 62 | ||||
-rw-r--r-- | noncore/net/opieirc/ircchannelperson.h | 34 | ||||
-rw-r--r-- | noncore/net/opieirc/ircchanneltab.cpp | 18 | ||||
-rw-r--r-- | noncore/net/opieirc/ircconnection.cpp | 24 | ||||
-rw-r--r-- | noncore/net/opieirc/ircconnection.h | 6 | ||||
-rw-r--r-- | noncore/net/opieirc/ircmessageparser.cpp | 100 | ||||
-rw-r--r-- | noncore/net/opieirc/ircmessageparser.h | 2 | ||||
-rw-r--r-- | noncore/net/opieirc/ircservertab.cpp | 3 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsession.cpp | 20 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsession.h | 4 | ||||
-rw-r--r-- | noncore/net/opieirc/mainwindow.cpp | 4 | ||||
-rw-r--r-- | noncore/net/opieirc/opieirc.pro | 6 |
15 files changed, 242 insertions, 75 deletions
diff --git a/noncore/net/opieirc/ircchannel.cpp b/noncore/net/opieirc/ircchannel.cpp index 5c380e5..5d81596 100644 --- a/noncore/net/opieirc/ircchannel.cpp +++ b/noncore/net/opieirc/ircchannel.cpp @@ -1,3 +1,4 @@ #include "ircchannel.h" +#include "ircchannelperson.h" IRCChannel::IRCChannel(QString channelname) { @@ -39,5 +40,5 @@ IRCChannelPerson *IRCChannel::getPerson(QString nickname) { QListIterator<IRCChannelPerson> it(m_people); for (; it.current(); ++it) { - if (it.current()->person->nick() == nickname) { + if (it.current()->nick() == nickname) { return it.current(); } diff --git a/noncore/net/opieirc/ircchannel.h b/noncore/net/opieirc/ircchannel.h index e78f182..a276f10 100644 --- a/noncore/net/opieirc/ircchannel.h +++ b/noncore/net/opieirc/ircchannel.h @@ -25,19 +25,8 @@ #include <qlist.h> #include <qstring.h> -#include "ircperson.h" -/* Flags which a person can have inside a channel */ -enum IRCChannelPersonFlag { - PERSON_FLAG_OP = 0x01, - PERSON_FLAG_VOICE = 0x02, - PERSON_FLAG_HALFOP = 0x04 -}; +#include "ircperson.h" -/* This struct encapsulates a IRCPerson and adds - channel specific information */ -typedef struct IRCChannelPerson { - IRCPerson *person; - unsigned int flags; -}; +class IRCChannelPerson; /* IRCChannel is the object-oriented representation diff --git a/noncore/net/opieirc/ircchannellist.cpp b/noncore/net/opieirc/ircchannellist.cpp index c32c535..8cf144e 100644 --- a/noncore/net/opieirc/ircchannellist.cpp +++ b/noncore/net/opieirc/ircchannellist.cpp @@ -1,4 +1,6 @@ #include <qpe/resource.h> + #include "ircchannellist.h" +#include "ircchannelperson.h" IRCChannelList::IRCChannelList(IRCChannel *channel, QWidget *parent, const char *name, WFlags f) : QListBox(parent, name, f) { @@ -14,12 +16,12 @@ void IRCChannelList::update() { for (; it.current(); ++it) { IRCChannelPerson *person = it.current(); - if (person->flags & PERSON_FLAG_OP) { - insertItem(op, "1" + person->person->nick()); - } else if (person->flags & PERSON_FLAG_HALFOP) { - insertItem(op, "2" + person->person->nick()); - } else if (person->flags & PERSON_FLAG_VOICE) { - insertItem(voice, "3" + person->person->nick()); + if (person->flags() & IRCChannelPerson::PERSON_FLAG_OP) { + insertItem(op, "1" + person->nick()); + } else if (person->flags() & IRCChannelPerson::PERSON_FLAG_HALFOP) { + insertItem(op, "2" + person->nick()); + } else if (person->flags() & IRCChannelPerson::PERSON_FLAG_VOICE) { + insertItem(voice, "3" + person->nick()); } else { - insertItem("4" + person->person->nick()); + insertItem("4" + person->nick()); } } diff --git a/noncore/net/opieirc/ircchannelperson.cpp b/noncore/net/opieirc/ircchannelperson.cpp new file mode 100644 index 0000000..1e8ebe4 --- a/dev/null +++ b/noncore/net/opieirc/ircchannelperson.cpp @@ -0,0 +1,62 @@ +#include "ircperson.h" +#include "ircchannelperson.h" + +#include <qstring.h> +#include <qobject.h> + +IRCChannelPerson::IRCChannelPerson(IRCPerson *person) +{ + m_person = person; + m_flags = 0; +} + +IRCChannelPerson::~IRCChannelPerson() +{ + //if(m_person) + // delete m_person; +} + +QString IRCChannelPerson::setOp(const QString &nickname, bool set) +{ + if(set) { + m_flags |= PERSON_FLAG_OP; + return ( nickname + QObject::tr(" gives channel operator status to ") + nick()); + } + + m_flags &= 0xFFFF - PERSON_FLAG_OP; + return ( nickname + QObject::tr(" removes channel operator status from ") + nick()); +} + +QString IRCChannelPerson::setVoice(const QString &nickname, bool set) +{ + if(set) { + m_flags |= PERSON_FLAG_VOICE; + return ( nickname + QObject::tr(" gives voice to ") + nick() ); + } + + m_flags &= 0xFFFF - PERSON_FLAG_VOICE; + return ( nickname + QObject::tr(" removes voice from ") + nick()); +} + +QString IRCChannelPerson::nick() +{ + if(m_person) + return m_person->nick(); + + return QString::null; +} + +void IRCChannelPerson::setFlags(int flags) +{ + m_flags = flags; +} + +void IRCChannelPerson::setNick(const QString &nickname) +{ + m_person->setNick(nickname); +} + +const unsigned int IRCChannelPerson::flags() +{ + return m_flags; +} diff --git a/noncore/net/opieirc/ircchannelperson.h b/noncore/net/opieirc/ircchannelperson.h new file mode 100644 index 0000000..a8c4791 --- a/dev/null +++ b/noncore/net/opieirc/ircchannelperson.h @@ -0,0 +1,34 @@ +#ifndef IRCCHANNELPERSON_H +#define IRCCHANNELPERSON_H + +class QString; +class IRCPerson; + +/* This class encapsulates a IRCPerson and adds + * channel specific information */ +class IRCChannelPerson { + +public: + /* Flags which a person can have inside a channel */ + enum IRCChannelPersonFlag { + PERSON_FLAG_OP = 0x01, + PERSON_FLAG_VOICE = 0x02, + PERSON_FLAG_HALFOP = 0x04 + }; + + IRCChannelPerson(IRCPerson *person = 0); + ~IRCChannelPerson(); + + QString setOp(const QString &nickname, bool set); + QString setVoice(const QString &nickname, bool set); + QString nick(); + const unsigned int flags(); + void setFlags(int flags); + void setNick(const QString &nickname); + +protected: + IRCPerson *m_person; + unsigned int m_flags; +}; + +#endif diff --git a/noncore/net/opieirc/ircchanneltab.cpp b/noncore/net/opieirc/ircchanneltab.cpp index 4a35929..3272a8a 100644 --- a/noncore/net/opieirc/ircchanneltab.cpp +++ b/noncore/net/opieirc/ircchanneltab.cpp @@ -8,4 +8,5 @@ #include "ircmessageparser.h" +#include <opie2/odebug.h> QDict<QString> IRCChannelTab::m_queuedMessages (17); @@ -42,9 +43,11 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW connect(m_list, SIGNAL(mouseButtonPressed(int,QListBoxItem*,const QPoint&)), this, SLOT(mouseButtonPressed(int,QListBoxItem*,const QPoint&))); /* Construct the popup menu */ - QPopupMenu *ctcpMenu = new QPopupMenu(m_list); + //QPopupMenu *ctcpMenu = new QPopupMenu(m_list); m_popup->insertItem(Resource::loadPixmap("opieirc/query"), tr("Query"), this, SLOT(popupQuery())); - ctcpMenu->insertItem(Resource::loadPixmap("opieirc/ping"), tr("Ping"), this, SLOT(popupPing())); - ctcpMenu->insertItem(Resource::loadPixmap("opieirc/version"), tr("Version"), this, SLOT(popupVersion())); - ctcpMenu->insertItem(Resource::loadPixmap("opieirc/whois"), tr("Whois"), this, SLOT(popupWhois())); + m_popup->insertSeparator(); + m_popup->insertItem(Resource::loadPixmap("opieirc/ping"), tr("Ping"), this, SLOT(popupPing())); + m_popup->insertItem(Resource::loadPixmap("opieirc/version"), tr("Version"), this, SLOT(popupVersion())); + m_popup->insertItem(Resource::loadPixmap("opieirc/whois"), tr("Whois"), this, SLOT(popupWhois())); + //m_popup->insertItem(ctcpMenu, "CTCP"); connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling())); m_layout->add(hbox); @@ -167,11 +170,16 @@ void IRCChannelTab::popupQuery() { void IRCChannelTab::popupPing() { - //HAHA, no wonder these don't work + if(m_list->currentItem() != -1) + m_parentTab->session()->sendCTCPPing(m_list->text(m_list->currentItem())); } void IRCChannelTab::popupVersion() { + if(m_list->currentItem() != -1) + m_parentTab->session()->sendCTCPRequest(m_list->text(m_list->currentItem()), "VERSION", ""); } void IRCChannelTab::popupWhois() { + if(m_list->currentItem() != -1) + m_parentTab->session()->whois(m_list->text(m_list->currentItem())); } diff --git a/noncore/net/opieirc/ircconnection.cpp b/noncore/net/opieirc/ircconnection.cpp index 2325cca..88e63f7 100644 --- a/noncore/net/opieirc/ircconnection.cpp +++ b/noncore/net/opieirc/ircconnection.cpp @@ -1,4 +1,8 @@ #include <unistd.h> #include <string.h> + +#include <qstringlist.h> +#include <qdatetime.h> + #include "ircconnection.h" @@ -29,6 +33,21 @@ void IRCConnection::sendLine(QString line) { } -void IRCConnection::sendCTCP(QString nick, QString line) { - sendLine("NOTICE " + nick + " :\001"+line+"\001"); +void IRCConnection::sendCTCPReply(const QString &nickname, const QString &type, const QString &args) { + sendLine("NOTICE " + nickname + " :\001" + type + " " + args + "\001"); +} + +void IRCConnection::sendCTCPRequest(const QString &nickname, const QString &type, const QString &args) { + sendLine("PRIVMSG " + nickname + " :\001" + type + " " + args + "\001"); +} + +void IRCConnection::sendCTCPPing(const QString &nickname) { + QDateTime tm; + tm.setTime_t(0); + QString strtime = QString::number(tm.secsTo(QDateTime::currentDateTime())); + sendCTCPRequest(nickname, "PING", strtime); +} + +void IRCConnection::whois(const QString &nickname) { + sendLine("WHOIS " + nickname); } @@ -101,2 +120,3 @@ void IRCConnection::close() { } } + diff --git a/noncore/net/opieirc/ircconnection.h b/noncore/net/opieirc/ircconnection.h index 75cdf6d..382b1c0 100644 --- a/noncore/net/opieirc/ircconnection.h +++ b/noncore/net/opieirc/ircconnection.h @@ -38,5 +38,9 @@ public: void sendLine(QString line); /* used to send CTCP commands to the IRC server */ - void sendCTCP(QString nick, QString line); + void sendCTCPReply(const QString &nickname, const QString &type, const QString &args); + void sendCTCPRequest(const QString &nickname, const QString &type, const QString &args); + void sendCTCPPing(const QString &nickname); + void whois(const QString &nickname); + void sendCTCPping(const QString &nickname); void close(); bool isConnected(); diff --git a/noncore/net/opieirc/ircmessageparser.cpp b/noncore/net/opieirc/ircmessageparser.cpp index cfad2c1..9c1492c 100644 --- a/noncore/net/opieirc/ircmessageparser.cpp +++ b/noncore/net/opieirc/ircmessageparser.cpp @@ -4,4 +4,6 @@ #include "ircmessageparser.h" #include "ircversion.h" +#include "ircchannelperson.h" +//#include "transferreceiver.h" /* Lookup table for literal commands */ @@ -27,4 +29,5 @@ IRCCTCPMessageParserStruct IRCMessageParser::ctcpParserProcTable[] = { { "VERSION", FUNC(parseCTCPVersion) }, { "ACTION", FUNC(parseCTCPAction) }, + { "DCC", FUNC(parseCTCPDCC) }, { 0 , 0 } }; @@ -51,8 +54,9 @@ IRCNumericalMessageParserStruct IRCMessageParser::numericalParserProcTable[] = { { 265, "%1", "1", 0 }, // RPL_LOCALUSERS { 266, "%1", "1", 0 }, // RPL_GLOBALUSERS - { 311, QT_TR_NOOP("Whois %1 (%2@%3)\nReal name: %4"), "1:3,5" }, // RPL_WHOISUSER + { 311, QT_TR_NOOP("Whois %1 (%2@%3)\nReal name: %4"), "1:3,5", 0 }, // RPL_WHOISUSER { 312, QT_TR_NOOP("%1 is using server %2"), "1,2", 0 }, // RPL_WHOISSERVER { 317, 0, 0, FUNC(parseNumericalWhoisIdle) }, // RPL_WHOISIDLE { 318, "%1 :%2", "1,2", 0 }, // RPL_ENDOFWHOIS + { 319, QT_TR_NOOP("%1 is on channels: %2"), "1,2", 0 }, // RPL_WHOISCHANNELS { 320, "%1 %2", "1,2", 0}, // RPL_WHOISVIRT { 332, 0, 0, FUNC(parseNumericalTopic) }, // RPL_TOPIC @@ -68,5 +72,5 @@ IRCNumericalMessageParserStruct IRCMessageParser::numericalParserProcTable[] = { { 391, QT_TR_NOOP("Time on server %1 is %2"), "1,2", 0 }, // RPL_TIME { 401, QT_TR_NOOP("Channel or nick %1 doesn't exists"), "1", 0 }, // ERR_NOSUCHNICK - { 406, QT_TR_NOOP("There is no history information for %1"), "1" }, // ERR_WASNOSUCHNICK + { 406, QT_TR_NOOP("There is no history information for %1"), "1", 0 }, // ERR_WASNOSUCHNICK { 409, "%1", "1", 0 }, // ERR_NOORIGIN { 411, "%1", "1", 0 }, // ERR_NORECIPIENT @@ -100,5 +104,5 @@ void IRCMessageParser::parse(IRCMessage *message) { for (int i=0; ctcpParserProcTable[i].commandName; i++) { if (message->ctcpCommand() == ctcpParserProcTable[i].commandName) { - (this->*(ctcpParserProcTable[i].proc))(message); + parseCTCP(message, i); return; } @@ -135,7 +139,14 @@ void IRCMessageParser::parseNumerical(IRCMessage *message, int position) { } +void IRCMessageParser::parseCTCP(IRCMessage *message, int position) { + if(ctcpParserProcTable[position].proc) + (this->*(ctcpParserProcTable[position].proc))(message); +} + + + void IRCMessageParser::parseNumericalServerName(IRCMessage *message) { emit outputReady(IRCOutput(OUTPUT_TITLE, tr("Connected to")+" <b>" + message->prefix() + "</b>")); - /* Register EFFECTIVE nickname, some networks (as irc-hispano) uses nick:password + /* Register EFFECTIVE nickname, some networks (as irc-hispano) use nick:password * for authentication and the parser gets confused */ m_session->m_server->setNick(message->param(0)); @@ -190,5 +201,4 @@ void IRCMessageParser::parseLiteralJoin(IRCMessage *message) { if (mask.nick() != m_session->m_server->nick()) { if (!channel->getPerson(mask.nick())) { - IRCChannelPerson *chanperson = new IRCChannelPerson(); IRCPerson *person = m_session->getPerson(mask.nick()); if (!person) { @@ -196,6 +206,5 @@ void IRCMessageParser::parseLiteralJoin(IRCMessage *message) { m_session->addPerson(person); } - chanperson->flags = 0; - chanperson->person = person; + IRCChannelPerson *chanperson = new IRCChannelPerson(person); channel->addPerson(chanperson); IRCOutput output(OUTPUT_OTHERJOIN ,tr("%1 joined channel %2").arg( mask.nick() ).arg( channelName )); @@ -356,5 +365,5 @@ void IRCMessageParser::parseLiteralError(IRCMessage *message) { void IRCMessageParser::parseCTCPPing(IRCMessage *message) { IRCPerson mask(message->prefix()); - m_session->m_connection->sendCTCP(mask.nick(), "PING " + message->allParameters()); + m_session->m_connection->sendCTCPReply(mask.nick(), "PING", message->allParameters()); emit outputReady(IRCOutput(OUTPUT_CTCP, tr("Received a CTCP PING from ")+mask.nick())); @@ -396,6 +405,14 @@ void IRCMessageParser::parseCTCPPing(IRCMessage *message) { void IRCMessageParser::parseCTCPVersion(IRCMessage *message) { IRCPerson mask(message->prefix()); - m_session->m_connection->sendCTCP(mask.nick(), "VERSION " APP_VERSION " " APP_COPYSTR); - emit outputReady(IRCOutput(OUTPUT_CTCP, tr("Received a CTCP VERSION from ")+mask.nick())); + IRCOutput output(OUTPUT_CTCP); + if(message->isCTCPRequest()) { + m_session->m_connection->sendCTCPReply(mask.nick(), "VERSION", APP_VERSION " " APP_COPYSTR); + output.setMessage(tr("Received a CTCP VERSION request from ") + mask.nick()); + } + + else { + output.setMessage("Received CTCP VERSION reply from " + mask.nick() + ":" + message->param(0)); + } + emit outputReady(output); } @@ -435,4 +452,14 @@ void IRCMessageParser::parseCTCPAction(IRCMessage *message) { } +void IRCMessageParser::parseCTCPDCC(IRCMessage *message) { + QStringList params = QStringList::split(' ', message->param(0).stripWhiteSpace()); + if( params.count() != 5) { + emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Malformed DCC request from ") + IRCPerson(message->prefix()).nick())); + return; + } + + //TransferReceiver *foo = new TransferReceiver(params[2].toUInt(), params[3].toUInt(), params[1], params[4].toUInt()); +} + void IRCMessageParser::parseLiteralMode(IRCMessage *message) { IRCPerson mask(message->prefix()); @@ -449,8 +476,11 @@ void IRCMessageParser::parseLiteralMode(IRCMessage *message) { set = TRUE; temp = temp.right(1); - } else if (temp.startsWith("-")) { + } + else + if (temp.startsWith("-")) { set = FALSE; temp = temp.right(1); - } else { + } + else { emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change has unknown type"))); return; @@ -460,41 +490,28 @@ void IRCMessageParser::parseLiteralMode(IRCMessage *message) { IRCChannelPerson *person = channel->getPerson(temp); if (person) { - if (set) { - person->flags |= PERSON_FLAG_OP; - IRCOutput output(OUTPUT_CHANPERSONMODE, mask.nick() + tr(" gives channel operator status to " + person->person->nick())); - output.addParam(channel); - output.addParam(person); - emit outputReady(output); - } else { - person->flags &= 0xFFFF - PERSON_FLAG_OP; - IRCOutput output(OUTPUT_CHANPERSONMODE, mask.nick() + tr(" removes channel operator status from " + person->person->nick())); + IRCOutput output(OUTPUT_CHANPERSONMODE, person->setOp(mask.nick(), set)); output.addParam(channel); output.addParam(person); emit outputReady(output); } - } else { + else { emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown person - Desynchronized?"))); } - } else if (temp == "v") { + } + else + if (temp == "v") { stream >> temp; IRCChannelPerson *person = channel->getPerson(temp); if (person) { - if (set) { - person->flags |= PERSON_FLAG_VOICE; - IRCOutput output(OUTPUT_CHANPERSONMODE, mask.nick() + tr(" gives voice to " + person->person->nick())); - output.addParam(channel); - output.addParam(person); - emit outputReady(output); - } else { - person->flags &= 0xFFFF - PERSON_FLAG_VOICE; - IRCOutput output(OUTPUT_CHANPERSONMODE, mask.nick() + tr(" removes voice from " + person->person->nick())); + IRCOutput output(OUTPUT_CHANPERSONMODE, person->setVoice(mask.nick(), set)); output.addParam(channel); output.addParam(person); emit outputReady(output); } - } else { + else { emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown person - Desynchronized?"))); } - } else { + } + else { emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown flag"))); } @@ -514,5 +531,5 @@ void IRCMessageParser::parseLiteralKick(IRCMessage *message) { IRCChannelPerson *person = channel->getPerson(message->param(1)); if (person) { - if (person->person->nick() == m_session->m_server->nick()) { + if (person->nick() == m_session->m_server->nick()) { m_session->removeChannel(channel); IRCOutput output(OUTPUT_SELFKICK, tr("You were kicked from ") + channel->channelname() + tr(" by ") + mask.nick() + " (" + message->param(2) + ")"); @@ -522,5 +539,5 @@ void IRCMessageParser::parseLiteralKick(IRCMessage *message) { /* someone else got kicked */ channel->removePerson(person); - IRCOutput output(OUTPUT_OTHERKICK, person->person->nick() + tr(" was kicked from ") + channel->channelname() + tr(" by ") + mask.nick()+ " (" + message->param(2) + ")"); + IRCOutput output(OUTPUT_OTHERKICK, person->nick() + tr(" was kicked from ") + channel->channelname() + tr(" by ") + mask.nick()+ " (" + message->param(2) + ")"); output.addParam(channel); output.addParam(person); @@ -554,7 +571,7 @@ void IRCMessageParser::parseNumericalNames(IRCMessage *message) { nick = temp.right(temp.length()-1); switch (flagch) { - case '@': flag = PERSON_FLAG_OP; break; - case '+': flag = PERSON_FLAG_VOICE; break; - case '%': flag = PERSON_FLAG_HALFOP; break; + case '@': flag = IRCChannelPerson::PERSON_FLAG_OP; break; + case '+': flag = IRCChannelPerson::PERSON_FLAG_VOICE; break; + case '%': flag = IRCChannelPerson::PERSON_FLAG_HALFOP; break; default : flag = 0; break; } @@ -563,5 +580,4 @@ void IRCMessageParser::parseNumericalNames(IRCMessage *message) { } - IRCChannelPerson *chan_person = new IRCChannelPerson(); IRCPerson *person = m_session->getPerson(nick); if (person == 0) { @@ -570,6 +586,6 @@ void IRCMessageParser::parseNumericalNames(IRCMessage *message) { m_session->addPerson(person); } - chan_person->person = person; - chan_person->flags = flag; + IRCChannelPerson *chan_person = new IRCChannelPerson(person); + chan_person->setFlags(flag); channel->addPerson(chan_person); } diff --git a/noncore/net/opieirc/ircmessageparser.h b/noncore/net/opieirc/ircmessageparser.h index 2fca61e..4ebbddd 100644 --- a/noncore/net/opieirc/ircmessageparser.h +++ b/noncore/net/opieirc/ircmessageparser.h @@ -76,4 +76,5 @@ private: void parseLiteralTopic(IRCMessage *message); void parseNumerical(IRCMessage *message, int position); + void parseCTCP(IRCMessage *message, int position); void parseNumericalServerName(IRCMessage *message); void parseNumericalServerFeatures(IRCMessage *message); @@ -89,4 +90,5 @@ private: void parseCTCPVersion(IRCMessage *message); void parseCTCPAction(IRCMessage *message); + void parseCTCPDCC(IRCMessage *message); protected: IRCSession *m_session; diff --git a/noncore/net/opieirc/ircservertab.cpp b/noncore/net/opieirc/ircservertab.cpp index 90353f2..bddc37e 100644 --- a/noncore/net/opieirc/ircservertab.cpp +++ b/noncore/net/opieirc/ircservertab.cpp @@ -4,4 +4,5 @@ #include "ircservertab.h" #include "ircmessageparser.h" +#include "ircchannelperson.h" @@ -312,5 +313,5 @@ void IRCServerTab::display(IRCOutput output) { case OUTPUT_CHANPRIVMSG: { IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); - channelTab->appendText("<font color=\"" + m_textColor + "\"><</font><font color=\"" + m_otherColor + "\">"+IRCOutput::toHTML(((IRCChannelPerson *)output.getParam(1))->person->nick())+"</font><font color=\"" + m_textColor + "\">> " + output.htmlMessage()+"</font><br>"); + channelTab->appendText("<font color=\"" + m_textColor + "\"><</font><font color=\"" + m_otherColor + "\">"+IRCOutput::toHTML(((IRCChannelPerson *)output.getParam(1))->nick())+"</font><font color=\"" + m_textColor + "\">> " + output.htmlMessage()+"</font><br>"); } break; diff --git a/noncore/net/opieirc/ircsession.cpp b/noncore/net/opieirc/ircsession.cpp index ca0df50..80a327a 100644 --- a/noncore/net/opieirc/ircsession.cpp +++ b/noncore/net/opieirc/ircsession.cpp @@ -1,4 +1,6 @@ + #include "ircsession.h" #include "ircmessageparser.h" +#include "ircchannelperson.h" #include "ircversion.h" @@ -138,5 +140,5 @@ void IRCSession::updateNickname(const QString &oldNickname, const QString &newNi IRCChannelPerson *chanperson = it.current()->getPerson(oldNickname); it.current()->removePerson(chanperson); - chanperson->person->setNick(newNickname); + chanperson->setNick(newNickname); it.current()->addPerson(chanperson); } @@ -195,2 +197,18 @@ void IRCSession::handleMessage(IRCMessage *message) { m_parser->parse(message); } + +void IRCSession::whois(const QString &nickname) { + m_connection->whois(nickname); +} + +void IRCSession::sendCTCPPing(const QString &nickname) { + m_connection->sendCTCPPing(nickname); +} + +void IRCSession::sendCTCPRequest(const QString &nickname, const QString &type, const QString &args) { + m_connection->sendCTCPRequest(nickname, type, args); +} + +void IRCSession::sendCTCPReply(const QString &nickname, const QString &type, const QString &args) { + m_connection->sendCTCPReply(nickname, type, args); +} diff --git a/noncore/net/opieirc/ircsession.h b/noncore/net/opieirc/ircsession.h index 96de3e4..3859b68 100644 --- a/noncore/net/opieirc/ircsession.h +++ b/noncore/net/opieirc/ircsession.h @@ -66,4 +66,8 @@ public: void setValidUsermodes(const QString &modes); void setValidChannelmodes(const QString &modes); + void whois(const QString &nickname); + void sendCTCPPing(const QString &nickname); + void sendCTCPRequest(const QString &nickname, const QString &type, const QString &args); + void sendCTCPReply(const QString &nickname, const QString &type, const QString &args); IRCChannel *getChannel(QString channelname); IRCPerson *getPerson(QString nickname); diff --git a/noncore/net/opieirc/mainwindow.cpp b/noncore/net/opieirc/mainwindow.cpp index 2562f33..1811a0c 100644 --- a/noncore/net/opieirc/mainwindow.cpp +++ b/noncore/net/opieirc/mainwindow.cpp @@ -1,4 +1,7 @@ #include <qmenubar.h> #include <qpe/resource.h> + +#include <opie2/odebug.h> + #include <qwhatsthis.h> @@ -86,4 +89,5 @@ void MainWindow::slotKillTabsLater() { for ( QListIterator<IRCTab> it(m_toDelete); it.current(); ++it ) { m_tabWidget->removePage( it.current() ); + odebug << it.current() << oendl; m_tabs.remove( it.current() ); } diff --git a/noncore/net/opieirc/opieirc.pro b/noncore/net/opieirc/opieirc.pro index db89fa6..1ef9be2 100644 --- a/noncore/net/opieirc/opieirc.pro +++ b/noncore/net/opieirc/opieirc.pro @@ -7,5 +7,6 @@ HEADERS = ircchannel.h ircconnection.h \ ircchanneltab.h ircchannellist.h \ ircserverlist.h ircservereditor.h \ - ircquerytab.h ircsettings.h ircmisc.h + ircquerytab.h ircsettings.h ircmisc.h \ + ircchannelperson.h SOURCES = ircchannel.cpp ircconnection.cpp \ ircmessage.cpp \ @@ -16,5 +17,6 @@ SOURCES = ircchannel.cpp ircconnection.cpp \ ircchanneltab.cpp ircchannellist.cpp \ ircserverlist.cpp ircservereditor.cpp \ - ircquerytab.cpp ircsettings.cpp ircmisc.cpp + ircquerytab.cpp ircsettings.cpp ircmisc.cpp \ + ircchannelperson.cpp INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include |