summaryrefslogtreecommitdiff
authorerik <erik>2007-07-09 22:06:00 (UTC)
committer erik <erik>2007-07-09 22:06:00 (UTC)
commita91bbaee9eb419dc985d9f5c3689831c8aa75c1e (patch) (unidiff)
treeba0da224a93f7af1a80a4bef3186edff8dc9483f
parent1ec355e1cc016edd2e322ff7d57469feaa46474b (diff)
downloadopie-a91bbaee9eb419dc985d9f5c3689831c8aa75c1e.zip
opie-a91bbaee9eb419dc985d9f5c3689831c8aa75c1e.tar.gz
opie-a91bbaee9eb419dc985d9f5c3689831c8aa75c1e.tar.bz2
Fix for opie bug 1719. This should make opie-irc play nicer with utf-8.
Patches were culled from OE. Thanks to whoever the original patch author was.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opieirc/ircconnection.cpp5
-rw-r--r--noncore/net/opieirc/ircmessageparser.cpp4
2 files changed, 5 insertions, 4 deletions
diff --git a/noncore/net/opieirc/ircconnection.cpp b/noncore/net/opieirc/ircconnection.cpp
index 88e63f7..fb7e168 100644
--- a/noncore/net/opieirc/ircconnection.cpp
+++ b/noncore/net/opieirc/ircconnection.cpp
@@ -20,25 +20,26 @@ IRCConnection::IRCConnection(IRCServer *server) {
20 20
21/* Connect to the IRC server */ 21/* Connect to the IRC server */
22void IRCConnection::doConnect() { 22void IRCConnection::doConnect() {
23 ASSERT(!m_connected); 23 ASSERT(!m_connected);
24 m_socket->connectToHost(m_server->hostname(), m_server->port()); 24 m_socket->connectToHost(m_server->hostname(), m_server->port());
25} 25}
26 26
27/* Send commands to the IRC server */ 27/* Send commands to the IRC server */
28void IRCConnection::sendLine(QString line) { 28void IRCConnection::sendLine(QString line) {
29 while((line.right(1) == "\n") || (line.right(1) == "\r")) 29 while((line.right(1) == "\n") || (line.right(1) == "\r"))
30 line = line.left(line.length() - 1); 30 line = line.left(line.length() - 1);
31 line.append("\r\n"); 31 line.append("\r\n");
32 m_socket->writeBlock(line, line.length()); 32 QCString uline = line.utf8();
33 m_socket->writeBlock(uline, uline.length());
33} 34}
34 35
35void IRCConnection::sendCTCPReply(const QString &nickname, const QString &type, const QString &args) { 36void IRCConnection::sendCTCPReply(const QString &nickname, const QString &type, const QString &args) {
36 sendLine("NOTICE " + nickname + " :\001" + type + " " + args + "\001"); 37 sendLine("NOTICE " + nickname + " :\001" + type + " " + args + "\001");
37} 38}
38 39
39void IRCConnection::sendCTCPRequest(const QString &nickname, const QString &type, const QString &args) { 40void IRCConnection::sendCTCPRequest(const QString &nickname, const QString &type, const QString &args) {
40 sendLine("PRIVMSG " + nickname + " :\001" + type + " " + args + "\001"); 41 sendLine("PRIVMSG " + nickname + " :\001" + type + " " + args + "\001");
41} 42}
42 43
43void IRCConnection::sendCTCPPing(const QString &nickname) { 44void IRCConnection::sendCTCPPing(const QString &nickname) {
44 QDateTime tm; 45 QDateTime tm;
@@ -68,25 +69,25 @@ void IRCConnection::login() {
68 if (m_server->password().length()>0) { 69 if (m_server->password().length()>0) {
69 loginString += "PASS " + m_server->password() + "\r\n"; 70 loginString += "PASS " + m_server->password() + "\r\n";
70 } 71 }
71 loginString += "NICK " + m_server->nick() + "\r\n" + 72 loginString += "NICK " + m_server->nick() + "\r\n" +
72 "USER " + m_server->username() + " " + hostname + 73 "USER " + m_server->username() + " " + hostname +
73 " " + m_server->hostname() + " :" + m_server->realname() + "\r\n"; 74 " " + m_server->hostname() + " :" + m_server->realname() + "\r\n";
74 sendLine(loginString); 75 sendLine(loginString);
75} 76}
76 77
77/* Called when data arrives on the socket */ 78/* Called when data arrives on the socket */
78void IRCConnection::dataReady() { 79void IRCConnection::dataReady() {
79 while(m_socket->canReadLine()) { 80 while(m_socket->canReadLine()) {
80 IRCMessage message(m_socket->readLine()); 81 IRCMessage message(QString::fromUtf8(m_socket->readLine()));
81 if (!m_loggedIn && message.isNumerical() && message.commandNumber() == 1) { 82 if (!m_loggedIn && message.isNumerical() && message.commandNumber() == 1) {
82 /* Now autojoin all channels specified inside the server profile */ 83 /* Now autojoin all channels specified inside the server profile */
83 QStringList channels = QStringList::split(QChar(','), m_server->channels()); 84 QStringList channels = QStringList::split(QChar(','), m_server->channels());
84 for (QStringList::Iterator it = channels.begin(); it != channels.end(); ++it) { 85 for (QStringList::Iterator it = channels.begin(); it != channels.end(); ++it) {
85 QString channelName = (*it).stripWhiteSpace(); 86 QString channelName = (*it).stripWhiteSpace();
86 if (channelName.startsWith("#") || channelName.startsWith("+")) { 87 if (channelName.startsWith("#") || channelName.startsWith("+")) {
87 sendLine("JOIN "+ channelName); 88 sendLine("JOIN "+ channelName);
88 } 89 }
89 } 90 }
90 m_loggedIn = TRUE; 91 m_loggedIn = TRUE;
91 emit outputReady(IRCOutput(OUTPUT_CLIENTMESSAGE, tr("Successfully logged in."))); 92 emit outputReady(IRCOutput(OUTPUT_CLIENTMESSAGE, tr("Successfully logged in.")));
92 } 93 }
diff --git a/noncore/net/opieirc/ircmessageparser.cpp b/noncore/net/opieirc/ircmessageparser.cpp
index c449a65..ae47f69 100644
--- a/noncore/net/opieirc/ircmessageparser.cpp
+++ b/noncore/net/opieirc/ircmessageparser.cpp
@@ -658,26 +658,26 @@ void IRCMessageParser::parseNumericalNicknameInUse(IRCMessage *) {
658 658
659 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Nickname is in use, please reconnect with a different nickname"))); 659 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Nickname is in use, please reconnect with a different nickname")));
660 m_session->endSession(); 660 m_session->endSession();
661} 661}
662 662
663void IRCMessageParser::parseNumericalNoSuchNick(IRCMessage *) { 663void IRCMessageParser::parseNumericalNoSuchNick(IRCMessage *) {
664 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("No such nickname"))); 664 emit outputReady(IRCOutput(OUTPUT_ERROR, tr("No such nickname")));
665} 665}
666 666
667void IRCMessageParser::parseNumericalTopic(IRCMessage *message) { 667void IRCMessageParser::parseNumericalTopic(IRCMessage *message) {
668 IRCChannel *channel = m_session->getChannel(message->param(1).lower()); 668 IRCChannel *channel = m_session->getChannel(message->param(1).lower());
669 if (channel) { 669 if (channel) {
670 IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel " + channel->channelname() + " is \"" + message->param(2) + "\"")); 670 IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel ") + channel->channelname() + tr(" is \"") + message->param(2) + "\"");
671 output.addParam(channel); 671 output.addParam(channel);
672 emit outputReady(output); 672 emit outputReady(output);
673 } else { 673 } else {
674 IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel " + message->param(1) + " is \"" + message->param(2) + "\"")); 674 IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel ") + message->param(1) + tr(" is \"") + message->param(2) + "\"");
675 output.addParam(0); 675 output.addParam(0);
676 emit outputReady(output); 676 emit outputReady(output);
677 } 677 }
678} 678}
679 679
680void IRCMessageParser::parseNumericalTopicWhoTime(IRCMessage *) { 680void IRCMessageParser::parseNumericalTopicWhoTime(IRCMessage *) {
681} 681}
682 682
683 683