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.cpp111
1 files changed, 100 insertions, 11 deletions
diff --git a/noncore/net/opieirc/ircservertab.cpp b/noncore/net/opieirc/ircservertab.cpp
index 5aa447f..1d9520a 100644
--- a/noncore/net/opieirc/ircservertab.cpp
+++ b/noncore/net/opieirc/ircservertab.cpp
@@ -22,9 +22,15 @@ IRCServerTab::IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *pa
22 connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); 22 connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand()));
23 m_field->setFocus(); 23 m_field->setFocus();
24 connect(m_session, SIGNAL(outputReady(IRCOutput)), this, SLOT(display(IRCOutput))); 24 connect(m_session, SIGNAL(outputReady(IRCOutput)), this, SLOT(display(IRCOutput)));
25 connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling()));
25 settingsChanged(); 26 settingsChanged();
26} 27}
27 28
29void IRCServerTab::scrolling(){
30 m_textview->ensureVisible(0, m_textview->contentsHeight());
31}
32
33
28void IRCServerTab::appendText(QString text) { 34void IRCServerTab::appendText(QString text) {
29 /* not using append because it creates layout problems */ 35 /* not using append because it creates layout problems */
30 QString txt = m_textview->text() + text + "\n"; 36 QString txt = m_textview->text() + text + "\n";
@@ -64,6 +70,10 @@ QString IRCServerTab::title() {
64IRCSession *IRCServerTab::session() { 70IRCSession *IRCServerTab::session() {
65 return m_session; 71 return m_session;
66} 72}
73/*
74QString *IRCServerTab::mynick() {
75 return (*m_server->nick());
76} */
67 77
68IRCServer *IRCServerTab::server() { 78IRCServer *IRCServerTab::server() {
69 return &m_server; 79 return &m_server;
@@ -79,16 +89,92 @@ void IRCServerTab::executeCommand(IRCTab *tab, QString line) {
79 QString command; 89 QString command;
80 stream >> command; 90 stream >> command;
81 command = command.upper().right(command.length()-1); 91 command = command.upper().right(command.length()-1);
82 92
83 if (command == "JOIN") { 93 //JOIN
94 if (command == "JOIN" || command == "J") {
84 QString channel; 95 QString channel;
85 stream >> channel; 96 stream >> channel;
86 if (channel.length() > 0 && (channel.startsWith("#") || channel.startsWith("+"))) { 97 if (channel.length() > 0 && (channel.startsWith("#") || channel.startsWith("+"))) {
87 m_session->join(channel); 98 m_session->join(channel);
88 } else { 99 } else {
89 tab->appendText("<font color=\"" + m_errorColor + "\">Unknown channel format!</font><br>"); 100 tab->appendText("<font color=\"" + m_errorColor + "\">Unknown channel format!</font><br>");
90 } 101 }
91 } else if (command == "ME") { 102 }
103
104 //KICK
105 else if (command == "KICK"){
106 QString nickname;
107 stream >> nickname;
108 if (nickname.length() > 0) {
109 if (line.length() > 7 + nickname.length()) {
110 QString text = line.right(line.length()-nickname.length()-7);
111 IRCPerson person;
112 person.setNick(nickname);
113 m_session->kick(((IRCChannelTab *)tab)->channel(), &person, text);
114 } else {
115 IRCPerson person;
116 person.setNick(nickname);
117 m_session->kick(((IRCChannelTab *)tab)->channel(), &person);
118 }
119 }
120 }
121
122 else if (command == "OP"){
123 QString nickname;
124 stream >> nickname;
125 if (nickname.length() > 0) {
126 if (line.length() > 7 + nickname.length()) {
127 QString text = line.right(line.length()-nickname.length()-7);
128 IRCPerson person;
129 person.setNick(nickname);
130 m_session->kick(((IRCChannelTab *)tab)->channel(), &person, text);
131 } else {
132 IRCPerson person;
133 person.setNick(nickname);
134 m_session->kick(((IRCChannelTab *)tab)->channel(), &person);
135 }
136 }
137 }
138
139 //SEND MODES
140 else if (command == "MODE"){
141 QString text = line.right(line.length()-6);
142 if (text.length() > 0) {
143 m_session->mode(text);
144 } else {
145 tab->appendText("<font color=\"" + m_errorColor + "\">/mode channel {[+|-]|o|p|s|i|t|n|b|v} [limit] [user] [ban mask]<br>/mode nickname {[+|-]|i|w|s|o}</font><br>");
146 }
147 }
148 //SEND RAW MESSAGE TO SERVER, COMPLETELY UNCHECKED - anything in the RFC...or really anything you want
149 else if (command == "RAW"){
150 QString text = line.right(line.length()-5);
151 if (text.length() > 0) {
152 m_session->raw(text);
153 }
154 }
155 else if (command == "SUSPEND"){
156 QString text = line.right(line.length()-9);
157 if (text.upper() == "ON") {
158 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
159 }
160 else if (text.upper() == "OFF"){
161 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable;
162 } else {
163 tab->appendText("<font color=\"" + m_errorColor + "\">Line: "+ line +"</font><br>Text: "+text);
164 }
165 }
166
167 else if (command == "QUIT"){
168 QString text = line.right(line.length()-6);
169 if (text.length() > 0) {
170 m_session->quit(text);
171 } else {
172 m_session->quit();
173 }
174 }
175
176 //SEND ACTION
177 else if (command == "ME") {
92 QString text = line.right(line.length()-4); 178 QString text = line.right(line.length()-4);
93 if (text.length() > 0) { 179 if (text.length() > 0) {
94 if (tab->isA("IRCChannelTab")) { 180 if (tab->isA("IRCChannelTab")) {
@@ -98,10 +184,12 @@ void IRCServerTab::executeCommand(IRCTab *tab, QString line) {
98 tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>"); 184 tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>");
99 m_session->sendAction(((IRCQueryTab *)tab)->person(), text); 185 m_session->sendAction(((IRCQueryTab *)tab)->person(), text);
100 } else { 186 } else {
101 tab->appendText("<font color=\"" + m_errorColor + "\">Invalid tab for this command</font><br>"); 187 tab->appendText("<font color=\"" + m_errorColor + "\">Invalid tab for this command</font><br>");
102 } 188 }
103 } 189 }
104 } else if (command == "MSG") { 190 }
191 //SEND PRIVMSG
192 else if (command == "MSG") {
105 QString nickname; 193 QString nickname;
106 stream >> nickname; 194 stream >> nickname;
107 if (nickname.length() > 0) { 195 if (nickname.length() > 0) {
@@ -112,9 +200,10 @@ void IRCServerTab::executeCommand(IRCTab *tab, QString line) {
112 tab->appendText("<font color=\"" + m_textColor + "\">&gt;</font><font color=\"" + m_otherColor + "\">"+IRCOutput::toHTML(nickname)+"</font><font color=\"" + m_textColor + "\">&lt; "+IRCOutput::toHTML(text)+"</font><br>"); 200 tab->appendText("<font color=\"" + m_textColor + "\">&gt;</font><font color=\"" + m_otherColor + "\">"+IRCOutput::toHTML(nickname)+"</font><font color=\"" + m_textColor + "\">&lt; "+IRCOutput::toHTML(text)+"</font><br>");
113 m_session->sendMessage(&person, text); 201 m_session->sendMessage(&person, text);
114 } 202 }
115 } 203 }
116 } else { 204 }
117 tab->appendText("<font color=\"" + m_errorColor + "\">Unknown command</font><br>"); 205 else {
206 tab->appendText("<font color=\"" + m_errorColor + "\">Unknown command</font><br>");
118 } 207 }
119} 208}
120 209
@@ -153,7 +242,7 @@ void IRCServerTab::remove() {
153 242
154IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) { 243IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) {
155 QListIterator<IRCChannelTab> it(m_channelTabs); 244 QListIterator<IRCChannelTab> it(m_channelTabs);
156 245
157 for (; it.current(); ++it) { 246 for (; it.current(); ++it) {
158 if (it.current()->channel() == channel) 247 if (it.current()->channel() == channel)
159 return it.current(); 248 return it.current();
@@ -163,7 +252,7 @@ IRCChannelTab *IRCServerTab::getTabForChannel(IRCChannel *channel) {
163 252
164IRCQueryTab *IRCServerTab::getTabForQuery(IRCPerson *person) { 253IRCQueryTab *IRCServerTab::getTabForQuery(IRCPerson *person) {
165 QListIterator<IRCQueryTab> it(m_queryTabs); 254 QListIterator<IRCQueryTab> it(m_queryTabs);
166 255
167 for (; it.current(); ++it) { 256 for (; it.current(); ++it) {
168 if (it.current()->person()->nick() == person->nick()) 257 if (it.current()->person()->nick() == person->nick())
169 return it.current(); 258 return it.current();