summaryrefslogtreecommitdiff
path: root/noncore/net/opieirc
Side-by-side diff
Diffstat (limited to 'noncore/net/opieirc') (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/opieirc/config.in2
-rw-r--r--noncore/net/opieirc/ircchannellist.cpp11
-rw-r--r--noncore/net/opieirc/ircchannellist.h1
-rw-r--r--noncore/net/opieirc/ircchanneltab.cpp1
-rw-r--r--noncore/net/opieirc/ircmessageparser.cpp17
-rw-r--r--noncore/net/opieirc/ircservertab.cpp24
-rw-r--r--noncore/net/opieirc/ircsession.cpp4
-rw-r--r--noncore/net/opieirc/ircsession.h1
8 files changed, 50 insertions, 11 deletions
diff --git a/noncore/net/opieirc/config.in b/noncore/net/opieirc/config.in
index 30184a9..7c6949d 100644
--- a/noncore/net/opieirc/config.in
+++ b/noncore/net/opieirc/config.in
@@ -1,3 +1,3 @@
config OPIEIRC
- boolean "opieirc"
+ boolean "opie-irc (chat via your favorite IRC server)"
default "y"
diff --git a/noncore/net/opieirc/ircchannellist.cpp b/noncore/net/opieirc/ircchannellist.cpp
index e592d05..566b223 100644
--- a/noncore/net/opieirc/ircchannellist.cpp
+++ b/noncore/net/opieirc/ircchannellist.cpp
@@ -37 +37,12 @@ bool IRCChannelList::hasPerson(QString nick) {
}
+
+bool IRCChannelList::removePerson(QString nick) {
+ for (unsigned int i=0; i<count(); i++) {
+ if (text(i) == nick){
+ removeItem(i);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
diff --git a/noncore/net/opieirc/ircchannellist.h b/noncore/net/opieirc/ircchannellist.h
index fa3c8cd..deab649 100644
--- a/noncore/net/opieirc/ircchannellist.h
+++ b/noncore/net/opieirc/ircchannellist.h
@@ -31,2 +31,3 @@ public:
bool hasPerson(QString nick);
+ bool removePerson(QString nick);
protected:
diff --git a/noncore/net/opieirc/ircchanneltab.cpp b/noncore/net/opieirc/ircchanneltab.cpp
index beb8bce..2b8b65e 100644
--- a/noncore/net/opieirc/ircchanneltab.cpp
+++ b/noncore/net/opieirc/ircchanneltab.cpp
@@ -64,2 +64,3 @@ void IRCChannelTab::appendText(QString text) {
}
+ m_textview->ensureVisible(0, m_textview->contentsHeight());
m_textview->setText(txt);
diff --git a/noncore/net/opieirc/ircmessageparser.cpp b/noncore/net/opieirc/ircmessageparser.cpp
index 6b88f34..400ff41 100644
--- a/noncore/net/opieirc/ircmessageparser.cpp
+++ b/noncore/net/opieirc/ircmessageparser.cpp
@@ -208,4 +208,5 @@ void IRCMessageParser::parseLiteralPrivMsg(IRCMessage *message) {
void IRCMessageParser::parseLiteralNick(IRCMessage *message) {
- IRCPerson mask(message->prefix());
+ IRCPerson mask(message->prefix());
+ /* this way of handling nick changes really sucks */
if (mask.nick() == m_session->m_server->nick()) {
@@ -220,2 +221,13 @@ void IRCMessageParser::parseLiteralNick(IRCMessage *message) {
if (person) {
+ //IRCOutput output(OUTPUT_NICKCHANGE, tr("%1 is now known as %2").arg( mask.nick() ).arg( message->param(0)));
+
+ /* new code starts here -- this removes the person from all channels */
+ QList<IRCChannel> channels;
+ m_session->getChannelsByPerson(person, channels);
+ QListIterator<IRCChannel> it(channels);
+ for (;it.current(); ++it) {
+ IRCChannelPerson *chanperson = it.current()->getPerson(mask.nick());
+ it.current()->removePerson(chanperson);
+ chanperson->person->setNick(message->param(0));
+ it.current()->addPerson(chanperson);
IRCOutput output(OUTPUT_NICKCHANGE, tr("%1 is now known as %2").arg( mask.nick() ).arg( message->param(0 )));
@@ -223,2 +235,4 @@ void IRCMessageParser::parseLiteralNick(IRCMessage *message) {
emit outputReady(output);
+ }
+ /* new code ends here */
} else {
@@ -399,2 +413,3 @@ void IRCMessageParser::parseLiteralKick(IRCMessage *message) {
} else {
+ /* someone else got kicked */
channel->removePerson(person);
diff --git a/noncore/net/opieirc/ircservertab.cpp b/noncore/net/opieirc/ircservertab.cpp
index 1d9520a..2c28507 100644
--- a/noncore/net/opieirc/ircservertab.cpp
+++ b/noncore/net/opieirc/ircservertab.cpp
@@ -125,12 +125,6 @@ void IRCServerTab::executeCommand(IRCTab *tab, QString line) {
if (nickname.length() > 0) {
- if (line.length() > 7 + nickname.length()) {
- QString text = line.right(line.length()-nickname.length()-7);
+ QString text = line.right(line.length()-nickname.length()-5);
IRCPerson person;
person.setNick(nickname);
- m_session->kick(((IRCChannelTab *)tab)->channel(), &person, text);
- } else {
- IRCPerson person;
- person.setNick(nickname);
- m_session->kick(((IRCChannelTab *)tab)->channel(), &person);
- }
+ m_session->op(((IRCChannelTab *)tab)->channel(), &person);
}
@@ -348,3 +342,15 @@ void IRCServerTab::display(IRCOutput output) {
break;
- case OUTPUT_OTHERJOIN:
+/* case OUTPUT_NICKCHANGE: {
+ //WAS HERE
+ QString nick = ((IRCPerson *)output.getParam(0))->nick();
+ QListIterator<IRCChannelTab> it(m_channelTabs);
+ for (; it.current(); ++it) {
+ if (it.current()->list()->hasPerson(nick)) {
+ it.current()->appendText("<font color=\"" + m_notificationColor + "\">"+output.htmlMessage()+"</font><br>");
+ it.current()->list()->update();
+ }
+ }
+ }
+ break;
+ */ case OUTPUT_OTHERJOIN:
case OUTPUT_OTHERKICK:
diff --git a/noncore/net/opieirc/ircsession.cpp b/noncore/net/opieirc/ircsession.cpp
index 1cc1ee2..6404d71 100644
--- a/noncore/net/opieirc/ircsession.cpp
+++ b/noncore/net/opieirc/ircsession.cpp
@@ -62,2 +62,6 @@ void IRCSession::kick(IRCChannel *channel, IRCPerson *person) {
+void IRCSession::op(IRCChannel *channel, IRCPerson *person) {
+ m_connection->sendLine("MODE "+ channel->channelname() + " +ooo " + person->nick());
+}
+
void IRCSession::kick(IRCChannel *channel, IRCPerson *person, QString message) {
diff --git a/noncore/net/opieirc/ircsession.h b/noncore/net/opieirc/ircsession.h
index a6a3e50..f6330d8 100644
--- a/noncore/net/opieirc/ircsession.h
+++ b/noncore/net/opieirc/ircsession.h
@@ -53,2 +53,3 @@ public:
void part(IRCChannel *channel);
+ void op(IRCChannel *channel, IRCPerson *person);
void kick(IRCChannel *channel, IRCPerson *person);