Diffstat (limited to 'noncore/net/opieirc/ircservertab.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/net/opieirc/ircservertab.cpp | 70 |
1 files changed, 54 insertions, 16 deletions
diff --git a/noncore/net/opieirc/ircservertab.cpp b/noncore/net/opieirc/ircservertab.cpp index 724f4bd..2ad56a8 100644 --- a/noncore/net/opieirc/ircservertab.cpp +++ b/noncore/net/opieirc/ircservertab.cpp @@ -1,2 +1,3 @@ #include <stdio.h> +#include <qtextstream.h> #include "ircservertab.h" @@ -27,6 +28,2 @@ void IRCServerTab::appendText(QString text) { IRCServerTab::~IRCServerTab() { - QListIterator<IRCChannelTab> it(m_channelTabs); - for (; it.current(); ++it) { - m_mainWindow->killTab(it.current()); - } delete m_session; @@ -50,5 +47,28 @@ IRCServer *IRCServerTab::server() { +void IRCServerTab::executeCommand(IRCTab *tab, QString line) { + QTextIStream stream(&line); + QString command; + stream >> command; + command = command.upper().right(command.length()-1); + + if (command == "JOIN") { + QString channel; + stream >> channel; + if (channel.length() > 0 && channel.startsWith("#")) { + m_session->join(channel); + } else { + tab->appendText("<font color=\"#ff0000\">Unknown channel format!</font><br>"); + } + } else { + tab->appendText("<font color=\"#ff0000\">Unknown command</font><br>"); + } +} + void IRCServerTab::processCommand() { + QString text = m_field->text(); + if (text.startsWith("/") && !text.startsWith("//")) { + /* Command mode */ + executeCommand(this, text); + } m_field->clear(); - appendText("<font color=\"#ff0000\">Not supported yet</font><br>"); } @@ -60,3 +80,5 @@ void IRCServerTab::doConnect() { void IRCServerTab::remove() { + /* Close requested */ if (m_session->isSessionActive()) { + /* While there is a running session */ m_close = TRUE; @@ -64,2 +86,7 @@ void IRCServerTab::remove() { } else { + /* Session has previously been closed */ + m_channelTabs.first(); + while (m_channelTabs.current() != 0) { + m_mainWindow->killTab(m_channelTabs.current()); + } m_mainWindow->killTab(this); @@ -79,8 +106,19 @@ IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) { void IRCServerTab::display(IRCOutput output) { + + /* All messages to be displayed inside the GUI get here */ switch (output.type()) { case OUTPUT_CONNCLOSE: - if (m_close) + if (m_close) { + m_channelTabs.first(); + while (m_channelTabs.current() != 0) { + m_mainWindow->killTab(m_channelTabs.current()); + } m_mainWindow->killTab(this); - else - appendText("<font color=\"#0000dd\">" + output.message() +"</font><br>"); + } else { + appendText("<font color=\"#0000dd\">" + output.htmlMessage() +"</font><br>"); + QListIterator<IRCChannelTab> it(m_channelTabs); + for (; it.current(); ++it) { + it.current()->appendText("<font color=\"#0000dd\">" + output.htmlMessage() +"</font><br>"); + } + } break; @@ -94,3 +132,3 @@ void IRCServerTab::display(IRCOutput output) { IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); - channelTab->appendText("<<font color=\"#0000dd\">"+((IRCChannelPerson *)output.getParam(1))->person->nick()+"</font>> "+output.message()+"<br>"); + channelTab->appendText("<<font color=\"#0000dd\">"+((IRCChannelPerson *)output.getParam(1))->person->nick()+"</font>> "+output.htmlMessage()+"<br>"); } @@ -104,3 +142,3 @@ void IRCServerTab::display(IRCOutput output) { case OUTPUT_SELFKICK: { - appendText("<font color=\"#ff0000\">" + output.message() + "</font><br>"); + appendText("<font color=\"#ff0000\">" + output.htmlMessage() + "</font><br>"); IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); @@ -112,3 +150,3 @@ void IRCServerTab::display(IRCOutput output) { IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); - channelTab->appendText("<font color=\"#cc0000\">"+output.message()+"</font><br>"); + channelTab->appendText("<font color=\"#cc0000\">"+output.htmlMessage()+"</font><br>"); } @@ -120,3 +158,3 @@ void IRCServerTab::display(IRCOutput output) { if (it.current()->list()->hasPerson(nick)) { - it.current()->appendText("<font color=\"#aa3e00\">"+output.message()+"</font><br>"); + it.current()->appendText("<font color=\"#aa3e00\">"+output.htmlMessage()+"</font><br>"); it.current()->list()->update(); @@ -131,3 +169,3 @@ void IRCServerTab::display(IRCOutput output) { IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); - channelTab->appendText("<font color=\"#aa3e00\">"+output.message()+"</font><br>"); + channelTab->appendText("<font color=\"#aa3e00\">"+output.htmlMessage()+"</font><br>"); channelTab->list()->update(); @@ -136,9 +174,9 @@ void IRCServerTab::display(IRCOutput output) { case OUTPUT_CTCP: - appendText("<font color=\"#00bb00\">" + output.message() + "</font><br>"); + appendText("<font color=\"#00bb00\">" + output.htmlMessage() + "</font><br>"); break; case OUTPUT_ERROR: - appendText("<font color=\"#ff0000\">" + output.message() + "</font><br>"); + appendText("<font color=\"#ff0000\">" + output.htmlMessage() + "</font><br>"); break; default: - appendText("<font color=\"#0000dd\">" + output.message() + "</font><br>"); + appendText("<font color=\"#0000dd\">" + output.htmlMessage() + "</font><br>"); break; |