summaryrefslogtreecommitdiff
path: root/noncore/net/opieirc/ircservertab.cpp
Side-by-side diff
Diffstat (limited to 'noncore/net/opieirc/ircservertab.cpp') (more/less context) (show 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,7 +1,8 @@
#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;
m_session = new IRCSession(&m_server);
m_mainWindow = mainWindow;
@@ -22,16 +23,12 @@ void IRCServerTab::appendText(QString text) {
/* not using append because it creates layout problems */
m_textview->setText(m_textview->text() + 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) {
m_channelTabs.remove(tab);
}
@@ -45,26 +42,56 @@ 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);
}
}
IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) {
QListIterator<IRCChannelTab> it(m_channelTabs);
@@ -74,73 +101,84 @@ IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) {
return it.current();
}
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);
m_mainWindow->addTab(channeltab);
}
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: {
IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0));
if (channelTab)
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();
}
}
}
break;
case OUTPUT_OTHERJOIN:
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;
}
}