author | wazlaf <wazlaf> | 2002-09-20 23:28:14 (UTC) |
---|---|---|
committer | wazlaf <wazlaf> | 2002-09-20 23:28:14 (UTC) |
commit | 912092425248f7fc5155b4c7c46b7d00ec2676bc (patch) (side-by-side diff) | |
tree | 5bbf746e83b2dffad89542c42031a573c34da751 /noncore/net/opieirc/ircservertab.cpp | |
parent | cd3df897c1b0ed93c2be3ab411011a0bdfe88bf9 (diff) | |
download | opie-912092425248f7fc5155b4c7c46b7d00ec2676bc.zip opie-912092425248f7fc5155b4c7c46b7d00ec2676bc.tar.gz opie-912092425248f7fc5155b4c7c46b7d00ec2676bc.tar.bz2 |
support for client commands (only /join implemented so far), crash bugfix, fixed 2 leaks, server browser now includes a channel list
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,4 +1,5 @@ #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) { @@ -25,10 +26,6 @@ void IRCServerTab::appendText(QString text) { } IRCServerTab::~IRCServerTab() { - QListIterator<IRCChannelTab> it(m_channelTabs); - for (; it.current(); ++it) { - m_mainWindow->killTab(it.current()); - } delete m_session; } @@ -48,9 +45,32 @@ 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() { @@ -58,10 +78,17 @@ void IRCServerTab::doConnect() { } 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); } } @@ -77,12 +104,23 @@ 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; case OUTPUT_SELFJOIN: { IRCChannelTab *channeltab = new IRCChannelTab((IRCChannel *)output.getParam(0), this, m_mainWindow, (QWidget *)parent()); @@ -92,7 +130,7 @@ 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: { @@ -102,7 +140,7 @@ void IRCServerTab::display(IRCOutput output) { } 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); @@ -110,7 +148,7 @@ void IRCServerTab::display(IRCOutput output) { 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: { @@ -118,7 +156,7 @@ void IRCServerTab::display(IRCOutput output) { 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(); } } @@ -129,18 +167,18 @@ void IRCServerTab::display(IRCOutput output) { 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; } } |