diff --git a/backends/libcommuni/ircnetworkplugin.cpp b/backends/libcommuni/ircnetworkplugin.cpp index d7c9ae9e338fe734ffe4753686531e6be104c72f..74bdec24229287ab76ebdc641187a073deac5044 100644 --- a/backends/libcommuni/ircnetworkplugin.cpp +++ b/backends/libcommuni/ircnetworkplugin.cpp @@ -2,10 +2,13 @@ #include #include +#define FROM_UTF8(WHAT) QString::fromUtf8((WHAT).c_str(), (WHAT).size()) +#define TO_UTF8(WHAT) std::string((WHAT).toUtf8().data(), (WHAT).toUtf8().size()) + IRCNetworkPlugin::IRCNetworkPlugin(Config *config, Swift::QtEventLoop *loop, const std::string &host, int port) { this->config = config; m_socket = new QTcpSocket(); - m_socket->connectToHost(QString::fromStdString(host), port); + m_socket->connectToHost(FROM_UTF8(host), port); connect(m_socket, SIGNAL(readyRead()), this, SLOT(readData())); } @@ -28,8 +31,8 @@ void IRCNetworkPlugin::handleLoginRequest(const std::string &user, const std::st if (CONFIG_BOOL(config, "service.server_mode")) { MyIrcSession *session = new MyIrcSession(user, this); std::string h = user.substr(0, user.find("@")); - session->setNickName(QString::fromStdString(h.substr(0, h.find("%")))); - session->setHost(QString::fromStdString(h.substr(h.find("%") + 1))); + session->setNickName(FROM_UTF8(h.substr(0, h.find("%")))); + session->setHost(FROM_UTF8(h.substr(h.find("%") + 1))); session->setPort(6667); session->open(); std::cout << "CONNECTING IRC NETWORK " << h.substr(h.find("%") + 1) << "\n"; @@ -72,7 +75,7 @@ void IRCNetworkPlugin::handleMessageSendRequest(const std::string &user, const s } } std::cout << "MESSAGE " << u << " " << r << "\n"; - m_sessions[u]->sendCommand(IrcCommand::createMessage(QString::fromStdString(r), QString::fromStdString(message))); + m_sessions[u]->sendCommand(IrcCommand::createMessage(FROM_UTF8(r), FROM_UTF8(message))); std::cout << "SENT\n"; } @@ -89,8 +92,8 @@ void IRCNetworkPlugin::handleJoinRoomRequest(const std::string &user, const std: if (room.find("@") != std::string::npos) { // suffix is %irc.freenode.net to let MyIrcSession return #room%irc.freenode.net MyIrcSession *session = new MyIrcSession(user, this, room.substr(room.find("@"))); - session->setNickName(QString::fromStdString(nickname)); - session->setHost(QString::fromStdString(room.substr(room.find("@") + 1))); + session->setNickName(FROM_UTF8(nickname)); + session->setHost(FROM_UTF8(room.substr(room.find("@") + 1))); session->setPort(6667); session->open(); std::cout << "CONNECTING IRC NETWORK " << room.substr(room.find("@") + 1) << "\n"; @@ -103,10 +106,10 @@ void IRCNetworkPlugin::handleJoinRoomRequest(const std::string &user, const std: } std::cout << "JOINING " << r << "\n"; m_sessions[u]->addAutoJoinChannel(r); - m_sessions[u]->sendCommand(IrcCommand::createJoin(QString::fromStdString(r), QString::fromStdString(password))); + m_sessions[u]->sendCommand(IrcCommand::createJoin(FROM_UTF8(r), FROM_UTF8(password))); m_sessions[u]->rooms += 1; // update nickname, because we have nickname per session, no nickname per room. - handleRoomNicknameChanged(user, r, m_sessions[u]->nickName().toStdString()); + handleRoomNicknameChanged(user, r, TO_UTF8(m_sessions[u]->nickName())); } void IRCNetworkPlugin::handleLeaveRoomRequest(const std::string &user, const std::string &room) { @@ -120,7 +123,7 @@ void IRCNetworkPlugin::handleLeaveRoomRequest(const std::string &user, const std if (m_sessions[u] == NULL) return; - m_sessions[u]->sendCommand(IrcCommand::createPart(QString::fromStdString(r))); + m_sessions[u]->sendCommand(IrcCommand::createPart(FROM_UTF8(r))); m_sessions[u]->removeAutoJoinChannel(r); m_sessions[u]->rooms -= 1;