Diffstat (limited to 'noncore/net/opieirc/ircmessageparser.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/opieirc/ircmessageparser.cpp | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/noncore/net/opieirc/ircmessageparser.cpp b/noncore/net/opieirc/ircmessageparser.cpp index 5c70753..d1b70a5 100644 --- a/noncore/net/opieirc/ircmessageparser.cpp +++ b/noncore/net/opieirc/ircmessageparser.cpp | |||
@@ -14,8 +14,9 @@ IRCLiteralMessageParserStruct IRCMessageParser::literalParserProcTable[] = { | |||
14 | { "ERROR", FUNC(parseLiteralError) }, | 14 | { "ERROR", FUNC(parseLiteralError) }, |
15 | { "ERROR:", FUNC(parseLiteralError) }, | 15 | { "ERROR:", FUNC(parseLiteralError) }, |
16 | { "MODE", FUNC(parseLiteralMode) }, | 16 | { "MODE", FUNC(parseLiteralMode) }, |
17 | { "KICK", FUNC(parseLiteralKick) }, | 17 | { "KICK", FUNC(parseLiteralKick) }, |
18 | { "TOPIC", FUNC(parseLiteralTopic) }, | ||
18 | { 0 , 0 } | 19 | { 0 , 0 } |
19 | }; | 20 | }; |
20 | 21 | ||
21 | /* Lookup table for literal commands */ | 22 | /* Lookup table for literal commands */ |
@@ -35,8 +36,10 @@ IRCNumericalMessageParserStruct IRCMessageParser::numericalParserProcTable[] = { | |||
35 | { 5, FUNC(parseNumerical005) }, // RPL_BOUNCE, RPL_PROTOCTL | 36 | { 5, FUNC(parseNumerical005) }, // RPL_BOUNCE, RPL_PROTOCTL |
36 | { 251, FUNC(parseNumericalStats) }, // RPL_LUSERCLIENT | 37 | { 251, FUNC(parseNumericalStats) }, // RPL_LUSERCLIENT |
37 | { 254, FUNC(nullFunc)}, // RPL_LUSERCHANNELS | 38 | { 254, FUNC(nullFunc)}, // RPL_LUSERCHANNELS |
38 | { 255, FUNC(parseNumericalStats) }, // RPL_LUSERNAME | 39 | { 255, FUNC(parseNumericalStats) }, // RPL_LUSERNAME |
40 | { 332, FUNC(parseNumericalTopic) }, // RPL_TOPIC | ||
41 | { 333, FUNC(parseNumericalTopicWhoTime) }, // RPL_TOPICWHOTIME | ||
39 | { 353, FUNC(parseNumericalNames) }, // RPL_NAMREPLY | 42 | { 353, FUNC(parseNumericalNames) }, // RPL_NAMREPLY |
40 | { 366, FUNC(parseNumericalEndOfNames) }, // RPL_ENDOFNAMES | 43 | { 366, FUNC(parseNumericalEndOfNames) }, // RPL_ENDOFNAMES |
41 | { 375, FUNC(parseNumericalStats) }, // RPL_MOTDSTART | 44 | { 375, FUNC(parseNumericalStats) }, // RPL_MOTDSTART |
42 | { 372, FUNC(parseNumericalStats) }, // RPL_MOTD | 45 | { 372, FUNC(parseNumericalStats) }, // RPL_MOTD |
@@ -190,9 +193,9 @@ void IRCMessageParser::parseLiteralPrivMsg(IRCMessage *message) { | |||
190 | } else { | 193 | } else { |
191 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel message with unknown sender"))); | 194 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel message with unknown sender"))); |
192 | } | 195 | } |
193 | } else { | 196 | } else { |
194 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel message with unknown channel"))); | 197 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel message with unknown channel ") + message->param(0))); |
195 | } | 198 | } |
196 | } else { | 199 | } else { |
197 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Received PRIVMSG of unknown type"))); | 200 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Received PRIVMSG of unknown type"))); |
198 | } | 201 | } |
@@ -241,8 +244,20 @@ void IRCMessageParser::parseLiteralQuit(IRCMessage *message) { | |||
241 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown person quit - desynchronized?"))); | 244 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown person quit - desynchronized?"))); |
242 | } | 245 | } |
243 | } | 246 | } |
244 | 247 | ||
248 | void IRCMessageParser::parseLiteralTopic(IRCMessage *message) { | ||
249 | IRCPerson mask(message->prefix()); | ||
250 | IRCChannel *channel = m_session->getChannel(message->param(0)); | ||
251 | if (channel) { | ||
252 | IRCOutput output(OUTPUT_TOPIC, mask.nick() + tr(" changed topic to ") + "\"" + message->param(1) + "\""); | ||
253 | output.addParam(channel); | ||
254 | emit outputReady(output); | ||
255 | } else { | ||
256 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown channel topic - desynchronized?"))); | ||
257 | } | ||
258 | } | ||
259 | |||
245 | void IRCMessageParser::parseLiteralError(IRCMessage *message) { | 260 | void IRCMessageParser::parseLiteralError(IRCMessage *message) { |
246 | emit outputReady(IRCOutput(OUTPUT_ERROR, message->allParameters())); | 261 | emit outputReady(IRCOutput(OUTPUT_ERROR, message->allParameters())); |
247 | } | 262 | } |
248 | 263 | ||
@@ -483,4 +498,20 @@ void IRCMessageParser::parseNumericalNicknameInUse(IRCMessage *) { | |||
483 | 498 | ||
484 | void IRCMessageParser::parseNumericalNoSuchNick(IRCMessage *) { | 499 | void IRCMessageParser::parseNumericalNoSuchNick(IRCMessage *) { |
485 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("No such nickname"))); | 500 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("No such nickname"))); |
486 | } | 501 | } |
502 | |||
503 | void IRCMessageParser::parseNumericalTopic(IRCMessage *message) { | ||
504 | IRCChannel *channel = m_session->getChannel(message->param(1)); | ||
505 | if (channel) { | ||
506 | IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel " + channel->channelname() + " is \"" + message->param(2) + "\"")); | ||
507 | output.addParam(channel); | ||
508 | emit outputReady(output); | ||
509 | } else { | ||
510 | IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel " + message->param(1) + " is \"" + message->param(2) + "\"")); | ||
511 | output.addParam(0); | ||
512 | emit outputReady(output); | ||
513 | } | ||
514 | } | ||
515 | |||
516 | void IRCMessageParser::parseNumericalTopicWhoTime(IRCMessage *message) { | ||
517 | } | ||