summaryrefslogtreecommitdiff
authorskyhusker <skyhusker>2005-01-26 22:45:53 (UTC)
committer skyhusker <skyhusker>2005-01-26 22:45:53 (UTC)
commitf85af28663814f3262f5ecfcd20a4b4f67c23067 (patch) (side-by-side diff)
tree994bd8c5a9f361ca7eff8ef9fb404f89f6f90f78
parentcbaf2c1c6eb42bc8a283a40fe922603a44c29304 (diff)
downloadopie-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).
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opieirc/ircchannel.cpp3
-rw-r--r--noncore/net/opieirc/ircchannel.h15
-rw-r--r--noncore/net/opieirc/ircchannellist.cpp16
-rw-r--r--noncore/net/opieirc/ircchannelperson.cpp62
-rw-r--r--noncore/net/opieirc/ircchannelperson.h34
-rw-r--r--noncore/net/opieirc/ircchanneltab.cpp18
-rw-r--r--noncore/net/opieirc/ircconnection.cpp24
-rw-r--r--noncore/net/opieirc/ircconnection.h6
-rw-r--r--noncore/net/opieirc/ircmessageparser.cpp132
-rw-r--r--noncore/net/opieirc/ircmessageparser.h2
-rw-r--r--noncore/net/opieirc/ircservertab.cpp3
-rw-r--r--noncore/net/opieirc/ircsession.cpp20
-rw-r--r--noncore/net/opieirc/ircsession.h4
-rw-r--r--noncore/net/opieirc/mainwindow.cpp4
-rw-r--r--noncore/net/opieirc/opieirc.pro6
15 files changed, 258 insertions, 91 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,2 +1,3 @@
#include "ircchannel.h"
+#include "ircchannelperson.h"
@@ -40,3 +41,3 @@ IRCChannelPerson *IRCChannel::getPerson(QString nickname) {
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
@@ -26,17 +26,6 @@
#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;
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,3 +1,5 @@
#include <qpe/resource.h>
+
#include "ircchannellist.h"
+#include "ircchannelperson.h"
@@ -15,10 +17,10 @@ void IRCChannelList::update() {
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
@@ -9,2 +9,3 @@
+#include <opie2/odebug.h>
QDict<QString> IRCChannelTab::m_queuedMessages (17);
@@ -43,7 +44,9 @@ IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainW
/* 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()));
@@ -168,3 +171,4 @@ 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()));
}
@@ -172,2 +176,4 @@ void IRCChannelTab::popupPing() {
void IRCChannelTab::popupVersion() {
+ if(m_list->currentItem() != -1)
+ m_parentTab->session()->sendCTCPRequest(m_list->text(m_list->currentItem()), "VERSION", "");
}
@@ -175,2 +181,4 @@ void IRCChannelTab::popupVersion() {
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
@@ -2,2 +2,6 @@
#include <string.h>
+
+#include <qstringlist.h>
+#include <qdatetime.h>
+
#include "ircconnection.h"
@@ -30,4 +34,19 @@ 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);
}
@@ -102 +121,2 @@ 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
@@ -39,3 +39,7 @@ public:
/* 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();
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
@@ -5,2 +5,4 @@
#include "ircversion.h"
+#include "ircchannelperson.h"
+//#include "transferreceiver.h"
@@ -28,2 +30,3 @@ IRCCTCPMessageParserStruct IRCMessageParser::ctcpParserProcTable[] = {
{ "ACTION", FUNC(parseCTCPAction) },
+ { "DCC", FUNC(parseCTCPDCC) },
{ 0 , 0 }
@@ -52,3 +55,3 @@ IRCNumericalMessageParserStruct IRCMessageParser::numericalParserProcTable[] = {
{ 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
@@ -56,2 +59,3 @@ IRCNumericalMessageParserStruct IRCMessageParser::numericalParserProcTable[] = {
{ 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
@@ -69,3 +73,3 @@ IRCNumericalMessageParserStruct IRCMessageParser::numericalParserProcTable[] = {
{ 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
@@ -101,3 +105,3 @@ void IRCMessageParser::parse(IRCMessage *message) {
if (message->ctcpCommand() == ctcpParserProcTable[i].commandName) {
- (this->*(ctcpParserProcTable[i].proc))(message);
+ parseCTCP(message, i);
return;
@@ -136,5 +140,12 @@ 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 */
@@ -191,3 +202,2 @@ void IRCMessageParser::parseLiteralJoin(IRCMessage *message) {
if (!channel->getPerson(mask.nick())) {
- IRCChannelPerson *chanperson = new IRCChannelPerson();
IRCPerson *person = m_session->getPerson(mask.nick());
@@ -197,4 +207,3 @@ void IRCMessageParser::parseLiteralJoin(IRCMessage *message) {
}
- chanperson->flags = 0;
- chanperson->person = person;
+ IRCChannelPerson *chanperson = new IRCChannelPerson(person);
channel->addPerson(chanperson);
@@ -357,4 +366,4 @@ void IRCMessageParser::parseCTCPPing(IRCMessage *message) {
IRCPerson mask(message->prefix());
- m_session->m_connection->sendCTCP(mask.nick(), "PING " + message->allParameters());
- emit outputReady(IRCOutput(OUTPUT_CTCP, tr("Received a CTCP PING from ")+mask.nick()));
+ m_session->m_connection->sendCTCPReply(mask.nick(), "PING", message->allParameters());
+ emit outputReady(IRCOutput(OUTPUT_CTCP, tr("Received a CTCP PING from ") + mask.nick()));
@@ -397,4 +406,12 @@ 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);
}
@@ -436,2 +453,12 @@ 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) {
@@ -450,9 +477,12 @@ void IRCMessageParser::parseLiteralMode(IRCMessage *message) {
temp = temp.right(1);
- } else if (temp.startsWith("-")) {
- set = FALSE;
- temp = temp.right(1);
- } else {
- emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change has unknown type")));
- return;
- }
+ }
+ else
+ if (temp.startsWith("-")) {
+ set = FALSE;
+ temp = temp.right(1);
+ }
+ else {
+ emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change has unknown type")));
+ return;
+ }
if (temp == "o") {
@@ -461,31 +491,17 @@ void IRCMessageParser::parseLiteralMode(IRCMessage *message) {
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()));
- output.addParam(channel);
- output.addParam(person);
- emit outputReady(output);
- }
- } else {
+ IRCOutput output(OUTPUT_CHANPERSONMODE, person->setOp(mask.nick(), set));
+ output.addParam(channel);
+ output.addParam(person);
+ emit outputReady(output);
+ }
+ else {
emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown person - Desynchronized?")));
}
- } 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()));
+ }
+ else
+ if (temp == "v") {
+ stream >> temp;
+ IRCChannelPerson *person = channel->getPerson(temp);
+ if (person) {
+ IRCOutput output(OUTPUT_CHANPERSONMODE, person->setVoice(mask.nick(), set));
output.addParam(channel);
@@ -494,9 +510,10 @@ void IRCMessageParser::parseLiteralMode(IRCMessage *message) {
}
- } else {
- emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown person - Desynchronized?")));
+ else {
+ emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown person - Desynchronized?")));
+ }
+ }
+ else {
+ emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown flag")));
}
- } else {
- emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Mode change with unknown flag")));
}
- }
} else {
@@ -515,3 +532,3 @@ void IRCMessageParser::parseLiteralKick(IRCMessage *message) {
if (person) {
- if (person->person->nick() == m_session->m_server->nick()) {
+ if (person->nick() == m_session->m_server->nick()) {
m_session->removeChannel(channel);
@@ -523,3 +540,3 @@ void IRCMessageParser::parseLiteralKick(IRCMessage *message) {
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);
@@ -555,5 +572,5 @@ void IRCMessageParser::parseNumericalNames(IRCMessage *message) {
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;
@@ -564,3 +581,2 @@ void IRCMessageParser::parseNumericalNames(IRCMessage *message) {
- IRCChannelPerson *chan_person = new IRCChannelPerson();
IRCPerson *person = m_session->getPerson(nick);
@@ -571,4 +587,4 @@ void IRCMessageParser::parseNumericalNames(IRCMessage *message) {
}
- 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
@@ -77,2 +77,3 @@ private:
void parseNumerical(IRCMessage *message, int position);
+ void parseCTCP(IRCMessage *message, int position);
void parseNumericalServerName(IRCMessage *message);
@@ -90,2 +91,3 @@ private:
void parseCTCPAction(IRCMessage *message);
+ void parseCTCPDCC(IRCMessage *message);
protected:
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
@@ -5,2 +5,3 @@
#include "ircmessageparser.h"
+#include "ircchannelperson.h"
@@ -313,3 +314,3 @@ void IRCServerTab::display(IRCOutput output) {
IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0));
- channelTab->appendText("<font color=\"" + m_textColor + "\">&lt;</font><font color=\"" + m_otherColor + "\">"+IRCOutput::toHTML(((IRCChannelPerson *)output.getParam(1))->person->nick())+"</font><font color=\"" + m_textColor + "\">&gt; " + output.htmlMessage()+"</font><br>");
+ channelTab->appendText("<font color=\"" + m_textColor + "\">&lt;</font><font color=\"" + m_otherColor + "\">"+IRCOutput::toHTML(((IRCChannelPerson *)output.getParam(1))->nick())+"</font><font color=\"" + m_textColor + "\">&gt; " + output.htmlMessage()+"</font><br>");
}
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,3 +1,5 @@
+
#include "ircsession.h"
#include "ircmessageparser.h"
+#include "ircchannelperson.h"
#include "ircversion.h"
@@ -139,3 +141,3 @@ void IRCSession::updateNickname(const QString &oldNickname, const QString &newNi
it.current()->removePerson(chanperson);
- chanperson->person->setNick(newNickname);
+ chanperson->setNick(newNickname);
it.current()->addPerson(chanperson);
@@ -196 +198,17 @@ void IRCSession::handleMessage(IRCMessage *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
@@ -67,2 +67,6 @@ public:
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);
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
@@ -2,2 +2,5 @@
#include <qpe/resource.h>
+
+#include <opie2/odebug.h>
+
#include <qwhatsthis.h>
@@ -87,2 +90,3 @@ void MainWindow::slotKillTabsLater() {
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
@@ -8,3 +8,4 @@ HEADERS = ircchannel.h ircconnection.h \
ircserverlist.h ircservereditor.h \
- ircquerytab.h ircsettings.h ircmisc.h
+ ircquerytab.h ircsettings.h ircmisc.h \
+ ircchannelperson.h
SOURCES = ircchannel.cpp ircconnection.cpp \
@@ -17,3 +18,4 @@ SOURCES = ircchannel.cpp ircconnection.cpp \
ircserverlist.cpp ircservereditor.cpp \
- ircquerytab.cpp ircsettings.cpp ircmisc.cpp
+ ircquerytab.cpp ircsettings.cpp ircmisc.cpp \
+ ircchannelperson.cpp
INCLUDEPATH += $(OPIEDIR)/include