Diffstat (limited to 'noncore/net/opieirc/ircservertab.cpp') (more/less context) (ignore 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,5 +1,6 @@ #include <stdio.h> +#include <qtextstream.h> #include "ircservertab.h" IRCServerTab::IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *parent, const char *name, WFlags f) : IRCTab(parent, name, f) { m_server = server; @@ -24,12 +25,8 @@ void IRCServerTab::appendText(QString text) { m_textview->ensureVisible(0, m_textview->contentsHeight()); } IRCServerTab::~IRCServerTab() { - QListIterator<IRCChannelTab> it(m_channelTabs); - for (; it.current(); ++it) { - m_mainWindow->killTab(it.current()); - } delete m_session; } void IRCServerTab::removeChannelTab(IRCChannelTab *tab) { @@ -47,22 +44,52 @@ IRCSession *IRCServerTab::session() { IRCServer *IRCServerTab::server() { return &m_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>"); } void IRCServerTab::doConnect() { m_session->beginSession(); } void IRCServerTab::remove() { + /* Close requested */ if (m_session->isSessionActive()) { + /* While there is a running session */ m_close = TRUE; m_session->endSession(); } else { + /* Session has previously been closed */ + m_channelTabs.first(); + while (m_channelTabs.current() != 0) { + m_mainWindow->killTab(m_channelTabs.current()); + } m_mainWindow->killTab(this); } } @@ -76,14 +103,25 @@ IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) { return 0; } 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; case OUTPUT_SELFJOIN: { IRCChannelTab *channeltab = new IRCChannelTab((IRCChannel *)output.getParam(0), this, m_mainWindow, (QWidget *)parent()); m_channelTabs.append(channeltab); @@ -91,9 +129,9 @@ void IRCServerTab::display(IRCOutput output) { } break; case OUTPUT_CHANPRIVMSG: { 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>"); } break; case OUTPUT_SELFPART: { IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); @@ -101,25 +139,25 @@ void IRCServerTab::display(IRCOutput output) { m_mainWindow->killTab(channelTab); } break; 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)); if (channelTab) m_mainWindow->killTab(channelTab); } break; case OUTPUT_CHANACTION: { 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>"); } break; case OUTPUT_QUIT: { 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=\"#aa3e00\">"+output.message()+"</font><br>"); + it.current()->appendText("<font color=\"#aa3e00\">"+output.htmlMessage()+"</font><br>"); it.current()->list()->update(); } } } @@ -128,19 +166,19 @@ void IRCServerTab::display(IRCOutput output) { case OUTPUT_OTHERKICK: case OUTPUT_CHANPERSONMODE: case OUTPUT_OTHERPART: { 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(); } break; 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; } } |