summaryrefslogtreecommitdiff
path: root/noncore/net/opieirc/ircservertab.cpp
Unidiff
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 @@
1#include <stdio.h> 1#include <stdio.h>
2#include <qtextstream.h>
2#include "ircservertab.h" 3#include "ircservertab.h"
3 4
4IRCServerTab::IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *parent, const char *name, WFlags f) : IRCTab(parent, name, f) { 5IRCServerTab::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) {
25} 26}
26 27
27IRCServerTab::~IRCServerTab() { 28IRCServerTab::~IRCServerTab() {
28 QListIterator<IRCChannelTab> it(m_channelTabs);
29 for (; it.current(); ++it) {
30 m_mainWindow->killTab(it.current());
31 }
32 delete m_session; 29 delete m_session;
33} 30}
34 31
@@ -48,9 +45,32 @@ IRCServer *IRCServerTab::server() {
48 return &m_server; 45 return &m_server;
49} 46}
50 47
48void IRCServerTab::executeCommand(IRCTab *tab, QString line) {
49 QTextIStream stream(&line);
50 QString command;
51 stream >> command;
52 command = command.upper().right(command.length()-1);
53
54 if (command == "JOIN") {
55 QString channel;
56 stream >> channel;
57 if (channel.length() > 0 && channel.startsWith("#")) {
58 m_session->join(channel);
59 } else {
60 tab->appendText("<font color=\"#ff0000\">Unknown channel format!</font><br>");
61 }
62 } else {
63 tab->appendText("<font color=\"#ff0000\">Unknown command</font><br>");
64 }
65}
66
51void IRCServerTab::processCommand() { 67void IRCServerTab::processCommand() {
68 QString text = m_field->text();
69 if (text.startsWith("/") && !text.startsWith("//")) {
70 /* Command mode */
71 executeCommand(this, text);
72 }
52 m_field->clear(); 73 m_field->clear();
53 appendText("<font color=\"#ff0000\">Not supported yet</font><br>");
54} 74}
55 75
56void IRCServerTab::doConnect() { 76void IRCServerTab::doConnect() {
@@ -58,10 +78,17 @@ void IRCServerTab::doConnect() {
58} 78}
59 79
60void IRCServerTab::remove() { 80void IRCServerTab::remove() {
81 /* Close requested */
61 if (m_session->isSessionActive()) { 82 if (m_session->isSessionActive()) {
83 /* While there is a running session */
62 m_close = TRUE; 84 m_close = TRUE;
63 m_session->endSession(); 85 m_session->endSession();
64 } else { 86 } else {
87 /* Session has previously been closed */
88 m_channelTabs.first();
89 while (m_channelTabs.current() != 0) {
90 m_mainWindow->killTab(m_channelTabs.current());
91 }
65 m_mainWindow->killTab(this); 92 m_mainWindow->killTab(this);
66 } 93 }
67} 94}
@@ -77,12 +104,23 @@ IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) {
77} 104}
78 105
79void IRCServerTab::display(IRCOutput output) { 106void IRCServerTab::display(IRCOutput output) {
107
108 /* All messages to be displayed inside the GUI get here */
80 switch (output.type()) { 109 switch (output.type()) {
81 case OUTPUT_CONNCLOSE: 110 case OUTPUT_CONNCLOSE:
82 if (m_close) 111 if (m_close) {
112 m_channelTabs.first();
113 while (m_channelTabs.current() != 0) {
114 m_mainWindow->killTab(m_channelTabs.current());
115 }
83 m_mainWindow->killTab(this); 116 m_mainWindow->killTab(this);
84 else 117 } else {
85 appendText("<font color=\"#0000dd\">" + output.message() +"</font><br>"); 118 appendText("<font color=\"#0000dd\">" + output.htmlMessage() +"</font><br>");
119 QListIterator<IRCChannelTab> it(m_channelTabs);
120 for (; it.current(); ++it) {
121 it.current()->appendText("<font color=\"#0000dd\">" + output.htmlMessage() +"</font><br>");
122 }
123 }
86 break; 124 break;
87 case OUTPUT_SELFJOIN: { 125 case OUTPUT_SELFJOIN: {
88 IRCChannelTab *channeltab = new IRCChannelTab((IRCChannel *)output.getParam(0), this, m_mainWindow, (QWidget *)parent()); 126 IRCChannelTab *channeltab = new IRCChannelTab((IRCChannel *)output.getParam(0), this, m_mainWindow, (QWidget *)parent());
@@ -92,7 +130,7 @@ void IRCServerTab::display(IRCOutput output) {
92 break; 130 break;
93 case OUTPUT_CHANPRIVMSG: { 131 case OUTPUT_CHANPRIVMSG: {
94 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); 132 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0));
95 channelTab->appendText("&lt;<font color=\"#0000dd\">"+((IRCChannelPerson *)output.getParam(1))->person->nick()+"</font>&gt; "+output.message()+"<br>"); 133 channelTab->appendText("&lt;<font color=\"#0000dd\">"+((IRCChannelPerson *)output.getParam(1))->person->nick()+"</font>&gt; "+output.htmlMessage()+"<br>");
96 } 134 }
97 break; 135 break;
98 case OUTPUT_SELFPART: { 136 case OUTPUT_SELFPART: {
@@ -102,7 +140,7 @@ void IRCServerTab::display(IRCOutput output) {
102 } 140 }
103 break; 141 break;
104 case OUTPUT_SELFKICK: { 142 case OUTPUT_SELFKICK: {
105 appendText("<font color=\"#ff0000\">" + output.message() + "</font><br>"); 143 appendText("<font color=\"#ff0000\">" + output.htmlMessage() + "</font><br>");
106 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); 144 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0));
107 if (channelTab) 145 if (channelTab)
108 m_mainWindow->killTab(channelTab); 146 m_mainWindow->killTab(channelTab);
@@ -110,7 +148,7 @@ void IRCServerTab::display(IRCOutput output) {
110 break; 148 break;
111 case OUTPUT_CHANACTION: { 149 case OUTPUT_CHANACTION: {
112 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); 150 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0));
113 channelTab->appendText("<font color=\"#cc0000\">"+output.message()+"</font><br>"); 151 channelTab->appendText("<font color=\"#cc0000\">"+output.htmlMessage()+"</font><br>");
114 } 152 }
115 break; 153 break;
116 case OUTPUT_QUIT: { 154 case OUTPUT_QUIT: {
@@ -118,7 +156,7 @@ void IRCServerTab::display(IRCOutput output) {
118 QListIterator<IRCChannelTab> it(m_channelTabs); 156 QListIterator<IRCChannelTab> it(m_channelTabs);
119 for (; it.current(); ++it) { 157 for (; it.current(); ++it) {
120 if (it.current()->list()->hasPerson(nick)) { 158 if (it.current()->list()->hasPerson(nick)) {
121 it.current()->appendText("<font color=\"#aa3e00\">"+output.message()+"</font><br>"); 159 it.current()->appendText("<font color=\"#aa3e00\">"+output.htmlMessage()+"</font><br>");
122 it.current()->list()->update(); 160 it.current()->list()->update();
123 } 161 }
124 } 162 }
@@ -129,18 +167,18 @@ void IRCServerTab::display(IRCOutput output) {
129 case OUTPUT_CHANPERSONMODE: 167 case OUTPUT_CHANPERSONMODE:
130 case OUTPUT_OTHERPART: { 168 case OUTPUT_OTHERPART: {
131 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0)); 169 IRCChannelTab *channelTab = getTabForChannel((IRCChannel *)output.getParam(0));
132 channelTab->appendText("<font color=\"#aa3e00\">"+output.message()+"</font><br>"); 170 channelTab->appendText("<font color=\"#aa3e00\">"+output.htmlMessage()+"</font><br>");
133 channelTab->list()->update(); 171 channelTab->list()->update();
134 } 172 }
135 break; 173 break;
136 case OUTPUT_CTCP: 174 case OUTPUT_CTCP:
137 appendText("<font color=\"#00bb00\">" + output.message() + "</font><br>"); 175 appendText("<font color=\"#00bb00\">" + output.htmlMessage() + "</font><br>");
138 break; 176 break;
139 case OUTPUT_ERROR: 177 case OUTPUT_ERROR:
140 appendText("<font color=\"#ff0000\">" + output.message() + "</font><br>"); 178 appendText("<font color=\"#ff0000\">" + output.htmlMessage() + "</font><br>");
141 break; 179 break;
142 default: 180 default:
143 appendText("<font color=\"#0000dd\">" + output.message() + "</font><br>"); 181 appendText("<font color=\"#0000dd\">" + output.htmlMessage() + "</font><br>");
144 break; 182 break;
145 } 183 }
146} 184}