-rw-r--r-- | noncore/net/opieirc/config.in | 2 | ||||
-rw-r--r-- | noncore/net/opieirc/ircchannellist.cpp | 11 | ||||
-rw-r--r-- | noncore/net/opieirc/ircchannellist.h | 1 | ||||
-rw-r--r-- | noncore/net/opieirc/ircchanneltab.cpp | 1 | ||||
-rw-r--r-- | noncore/net/opieirc/ircmessageparser.cpp | 17 | ||||
-rw-r--r-- | noncore/net/opieirc/ircservertab.cpp | 24 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsession.cpp | 4 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsession.h | 1 |
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); |