summaryrefslogtreecommitdiff
path: root/noncore/net/opieirc/ircservertab.cpp
Side-by-side diff
Diffstat (limited to 'noncore/net/opieirc/ircservertab.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opieirc/ircservertab.cpp70
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("&lt;<font color=\"#0000dd\">"+((IRCChannelPerson *)output.getParam(1))->person->nick()+"</font>&gt; "+output.message()+"<br>");
+ channelTab->appendText("&lt;<font color=\"#0000dd\">"+((IRCChannelPerson *)output.getParam(1))->person->nick()+"</font>&gt; "+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;
}
}